Redis集群搭建

72 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

基于哨兵机制的哨兵集群

哨兵(sentinel)机制用于实现主从集群的故障恢复,主要有三点作用

  1. 监控:不断检查master和slave是否正常工作
  2. 自动故障恢复:如果master发生故障,重新指定新的master
  3. 通知:作为redisClient的服务发现来源,当集群出现故障转移后,通知RedisClient
  • 如何实现服务状态监控?

    使用心跳机制每秒钟向实例发送ping命令,如果某个sentinel节点发现实例未响应则认定该实例主观下线,如果超过一半的sentinel认定主观下线,则该实例客观下线

  • 选举新的master?

    在与master断开时间不超过阈值的slave中选择offset值最大的那个,同时结合slave-priority和slave-id判断优先级

  • 故障转移是如何实现的?

    给要成为master的slave节点发送 slaveof no one 命令,给其他slave节点发送 slaveof ip:port 命令,从新的master节点同步数据,将原master节点标记为slave,故障恢复后称为新master的slave节点。

分片集群

哨兵集群只能解决高并发读的问题,另外对于大数据量的存储,单master节点无法解决,需要使用分片集群方式来解决。

即:使用多个master节点,每个master节点又有自己的slave节点,master节点之间互相健康检测,客户端访问任一master节点,请求最终被路由到正确的master节点上。

散列插槽:每个master节点映射到16384个hash slot上,每个节点负责存储一个范围的hash slot数据存储,数据和插槽相关联,根据插槽寻找对应实例

  • 如何计算数据属于哪个散列插槽?

    如果key中包含{},例如 {itcast}num ,以itcast通过CRC16计算得到hash值,取余计算得到hash插槽,因此将一类数据使用固定的itcast,可以让他们保存在同一个实例