Docker Redis 部署哨兵模式

本文详细介绍了如何在Docker环境下使用Redis哨兵(Sentinel)部署哨兵模式,以确保在主节点宕机时能够自动进行故障转移,维持Redis集群的稳定性。内容包括哨兵模式的工作原理,如同步信息、保持同步和故障转移的步骤,以及具体的DockerRedis哨兵服务启动配置和测试过程。同时,文章还展示了哨兵的日志输出,以展示故障发生时的实时状态变化。
摘要由CSDN通过智能技术生成

Docker Redis 部署哨兵模式

哨兵模式

哨兵模式的存在,就是为了监控我们搭建的主从复制集群。在生产过程中出现主节点redis服务宕机的情况。这个时候需要出现的新的主节点,来和从节点进行主从复制。维持整个redis集群的稳定运行。 由此可以知道哨兵模式的存在是为了推举出新的主节点。

哨兵模式的基本原理

同步信息

sentinel节点和redis下master,slave节点间通信:
  • sentinel向redis下master节点发送info请求,获取master节点下的master info(runid) ,slaves info ,sentinels等信息

  • 根据上述获取的信息来向slave节点发送info请求获取slave下master info ,slaves info(runid,offset) ,sentinels info 等信息,并对之前的信息进行校正

sentinel节点间通信
  • ping 指令来询问各sentinel节点是否存活

  • 通过发布订阅(pub/sub)来维持各节点之间的信息同步

保持同步

sentinel 通知
  • 随机的sentinel节点向redis节点发送信息,来确认每个redis节点是否存活,并将各节点的存活状态同步到各个sentinel节点,下一次随机的sentinel节点重复上述的操作

故障转移

master 宕机后故障转移
  • 某个sentinel节点发现redis master 节点宕机,无法通信。此时该sentinel将其标记为主观掉线(sdown
  • 该sentinel将掉线消息发送给其他的sentinel,其他的sentinel也去请求掉线的master,如果认定掉线数达到半数,将掉线的master标记为客观掉线(odown
  • sentinel间选举,通过选举,得票数多的sentinel来执行这次故障转移操作–此过程可能会持续多次
  • 在slave间选举出新的master
    • 未掉线的
    • 响应快的
    • 与之前的master断开时间较短的
    • 优先原则:优先级比较高,偏移量大:数据最新,runid
  • 发送指令让选举的slave成为master

Docker Redis 启动哨兵服务

配置文件 redis-sentinel-*.conf

redis-sentinel文档

port 26380
sentinel monitor mymaster 127.0.0.1 6382 1  # 配置master信息,最后的数字为客观掉线的票数
sentinel down-after-milliseconds mymaster 5000 # 主观失联时间 ms
sentinel failover-timeout mymaster 60000 # 故障转移超时时间

启动哨兵(本文为单机)
yefeng@yefeng-PC:~$ docker run --name redis-sentinle --net host -v $PWD/sentinel-conf:/usr/local/etc/redis redis:5.0 redis-server /usr/local/etc/redis/redis-sentinel-1.conf --sentinel
查看日志
yefeng@yefeng-PC:~$ docker logs -f -t redis-sentinle
测试
yefeng@yefeng-PC:~$ docker exec -it redis-m /bin/bash
root@yefeng-PC:/data# redis-cli -p 26380 #登录哨兵
127.0.0.1:26380> SENTINEL get-master-addr-by-name mymaster  # 查看当前的master
1) "127.0.0.1"
2) "6382"
127.0.0.1:26380> sentinel master mymaster # 查看当前的master-- flags = master
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "127.0.0.1"
 5) "port"
 6) "6382"
 7) "runid"
 8) "1aefadc85c49aa46efa6e306ffa9bfcf19312cbe"
 9) "flags"
10) "master"
11) ....
yefeng@yefeng-PC:~$ docker stop redis-s2 #关闭master
yefeng@yefeng-PC:~$ docker exec -it redis-m /bin/bash
root@yefeng-PC:/data# redis-cli -p 26380 #登录哨兵
127.0.0.1:26380> SENTINEL get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6381" # master更新
127.0.0.1:26380> 
哨兵日志
--------------主观掉线----------------
2021-05-26T09:53:13.714969650Z 1:X 26 May 2021 09:53:13.714 # +sdown master mymaster 127.0.0.1 6382
--------------客观掉线----------------
2021-05-26T09:53:13.715043160Z 1:X 26 May 2021 09:53:13.714 # +odown master mymaster 127.0.0.1 6382 #quorum 1/1
..........
--------------找到合适slave替换----------------
2021-05-26T09:53:46.089383112Z 1:X 26 May 2021 09:53:46.088 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6382
..........
--------------重建主从关系----------------

spring boot 连接

spring:
  redis:
    lettuce:
      pool:
        max-active: 100
        max-idle: 16
        max-wait: 1000
        min-idle: 4
      shutdown-timeout: 1000
#Cannot retrieve initial cluster partitions from initial URIs
#主从复制需要这样配置哨兵才能访问
    sentinel:
      master: mymaster
      nodes: 127.0.0.1:26380
    database: 12

### 结尾
环境:deepin 20.2 docker
测试项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值