美文网首页
服务master-slave切换

服务master-slave切换

作者: Damon_330b | 来源:发表于2020-10-04 22:22 被阅读0次

服务leader-slave切换

一个服务,如果很重要,一般需要对其进行主备部署,状态为主的节点对外提供服务,从节点时刻待命,等待主节点故障而取代成为主节点对外提供服务。如何高效准确的进行主从切换很重要。目前会发生主从切换的场景有:

  • 主节点程序主动退出
  • 主节点异常退出
  • 主节点与etcd网络异常

主节点程序主动退出

这种情况好处理,节点在退出之前删除在etcd上注册的节点,从节点watch到注册节点的变化,竞争成为主节点

主节点异常退出

异常退出,程序不能正常删除在etcd上注册的节点,从节点就不能感知主节点异常。因此,节点在注册时,需要设置ttl时间,主节点与etcd进行keepalive保活,异常后超过ttl时间没有保活心跳,etcd就会主动删除注册节点,从节点就会感知从而成为主节点。

主节点与etcd网络异常

网络异常的情况最难处理,因为虽然设置了ttl,并定期保活心跳,这种方式可以通知到从节点竞争成为主节点。但是原先的主节点还是在运行,因为与etcd网络异常,该节点不知道当前的主节点信息。一个简单的解决方式是,在保活心跳时失败时,服务直接点退出为从节点,避免新的当选的主节点与原来网络异常的主节点同时工作,但这可能会导致服务非常不稳定,主从节点会更频繁的切换。
我们可以使用etcd对ttl封装一个组件lease,来实现这个功能。

func (clientv3.Lease).KeepAliveOnce(ctx context.Context, id clientv3.LeaseID) (*clientv3.LeaseKeepAliveResponse, error)

type LeaseKeepAliveResponse struct {
    *pb.ResponseHeader
    ID  LeaseID
    TTL int64
}

使用接口KeepAliveOnce来做保活,并返回该lease剩余的过期时间ttl,我们根据剩余ttl计算预期的过期时间,保存在本地,然后定时坚持当前时间是否超过预期的过期时间,这样我们就可以准确的知道lease何时过期,然后及时做主从切换,避免主从切换的步骤依赖于外部的etcd

相关文章

  • 服务master-slave切换

    服务leader-slave切换 一个服务,如果很重要,一般需要对其进行主备部署,状态为主的节点对外提供服务,从节...

  • 手动调整master-slave切换.md

    说明 由于线上redis Master异常关机之后,重启redis哨兵模式三个节点都是slave,无法选择出主,一...

  • mysql常用架构设计

    数据库扩展解决了哪些问题?热备份、多活、故障切换、负载均衡、读写分离 1.主从架构(master-slave) 在...

  • redis的master-slave

    redis的主从(master-slave) 单点redis服务器的弊端单个服务器的情况下,如果这个服务器发生故障...

  • MySQL binlog 增量数据解析服务

    MySQL binlog 增量数据解析服务 介绍如何借助于 MySQL 的 Master-slave 协议实现 M...

  • Redis复制过程原理

    1、Redis支持主从(master-slave)复制功能,当主服务器更新数据时能同步到从服务器(1)在从Redi...

  • carte集群的搭建笔记

    原理 由一个主carte服务器和多个carte服务器组成,类似于master-slave结构,不同的是'maste...

  • Redis设计与实现3:多机数据库的实现

    复制 复制功能是让一台Redis服务器复制另一台服务器,也就是Master-Slave模式,通常用于实现读写分离。...

  • 深入探索HBase架构

    HBase架构的组成 HBase大体上按照master-slave架构可以分解成三种类型的服务。Region se...

  • Solr的主从模式Master-Slave

    Solr的主从模式Master-Slave

网友评论

      本文标题:服务master-slave切换

      本文链接:https://www.haomeiwen.com/subject/yblouktx.html