searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Access保障Redis cluster服务在某些不可恢复场景下的高可用机制

2023-03-10 08:24:24
47
0

在redis cluster容错机制中,我们通常会为集群中每个主节点设置若干的从节点,这样可以保证当某个主节点发生故障时,集群会自动将其中某个节点提升为主节点。但是如果某个主节点没有从节点,主发生故障时,会导致集群出于不可用的状态,服务端会抛出(error) CLUSTERDOWN The cluster is down的错误。

不过redis cluster提供了cluster-require-full-coverage配置,当cluster-require-full-coverage 参数为no时 集群若有一对主从都故障,集群也会仍保持可用;依靠redis cluster自身的高可用性,那么什么时候会导致集群不可用的情况?

  1. 集群任意主挂掉,并且当前主没有从节点,集群不可用(cluster-require-full-coverage = yes)
  2. 集群超过半数以上的主同时故障,无论是否有这些主是否有从节点,集群不可用 (选举过程是集群中所有的主节点参与,如果半数以上master节点与故障master节点通信,若通信超过cluster-node-timeout, 则认为当前master节点挂掉,需要对其进行主从切换)

若同时遇到半数以上的主节点故障时,依赖集群自身的高可用无法恢复,这时依赖接入机Access介入:

接入机Access会定期收集每个主节点的状态,如果超过两倍的cluster-node-timeout,这时由接入机介入恢复(只有在redis cluster自身无法恢复的情况下接入:如果在cluster-node-timeout内,access介入会干扰集群自身的恢复机制)Access介入机制具体如下:。

 

* Access介入  一般都是集群失效状态(无法完成自动切换的场景)

* 场景一 主节点未宕机 判断master节点数超过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER 等待数据同步并且投票

* 场景二 主节点未宕机 判断master节点数少于过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER TAKEOVER  无需投票

* 场景三 主节点已宕机 判断master节点数超过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER FORCE 不用等待数据同步

* 场景四 主节点已宕机 判断master节点数少于过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER TAKEOVER

 

* 优先级 cluster failver > cluster failover force > cluster failover takeover

 

                                                                         

 

CLUSTER FAILOVER处理流程

Step1: 通知master停止处理来自客户端的请求

Step2:master响应当前最大的replication offset

Step3: 客户端等待复制复制同步完成直到replication offset

Step4: 提升epoch并获取半数leader的选举认可

Step5: 更新configuration并解除客户端的阻塞请求,返回重定向到新的master

该操作用于正常的主从切换,但是如果master节点宕机了无法响应failover请求,那么failover将会失败,为了处理master宕机的情况,可以添加FORCE 选项。

CLUSTER FAILOVER FORCE: 添加FORCE选项时,failover流程直接从上述的第4步开始,也即跳过了和旧master通信协商复制数据的过程,当master宕机时,force选项可以快速进行人工主从切换。但是该过程仍然需要获得半数master的统=同意才能当选为新主。当出现半数master节点异常时,该流程无法进行主从切换。

CLUSTER FAILOVER TAKEOVER: 为了处理半数master节点异常的场景,可以添加TAKEOVER 选项。通过TAKEOVER 选项,可以无需获得半数master的认同,而是直接更新状态为master并向所有可达的节点发送最新配置epoch。

附:集群架构

0条评论
0 / 1000
w****n
12文章数
1粉丝数
w****n
12 文章 | 1 粉丝
原创

Access保障Redis cluster服务在某些不可恢复场景下的高可用机制

2023-03-10 08:24:24
47
0

在redis cluster容错机制中,我们通常会为集群中每个主节点设置若干的从节点,这样可以保证当某个主节点发生故障时,集群会自动将其中某个节点提升为主节点。但是如果某个主节点没有从节点,主发生故障时,会导致集群出于不可用的状态,服务端会抛出(error) CLUSTERDOWN The cluster is down的错误。

不过redis cluster提供了cluster-require-full-coverage配置,当cluster-require-full-coverage 参数为no时 集群若有一对主从都故障,集群也会仍保持可用;依靠redis cluster自身的高可用性,那么什么时候会导致集群不可用的情况?

  1. 集群任意主挂掉,并且当前主没有从节点,集群不可用(cluster-require-full-coverage = yes)
  2. 集群超过半数以上的主同时故障,无论是否有这些主是否有从节点,集群不可用 (选举过程是集群中所有的主节点参与,如果半数以上master节点与故障master节点通信,若通信超过cluster-node-timeout, 则认为当前master节点挂掉,需要对其进行主从切换)

若同时遇到半数以上的主节点故障时,依赖集群自身的高可用无法恢复,这时依赖接入机Access介入:

接入机Access会定期收集每个主节点的状态,如果超过两倍的cluster-node-timeout,这时由接入机介入恢复(只有在redis cluster自身无法恢复的情况下接入:如果在cluster-node-timeout内,access介入会干扰集群自身的恢复机制)Access介入机制具体如下:。

 

* Access介入  一般都是集群失效状态(无法完成自动切换的场景)

* 场景一 主节点未宕机 判断master节点数超过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER 等待数据同步并且投票

* 场景二 主节点未宕机 判断master节点数少于过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER TAKEOVER  无需投票

* 场景三 主节点已宕机 判断master节点数超过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER FORCE 不用等待数据同步

* 场景四 主节点已宕机 判断master节点数少于过一半, access在故障master对应的 slave节点执行CLUSTER FAILOVER TAKEOVER

 

* 优先级 cluster failver > cluster failover force > cluster failover takeover

 

                                                                         

 

CLUSTER FAILOVER处理流程

Step1: 通知master停止处理来自客户端的请求

Step2:master响应当前最大的replication offset

Step3: 客户端等待复制复制同步完成直到replication offset

Step4: 提升epoch并获取半数leader的选举认可

Step5: 更新configuration并解除客户端的阻塞请求,返回重定向到新的master

该操作用于正常的主从切换,但是如果master节点宕机了无法响应failover请求,那么failover将会失败,为了处理master宕机的情况,可以添加FORCE 选项。

CLUSTER FAILOVER FORCE: 添加FORCE选项时,failover流程直接从上述的第4步开始,也即跳过了和旧master通信协商复制数据的过程,当master宕机时,force选项可以快速进行人工主从切换。但是该过程仍然需要获得半数master的统=同意才能当选为新主。当出现半数master节点异常时,该流程无法进行主从切换。

CLUSTER FAILOVER TAKEOVER: 为了处理半数master节点异常的场景,可以添加TAKEOVER 选项。通过TAKEOVER 选项,可以无需获得半数master的认同,而是直接更新状态为master并向所有可达的节点发送最新配置epoch。

附:集群架构

文章来自个人专栏
redis
12 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0