Redis集群-7集群运维
Redis集群(最新版5.0.0)
7.集群运维
集群完整性
默认情况下redis的16384个槽必须全部指定,不然会导致集群不可用。但是出现故障到完成转移的过程,集群不可用一般不允许,可将参数cluster-require-full-coverage配置为no,只影响故障节点所负责的槽。
集群带宽消耗
集群的带宽主要分为读写命令带宽和Gossip消息消耗。
2.合理配置cluster-node-timeout,满足业务又能降低消息发送频率。
3.尽量均匀的部署在更多的机器上。同样的集群规模,节点越均匀整个集群的可用带宽上限越高。
集群倾斜
数据倾斜
请求倾斜
1.合理设计key。大对象进行拆分,避免hgetall整体读取。
2.热key避免映射到同一槽。
3.一致性要求不高的场景,客户端使用本地缓存减少调用。
集群读写分离
1.维护每个主节点可用从列表,针对从节点故障问题。
2.对读命令维护节点路由。
3.从节点新建连接开启readonly状态。
读写分离用于业务场景:多节点跨机房部署降低延迟;故障转移时从节点可用。但是这些场景可以通过不同机房部署独立的redis集群,客户端多写维护多份数据副本解决。
手动故障转移
1.从节点通知主节点停止请求。
2.主节点将延迟复制的数据发送给从节点。
3.从节点接收数据,复制偏移量一致,保证数据不丢失。
4.从节点发起投票,不需要延迟出发,立即触发。选举成功变为主节点,并向集群同步。
5.主变从,从变主。
应用场景
1.主节点迁移。遇到节点部署调整时先把主节点通过手动故障转移变为从节点,再下线操作。
2.强制故障转移。自动转移失败时,人工介入转移,自动故障转移失败的场景:主节点和从节点同时都故障,调整网络拓扑降低概率;所有的从节点不具备资格;网络故障不能完成选举;集群一半以上的主节点故障。