4.3.2.3 Slave选举的过程
Slave节点递增自己的currentEpoch字段
发送FAILOVER_AUTH_REQUEST数据包给每一个MASTER节点
若Slave在MAX((2*NODE_TIMEOUT),2)的时间内获得大多数MASTER节点的投票,则赢得选举
其间,所有currentEpoch小于选举发起时取值的MASTER投票都会被丢弃
若没有任何Slave赢得选举,选举可以在MAX(NODE_TIMEOUT * 4,4)的时间后重新举行
4.3.2.4 Master节点投票逻辑
请求选举的Slave的Master必须处于FAIL状态
Master节点维护lastVoteEpoch字段,每当MASTER给某个选举请求投票时,更新lastVoteEpoch字段为请求的currentEpoch值
currentEpoch<lastVoteEpoch的选举请求都不予投票
currentEpoch<MASTER currentEpoch字段的选举请求都不予投票
4.2.3.5 选举优先权
当Slave节点发现Master节点处于FAIL状态时,不会立刻试图进行选举,而是会延迟一段时间,延迟时常用以下公式进行计算:
DELAY = 500 milliseconds + random delay between 0 and 500 milliseconds + SLE_RANK * 1000 milliseconds
其中,SLE_RANK由Slave收到Master数据复制的更新程度来衡量。在发起选举之前,Slave之间交换各自获得Master数据复制的更新排名,最新更新的SLE_RANK = 0, 其次更新的SLE_RANK = 1,以此类推...
4.2.3.6 故障转移耗时评估
假设配置NODE_TIMEOUT=2s,FAIL_REPORT_VALIDITY_MULT=3s
标记Master为PFAIL状态耗时NODE_TIMEOUT=2s
升级PFAIL状态为FAIL状态,耗时:NODE_TIMEOUT * FAIL_REPORT_VALIDITY_MULT = 6s
选举前随机延时期望:1s
收集足够多Master投票:MAX((2*NODE_TIMEOUT),2)=4s
总计耗时约:13s
4.3.3 主备平衡功能
Redis Cluster能够自动的迁移Slave节点,从Slave节点有冗余的Master节点到完全没有Slave节点的Master节点。
具体算法:
首先定义Good Slave:对于某一节点来说,如果另一个Slave节点没有处于FAIL状态,则认为该Slave节点为Good Slave节点。
当有Slave节点发现有Master节点没有Good Slave时开始触发主备平衡迁移。
所有发现有主备平衡需求之后,拥有最多Good Slave节点的Master节点的所有Slave中,Node ID最小的Slave节点真正开始迁移。成为没有没有Good Slave Master新Master。
可以配置cluster-migration-barrier参数,控制主备平衡迁移的时候,迁出Master最少需要拥有的Good Slave数
4.4 Codis
支持故障检测并报警
codis-redis-group中的Slave节点无法自动提升为Master节点
由管理员通过Web界面/命令行来手动操作
5.功能限制
Twemproxy:
不支持多key操作
不支持MULTI/EXEC
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30886-4.html
滚动复利
>得道多助
好暖心哈哈哈哈