Redis哨兵模式

Redis哨兵模式(Redis Sentinel)

Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

Redis Sentinel的主要功能:

  • 监控:Sentinel会不断的检查主服务器和从服务器是否正常运行。
  • 通知:当被监控的某个Redis服务器出现问题,Sentinel通过API脚本向管理员或者其他的应用程序发送通知。
  • 自动故障转移:当主节点不能正常工作时,Sentinel会开始一次自动的故障转移操作,它会将与失效主节点是主从关系的其中一个从节点升级为新的主节点, 并且将其他的从节点指向新的主节点。
  • 配置提供:在Redis Sentinel模式下,客户端应用在初始化时连接的是Sentinel节点集合,从中获取主节点的信息。

在这里插入图片描述

哨兵模式的配置

环境说明:

主机名称IP地址端口及角色
redis-master192.29.0.1476379 主节点
redis-slave01192.29.0.2036379 从节点
redis-slave02192.29.0.2046379 从节点
redis-master192.29.0.14726379 哨兵1
redis-slave01192.29.0.20326379 哨兵2
redis-slave02192.29.0.20426379 哨兵3

分别修改每台服务器的Sentinel.conf配置文件

# 端口
 port 26379  

# pid文件路径 
pidfile /var/run/redis-sentinel_26379.pid 

# 日志文件路径 
logfile "/home/redis5/26379/sentinel.log"

# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为 
sentinel monitor mymaster 192.29.0.147 6379 2 

# 如果mymaster 30秒内没有响应,则认为其主观失效
 sentinel down-after-milliseconds mymaster 30000 

# 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒 
sentinel failover-timeout mymaster 180000 

启动Sentinel

启动顺序为:主redis - 从redis - sentinel 1/2/3

[root@redis-master~]#./redis-sentinel/home/redis5/26379/sentinel.conf [root@redis-master ~]# ps -ef |grep redis 
root   1295 1 0 14:03 ? 00:00:06 /home/redis5/6379/redis-server 192.29.0.147:6379 
root   1407   1   1    14:40    ? 00:00:00 redis-sentinel *:26379 [sentinel] 
root    1412 1200 0    14:40    pts/1 00:00:00 grep --color=auto redis 

[root@redis-slave01~]#./redis-sentinel/home/redis5/26379/sentinel.conf [root@redis-slave01 ~]# ps -ef |grep redis 
root 1625 1 0 14:04 ? 00:00:06 /home/redis5/6379/redis-server 192.29.0.203:6379
root    1715   1   1    14:41 ? 00:00:00 redis-sentinel *:26379 [sentinel] 
root    1720 1574 0    14:41 pts/0 00:00:00 grep --color=auto redis 

[root@redis-slave02~]#./redis-sentinel/home/redis5/26379/sentinel.conf [root@redis-slave02 ~]# ps -ef |grep redis 
root 1628 1 0 14:07 ? 00:00:06 /home/redis5/6379/redis-server 192.29.0.204:6379 
root    1709   1    0   14:42   ? 00:00:00 redis-sentinel *:26379 [sentinel] 
root    1714 1575  0   14:42    pts/0 00:00:00 grep --color=auto redis

Sentinel操作

[root@redis-master ~]# redis-cli -p 26379 #客户端登录哨兵 
192.29.0.147:26379> sentinel master mymaster #输出被监控的主节点的状态信息 
1)"name"
2)"mymaster" 
3)"ip"
4)"192.29.0.147" 
5)"port" 
6)"6379" 
7)"runid" 
8)"bae06cc3bc6dcbff7c2de1510df7faf1a6eb6941" 
9)"flags" 
10)"master"

192.29.0.147:26379> sentinel slaves mymaster #输出被监控的从节点的状态信息 
1)1)"name"
2)"192.29.0.203:6379" 
3)"ip"
4)"192.29.0.203" 
5)"port" 
6)"6379" 
7)"runid" 
8)"c86027e7bdd217cb584b1bd7a6fea4ba79cf6364" 
9)"flags" 
10)"slaves"
......
2)1)"name"
2)"192.29.0.204:6379" 
3)"ip"
4)"192.29.0.204" 
5)"port" 
6)"6379" 
7)"runid" 
8)"61597fdb615ecf8bd7fc18e143112401ed6156ec" 
9)"flags" 
10)"slaves"

192.29.0.147:26379> sentinel sentinels mymaster #查看其它sentinel信息 
1)1)"name" 
2)"ba12e2a4023d2e9bcad282395ba6b14030920070" 
3)"ip" 
4)"192.29.0.203" 
5)"port" 
6)"26379" 
7)"runid" 
8)"ba12e2a4023d2e9bcad282395ba6b14030920070" 
9)"flags" 
10)"sentinel" 
......  
2)1)"name" 
2)"14fca3f851e9e1bd3a4a0dc8a9e34bb237648455" 
3)"ip" 
4)"192.29.0.204" 
5)"port" 
6)"26379" 
7)"runid" 
8)"14fca3f851e9e1bd3a4a0dc8a9e34bb237648455" 
9)"flags" 
10)"sentinel"

模拟停止master上的Redis,查看Redis的主从变化

[root@redis-master ~]# systemctl stop redis        #停止master上的redis

[root@redis-master ~]# redis-cli -p 26379 #哨兵模式下查看主从信息,也是可以看到主从的变化 
192.29.0.147:26379> sentinel master mymaster 
1)"name" 
2)"mymaster" 
3)"ip"
4)"192.29.0.204" 
5)"port" 
6)"6379" 
7)"runid"
8)"61597fdb615ecf8bd7fc18e143112401ed6156ec" 
9)"flags" 
10)"master" 
...... 
192.29.0.147:26379> sentinel slaves mymaster 
1)1) "name" 
2) "192.29.0.203:6379" 
3) "ip" 
4) "192.29.0.203" 
5) "port" 
6) "6379" 
7) "runid" 
8) "c86027e7bdd217cb584b1bd7a6fea4ba79cf6364" 
9) "flags" 
10) "slave" 
...... 
2)1)"name" 
1)"192.29.0.147:6379" 
2)"ip" 
3)"192.29.0.147" 
4)"port" 
5)"6379" 
6)"runid" 
7)"" 
8)"flags" 
9)"s_down,slave,disconnected" #该节点为从,并且状态为s_down,断开的状态 
......

哨兵模式总结

Sentinel的作用:

Master 状态监测
如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave;
Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

Sentinel的工作方式:

  • 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
  • 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
  • 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
  • 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
  • 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
  • 当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
  • 若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
  • 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

Redis主从模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风间琉璃zero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值