Redis之哨兵

1.  基本概念

    

     Redis Sentinel是Redis的高可用实现方案

2.  Redis的主从复制

    1.  优点

        从作为主的备份

        从可以扩展主的读能力        

    2.  缺点    

        需要手工干预

        主节点的写能力有限

        主节点的存储能力有限

        第一个缺点可以通过哨兵解决,剩下两个可以通过集群解决。

3.  Redis Sentinel的高可用    

    1.  拓扑结构

        

 

 

    2.  Redis Sentinel功能

        1.  监控  sentinel节点定期检测redis数据节点,其余sentinel节点是否可达

        2.  通知  sentinel节点会将故障转移的结果通知应用方

        3.  主节点故障转移  实现从节点晋升为主节点并维护后续正确的主从关系

        4.  配置提供者  Redis Sentinel结构中, 客户端在初始化的时候连接的Sentinel节点集合, 从中获取主节点信息。

    3.   安装和部署

        1.  部署Redis数据节点

            与安装主从复制一致

        2.  部署Sentinel节点           

port 26379
dir "/tmp"
sentinel monitor mymaster 192.168.1.49 7001 2  表示监控1.49这个主节点,2表示至少需要两个Sentinel节点认为不可达,mymaster是主节点的别名
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2

port 36379
dir "/tmp"
sentinel monitor mymaster 192.168.1.49 7001 2
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2

port 46379
dir "/tmp"
sentinel monitor mymaster 192.168.1.49 7001 2
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2

        3.  启动Sentinel节点

            1.  使用redis-sentinel命令

                redis-sentinel /opt/cachecloud/redis/redis_sentinel/26379/sentinel.conf &                                

            2.  使用redis-server加--sentinel参数                

                redis-server /opt/cachecloud/redis/redis_sentinel/26379/sentinel.conf --sentinel

        4.  查看Sentinel信息

            redis-cli -h 127.0.0.1 -p 26379 info sentinel

    4.  配置优化

        1.  sentinel monitor

            定期监控主节点

        2.  sentinel down-after-milliseconds
            sentinel down-after-milliseconds <master-name> <times>

            times  单位为毫秒  超过这个时间认为不可达

        3.  sentinel parallel-syncs

            sentinel parallel-syncs <master-name> <nums>

            向新的主节点发起复制操作的从节点个数,1为轮询发起复制,3为同时发起复制                                              

        4.  sentinel failover-timeout

            sentinel failover-timeout <master-name> <times> 

            故障转移超时时间

        5.  sentinel auth-pass

            sentinel auth-pass <master-name> <password> 

            如果主节点配置了密码,需要验证密码

        6.  监控多个主节点           

port 36379
dir "/tmp"
sentinel monitor mymaster 192.168.1.49 7001 2
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2

sentinel monitor mymaster 192.168.1.48 7001 2
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2

    5.  调整配置

        1.  动态调整

            sentinel set <param> <value>

            

 

 

            只对当前sentinel节点有效

            实时生效

            所有节点保持一致

    6.  部署技巧

        1.  sentinel节点不能在一个物理机器上

        2.  部署至少三个且奇数节点

        3.  可以使用一套或者多套,各有利弊

4.  sentinel的API    

    1.  sentinel masters

        显示所有被监控的主节点状态及相关的统计信息

    2.  sentinel masters <master name>

        显示指定主节点的状态及相关的统计信息

    3.  sentinel slaves <master name>    

        显示指定主节点的从节点的状态及相关的统计信息     

    4.  sentinel sentinel <master name> 

        显示指定主节点的sentinel 节点的状态及相关的统计信息(不含当前sentinel节点)

    5.  sentinel reset <pattern>

        对主节点进行重置

    6.  sentinel failover <master name> 

        强制故障转移

    7.  sentinel remove <master name>

        取消对主节点的监控

5.  客户端连接 

    1.  任何客户端连接Redis Sentinel,必须有Sentinel节点集合和masterName两个参数

6.  实现原理

    1.  三个定时监控任务

        1.  每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构

        2.  每隔2秒,每个Sentinel节点会向Redis数据节点的__Sentinel__:hello频道发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断 

        3.  每隔1秒,每个Sentinel节点会向主,从,其他Sentinel节点发送ping命令做一次心跳检测,来确认这些节点当前是否可达                 

    2.  主观下线和客观下线

        1.  主观下线

            当前Sentinel节点根据自己的判断,认为节点不可达

        2.  客观下线

            当Sentinel节点主观下线的是主节点,它会向其他Sentinel节点询问对主节点的判断,当超过quorum个数时,这个时候Sentinel节点就做出客观下线的决定。 

    3.  领导者Sentinel节点选举

        根据RAFT算法,谁先完成了客观下线,谁就是领导者        

    4.  故障转移

        

 

 

                                                       

posted @ 2022-03-09 11:47  奋斗史  阅读(120)  评论(0)    收藏  举报