使用cluster nodes查看
64b8c5798f880927b81ca09d8fc21ab2402767a5 162.14.74.11:7008@17008 slave d5004e076572b8fab64c8cc4473c298396b78823 0 1663168579000 8 connected ef24f98f9d811539ed3aa7ebd58b42c02ae11c1a 162.14.74.11:7005@17005 slave d77367d7830b4503980a14e379cb06a271906787 0 1663168577000 7 connected 5a92ba294e35f1d61e8091216c59c2fa44adfb9d 162.14.74.11:7002@17002 master - 0 1663168579327 2 connected 7687-10922 d77367d7830b4503980a14e379cb06a271906787 10.0.0.5:7001@17001 myself,master - 0 1663168578000 7 connected 1550-6961 10923-12421 448b264edf1f697128395d8b6a656129024e2b55 162.14.74.11:7006@17006 slave 5a92ba294e35f1d61e8091216c59c2fa44adfb9d 0 1663168580330 2 connected d5004e076572b8fab64c8cc4473c298396b78823 162.14.74.11:7007@17007 master - 0 1663168579000 8 connected 0-1549 6962-7686 12422-13146 841ea8438a496f02c3866fa71fc9d4271b94e946 162.14.74.11:7004@17004 slave 851c1b20f0616b60f172837e7e4bce792397d8ac 0 1663168579000 3 connected 851c1b20f0616b60f172837e7e4bce792397d8ac 162.14.74.11:7003@17003 master - 0 1663168578000 3 connected 13147-163832.4.3、Redis缩容
原理与扩容一样
redis-cli --cluster del-node 162.14.74.11:7008 64b8c5798f880927b81ca09d8fc21ab2402767a5 -a abcAbc123.2.5、Redis故障转移(failover)
故障检测
集群中的每个节点都会定期地(每秒)向集群中的其他节点发送PING消息
如果在一定时间内(cluster-node-timeout) , 发送ping的节点A没有收到某节点B的pong回应 , 则A将B标识为pfail 。
A在后续发送ping时 , 会带上B的pfail信息 , 通知给其他节点 。
如果B被标记为pfail的个数大于集群主节点个数的一半(N/2 + 1)时 , B会被标记为fail , A向整个集群广播 , 该节点已经下线 。其他节点收到广播 , 标记B为fail 。
从节点选举
使用raft算法 , 每个从节点 , 都根据自己对master复制数据的offset , 来设置一个选举时间 , offset越大(复制数据越多)的从节点 , 选举时间越靠前 , 优先进行选举 。
slave通过向其他master发送FAILVOER_AUTH_REQUEST消息发起竞选 , master收到后回复FAILOVER_AUTH_ACK消息告知是否同意 。
slave发送FAILOVER_AUTH_REQUEST前会将currentEpoch自增 , 并将最新的Epoch带入到FAILOVER_AUTH_REQUEST消息中 , 如果自己未投过票 , 则回复同意 , 否则回复拒绝 。
所有的Master开始slave选举投票 , 给要进行选举的slave进行投票 , 如果大部分master node(N/2 + 1)都投票给了某个从节点 , 那么选举通过 , 那个从节点可以切换成master 。
RedisCluster失效的判定:
- 1、集群中半数以上的主节点都宕机(无法投票)
- 2、宕机的主节点的从节点也宕机了(slot槽分配不连续)
变更通知
当slave收到过半的master同意时 , 会成为新的master 。此时会以最新的Epoch通过PONG消息广播自己成为master , 让Cluster的其他节点尽快的更新拓扑结构(node.conf)
主从切换
从节点通过选举自动切换 。
人工处理手动切换
- 1、向从节点发送cluster failover命令
- 2、从节点告知其主节点要进行手动切换(CLUSTERMSG_TYPE_MFSTART)
- 3、主节点会阻塞所有客户端命令的执行(10s)
- 4、从节点从主节点的ping包中获得主节点的复制偏移量
- 5、从节点复制达到偏移量 , 发起选举、统计选票、赢得选举、升级为主节点并更新配置
- 6、切换完成后 , 原主节点向所有客户端发送moved指令重定向到新的主节点
如果主节点下线了 , 则采用cluster failover force或cluster failover takeover进行强制切换 。
副本漂移
我们知道在一主一从的情况下 , 如果主从同时挂了 , 那整个集群就挂了 。
为了避免这种情况我们可以做一主多从 , 但这样成本就增加了 。
Redis提供了一种方法叫副本漂移 , 这种方法既能提高集群的可靠性又不用增加太多的从机 。
文章插图
Master1宕机 , 则Slaver11提升为新的Master1
集群检测到新的Master1是单点的(无从机)
推荐阅读
- Redis 的大 Key 对持久化有什么影响?
- 手机防窥膜的原理是什么?真的会影响视力吗?
- 碘酒消毒的原理是什么?
- 三大指纹识别原理 指纹识别技术
- 玄空风水原理和方法 大玄空风水
- 图解涡轮增压器工作原理 涡轮增压器工作原理
- 跳绳减肥原理是什么
- 瘦身舞蹈瘦腿的原理是什么?
- 详解反渗透膜(RO 反渗透膜原理工作原理)
- 精索静脉曲张手术原理
