2022-01-27 redis-cluster集群-脑裂问题分析

2022-01-27 redis-cluster集群-脑裂问题分析,第1张

2022-01-27 redis-cluster集群-脑裂问题分析

目录

摘要:

cluster集群故障检测和主从切换:

redis-cluster脑裂问题的出现原因:

脑裂解决策略:

方案选择:


摘要:

分析redis-cluster集群模式, 脑裂问题的解决策略

cluster集群故障检测和主从切换:

NDB.Redis-数据安全-cluster集群

redis-cluster脑裂问题的出现原因:

设定集群中有cluster1, 包含一主一从, master1和slave1。 client与master1连接。

此时有两个网络分区:

    client与master1的网络分区cluster集群的其他master节点与master1的网络分区

脑裂出现的前置条件:

    cluster集群中超过半数的master节点, 与master1节点间, 出现网络断开client与master1的网络连接正常

cluster集群中超过半数的master节点, 与master1节点间, 出现网络断开:

导致:

    cluster集群判定master1进入FAIL状态slave1接收到master1进入FAIL状态的广播, 开始申请主从切换投票slave1被超过半数的master节点投票通过, slave1开始进入master状态,并广播新的master对整个cluser集群来说, 原有的master1已经下线, master节点由slave1切换完成对于cluster1来说, 现在最新的数据, 是由原来的slave1提供对于原有的mastee1
      原有的master1节点的数据将丢失
      如果cluster集群判定重新上线, 则被判定为slave状态, 由原来的slave1主从切换后,全量复制一份slave1的数据

client与master1的网络连接正常:

此时client有以下条件:

    client不重新请求cluster集群中的集群路由信息client与master1的网络通道正常


导致:

    client的数据继续写入master1但是对于cluster集群, 已判定master1进入FAIL状态, 并已选举出新的master节点导致client写入master1的数据将丢失

脑裂解决策略:

策略一: client心跳检测更新cluster集群信息, 减少与判定为FAIL的master1的连接时间

具体做法:

    client的角色由集群代理proxy负责缩短proxy节点查询cluster路由表状态的时间周期
      slave节点, 和proxy查询的cluster节点,同时收到master1的FAIL状态改变
      slave主从切换的时间, 包括
      cluster集群中某一mater判定master1为FAIL,则广播该消息,认为所有的节点都同时接收到master1进入FAIL的状态则需要 proxy心跳检测的时间周期 < 主从切换的时间

    向所有的master发送投票请求-耗时:接受过半的master的投票相应-耗时:做主从切换-耗时:
proxy从静态节点查询路由表的时间
    ClusterServerPool::RefreshInterval 配置查询周期, 可精确至us, 微秒

策略二: master1节点判断自己是否已与cluster集群网络隔离,如果已隔离,则拒绝写入

原理: master自身判断自己是否已经没有与从节点做过数据交换,如果过长时间没有做过数据交换, 则认为本节点已经被cluster集群判定下线,则本master节点拒绝写入

redis.conf的配置属性:

    min-replicas-to-write: master节点至少的slave节点数目, 否则master拒绝写入min-replicas-max-lag: master节点至少与slave节点数据心跳ping时间, 超过该时间, 则master拒绝写入

使用min-replicas-max-lag配置可行性分析:

说明: 该配置由master判定与slave的复制时间, 来决定自己是否可以被执行写入, 从而避免在被集群判定FAIL时, 继续向旧master写入

存在的问题:

    master的FAIL状态判定, 与master节点的拒绝被写入, 是不同的判断路径
      master1进入FAIL, 是由cluster集群中的其他master节点负责判定master1节点拒绝写入, 则是master节点判断与slave节点的ping间隔
    cluster一主一从部署时, 主节点故障发生主从切换,新的主节点将拒绝写入
      master宕机,slave切换为master,此时新的master没有slave因为没有slave,导致min-replicas-max-lag判定超时, 导致新的master拒绝写入, 从而导致该cluster分片不可用

方案选择:
    客户端通过proxy连接时, 缩短proxy查询集群状态的周期客户端直接连接cluster的master节点时, 暂时(630版本)不做处理

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5716438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存