美文网首页
Redis 集群

Redis 集群

作者: Oliver_Li | 来源:发表于2021-02-28 22:03 被阅读0次
    节点
    1. Redis集群提供分片部署,是最常见的线上部署方式,集群和单机节点不一样,集群只有一个库,集群常见最少6节点,3主3从,3个从节点分别复制3个主节点,达到故障转移的效果。
    2. 开始时需要在配置中开启cluster-enabled,可以自动分配redis-cli --cluster create --cluster-replicas 1 ip:port ...(5.0后redis-trib已不可用)代表各主节点一个从节点并且槽平均分,也可以手动加入,手动加入后默认都是master,需要手动分配从节点和槽。
    3. 结构方面每个节点都保存一个clusterStatus+clusterNode字典,clusterStatus负责标记当前节点的状态等信息,clusterNode代表集群里每个节点的信息,包括每个节点的名字、ip端口、tcp套接字、槽信息等。
    4. 新节点加入集群后通过gossip协议传播给其他节点,每个节点都维护着集群里各个节点信息。
    1. 集群一共16384个槽,分布在每个主节点上,每个数据都会通过crc(16) & 16383的方式确定槽的位置,进而确定节点把具体数据放入该节点的槽里。
    2. 集群初始化时节点是未分配的,所有节点必须都分配下去才可以正常运行,手动分配后会在每个节点的clusterNode字典内标识,使用时就可以知道数据是否在当前节点,如果当前节点不存在会返回MOVED错误并夹带需要跳转节点信息。
    3. 加入新节点时,为了槽能够平均分布在主节点,一般都会重新分配,Redis提供在线迁移,因为是在线迁移,所以必然会出现查询到正在迁移的数据,会出现ASK错误,和MOVED错误类似,当前节点知道数据正在迁移ASK也会引导用户到新节点进而完成查找。
    集群复制
    1. 集群的主从复制流程和复制部署模式类似,看之前文章即可。
    主从切换
    1. 从节点会复制主节点数据已达到灾备转移的目的,所有节点会向随机集群内三个节点定时发送Ping消息,cluster-node-timeout默认15秒,某主节点宕机后未在超时时间内返回响应会被探测的节点认定为PFAIL即疑似下线,并通知其他节点,集群节点间会通过gossip发送下线节点信息,当集群内大部分节点都认为某节点PFAIL时,会整体群发让其他节点都让这个节点标记为FAIL正式下线,所以一般为了可用性cluster-node-timeout会设置更短超时如5秒,保证快速启动故障转移。
    2. 如果宕机为主节点,会发生故障转移,从节点提升为主节点,并向集群内其他节点发送消息,声明代替之前宕机的主节点工作。从节点会通过raft算法进行选举,需要注意的是这个参与投票的是活着的所有master节点,具体raft机制后续会写,真正线上使用时一个从节点保证正常工作即可,所以一般不会有选举冲突。

    • 下面两篇记录Redis的一致性算法raft和消息传播协议gossip

    相关文章

      网友评论

          本文标题:Redis 集群

          本文链接:https://www.haomeiwen.com/subject/rbcnfltx.html