redis哨兵集群

作者: 百里江山 | 来源:发表于2020-01-10 23:19 被阅读0次

    Redis Sentinel从Redis2.8版本开始才正式生产可用

    哨兵示意图

    哨兵集群 image.png

    启动

    redis-sentinel sentinel.conf

    sentinel.conf详解

    • 启动前的配置信息
    # 监听端口
    port 26381
    # 后台运行
    daemonize yes
    # 运行PID存储文件
    pidfile "/var/run/redis-sentinel-26381.pid"
    # 日志输出文件
    logfile "/usr/local/redis-ms/logs/sentinel-26381.log"
    # 工作目录
    dir "/usr/local/redis-ms/data"
    # 
    sentinel deny-scripts-reconfig yes
    # 监控master的ip, port, 取个别名叫: mymaster
    # 2代表判断主节点失败至少需要2个Sentinel节点同意,才允许master下线.(一种投票方式)
    # 为什么只监控主节点, 从节点不监控呢?因为可以通 master节点的info replication信息获取从节点信息,如果有新节点添加, 自动感知.
    sentinel monitor mymaster 192.168.21.22 6381 2
    # 每个Sentinel节点通过定时发送ping判断节点延时时间
    # 30000毫秒,即30秒.
    # 设置大小影响对主节点的判定.
    sentinel down-after-milliseconds mymaster 30000
    # 故障转移超时时间
    sentinel failover-timeout mymaster 180000
    #当发生故障转移则设置几个节点发起复制操作. 
    # 如果是1的话,则使用轮询操作, 如: 先6379->6380->6381
    # 如果是3的话,则同步3个节点发起复制操作. 造成CPU压力过大.
    sentinel parallel-syncs mymaster 1
    #如果主节点设置密码则在此写上.
    sentinel auth-pass mymaster 123456
    

    sentinel monitor监控节点详解

    sentinel monitor <master-name> <ip> <port> <quorum>

    1. master-name是别名
    2. ip: 主节点的ip
    3. port 主节点的port
    4. quorum参数用于故障发现和判定,即Sentinel同意的节点数.如何设置?
    • 如何设置: quorum采用sentinel集群个数一半加1, 如3个sentinel集群,则使用: 3/2 + 1 取2值.
    • 先举sentinel主节点. 2表示至少得到2票才能当选sentinel主节点.

    故障转移过程

    a)选出合适从节点。
    b)晋升选出的从节点为主节点。
    c)命令其余从节点复制新的主节点。
    d)等待原主节点恢复后命令它去复制新的主节点。

    测试故障

    1. redis-cli -p 6379 DEBUG sleep 30 # 模拟6379出现故障
    2. sentinel get-master-addr-by-name mymaster # 然后获取最新主节点信息

    命令

    • info 查看详情信息
    • info sentinel 查看sentinel信息
    • DEBUG sleep 30 模拟故障
    • sentinel masters 查看所有监控的信息
    • sentinel master mymaster查看mymaster节点信息
    • sentinel slaves mymaster 查看mymaster监控的所有从节点信息
    • sentinel sentinels mymaster 查看mymaster sentinel的从节点信息
    • sentinel failover mymaster 手动强制故障转移
    • sentinel ckquorum mymaster 检查是否符合故障转移的配置.
    • sentinel flushconfig 将Sentinel节点的配置强制刷到磁盘上(非常有用)
    • sentinel remove<master name> 取消当前Sentinel节点对于指定<master name>主节点的监控
    • sentinel monitor<master name><ip><port><quorum> 添加Sentinel节点对主节点的监控
    • sentinel get-master-addr-by-name mymaster 获取主从节点最新的主节点IP与PORT, 用于客户端动态获取主节点信息.

    遇到的坑.

    之前的master节点没有设置masterauth选项, 导致从主节点切换到从节点, 没有权限连接新节点, 一起报
    (Non critical) Master does not understand REPLCONF listening-port: -NOAUTH Authentication required.

    1. 模拟一下故障转移.sentinel failover mymaster
    2. 出现故障的节点1,登陆进去,使用config set masterauth "123456" 设置密码.
    朕说完了.jpeg

    总结

    1. Redis Sentinel是Redis的高可用实现方案:故障发现、故障自动转移、配置中心、客户端通知
    2. 尽可能在不同物理机上部署Redis Sentinel所有节点
    3. Redis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数
    4. Redis Sentinel中的数据节点与普通数据节点没有区别。
    5. 客户端初始化时连接的是Sentinel节点集合,不再是具体的Redis节
      点,但Sentinel只是配置中心不是代理
    6. Redis Sentinel通过三个定时任务实现了Sentinel节点对于主节点、从
      节点、其余Sentinel节点的监控
    7. Redis Sentinel在对节点做失败判定时分为主观下线和客观下线
    8. 看懂Redis Sentinel故障转移日志对于Redis Sentnel以及问题排查非常
      有帮助。
    9. Redis Sentinel实现读写分离高可用可以依赖Sentinel节点的消息通
      知,获取Redis数据节点的状态变化。

    相关文章

      网友评论

        本文标题:redis哨兵集群

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