目录
摘要:
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的投票相应-耗时:做主从切换-耗时:
- 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间隔
- master宕机,slave切换为master,此时新的master没有slave因为没有slave,导致min-replicas-max-lag判定超时, 导致新的master拒绝写入, 从而导致该cluster分片不可用
- 客户端通过proxy连接时, 缩短proxy查询集群状态的周期客户端直接连接cluster的master节点时, 暂时(630版本)不做处理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)