#yyds干货盘点#--快速上手redis-sentinel(哨兵)

【#yyds干货盘点#--快速上手redis-sentinel(哨兵)】听闻少年二字,当与平庸相斥。这篇文章主要讲述#yyds干货盘点#--快速上手redis-sentinel(哨兵)相关的知识,希望能为你提供帮助。
一、redis-sentinel介绍

  • Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。
Sentinel 是一个监视器,它可以根据被监视实例的身份和状态来判断应该执行何种动作。
#yyds干货盘点#--快速上手redis-sentinel(哨兵)

文章图片

主要功能1、 监控(Monitoring):
Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
2、 提醒(Notification):
当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
3、 自动故障迁移(Automatic failover):
当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
二、工作原理Sentinel 通过用户给定的配置文件来发现主服务器
  • Sentinel 会与被监视的主服务器创建两个网络连接:
    • 命令连接用于向主服务器发送命令。
    • 订阅连接用于订阅指定的频道,从而发现监视同一主服务器的其他 Sentinel 。
2.1 发现并连接从服务器
  • Sentinel 通过向主服务器发送 INFO 命令来自动获得所有从服务器的地址。
  • 跟主服务器一样,Sentinel 会与每个被发现的从服务器创建命令连接和订阅连接。
2.2 发现其他 Sentinel
Sentinel 会通过命令连接向被监视的主从服务器发送 “HELLO” 信息,该消息包含 Sentinel 的 IP、端口号、ID 等内容,以此来向其他 Sentinel 宣告自己的存在。与此同时Sentinel 会通过订阅连接接收其他 Sentinel 的“HELLO” 信息,以此来发现监视同一个主服务器的其他 Sentinel 。
#yyds干货盘点#--快速上手redis-sentinel(哨兵)

文章图片

sentinel1 通过发送HELLO 信息来让sentinel2 和 sentinel3发现自己,其他两个sentinel 也会进行类似的操作。
2.3 多个Sentienl之间的链接
Sentinel 之间只会互相创建命令连接,用于进行通信。因为已经有主从服务器作为发送和接收 HELLO 信息的中介,所以 Sentinel之间不会创建订阅连接。
#yyds干货盘点#--快速上手redis-sentinel(哨兵)

文章图片

2.4 检测实例的存在
Sentinel 使用 PING 命令来检测实例的状态:如果实例在指定的时间内没有返回回复,或者返回错误的回复,那么该实例会被 Sentinel 判断为下线。
#yyds干货盘点#--快速上手redis-sentinel(哨兵)

文章图片

Redis 的 Sentinel 中关于下线(down)有两个不同的概念:
  • 主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
  • 客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。 (一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
    如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内, 对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply), 那么 Sentinel 就会将这个服务器标记为主观下线。
2.5 故障转移FAILOVER
一次故障转移操作由以下步骤组成:
  • 发现主服务器已经进入客观下线状态。
  • 基于Raft leader election协议 , 进行投票选举
  • 如果当选失败,那么在设定的故障迁移超时时间的两倍之后,重新尝试当选。 如果当选成功, 那么执行以下步骤。
  • 选出一个从服务器,并将它升级为主服务器。
  • 向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。
  • 通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel ,其他 Sentinel 对它们自己的配置进行更新。
  • 向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。
  • 当所有从服务器都已经开始复制新的主服务器时, leader Sentinel 终止这次故障迁移操作。
三、sentinel配置过程前提:搭建好好redis主从复制关系
3.1 添加sentinel配置
mkdir /data/26380 cd /data/26380vim sentinel.conf port 26380 dir "/data/26380" sentinel monitor mymaster 127.0.0.1 6381 1 sentinel down-after-milliseconds mymaster 5000

配置案例二
bind 0.0.0.0 port 26379 dir /tmp sentinel monitor mymaster 172.34.30.113 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000

3.2常用配置说明
sentinel auth-pass mymaster root //安全信息//这两个配置后面的数量主从机需要一样,epoch为master的版本 sentinel leader-epoch mymaster 1 sentinel config-epoch mymaster 1daemonize yes //开启后台守护进程 port 6800 //端口 bind 0.0.0.0 //绑定所有地址 logfile /var/log/redis/sentinel.log pidfile /var/run/sentinel.pid sentinel monitor master8000 10.10.10.63 8000 2 //master8000为实例名称,监听主服务器(10.10.10.63)8000端口,这里的2表示,如果2台sentinel认为主redis挂了,才算挂sentinel down-after-milliseconds master8000 5000 //如果5秒内master8000没有响应,就认为SDOWNsentinel failover-timeout master8000 15000//当主从切换多久后认为主从切换失败sentinel client-reconfig-script master8000 /opt/notify_master6800.sh //自动切换后,执行脚本,可以执行vip自动漂移脚本实现vip自动漂移

3.3 扩展如果需要配置vip地址那么需要添加一下脚本
[root@wyq63 ~]# cat /opt/notify_master6800.sh #!/bin/bashMASTER_IP=$6#第六个参数是新主redis的ip地址LOCAL_IP=10.10.10.63#这里记得要改,每台服务器写自己的本地ip即可VIP=10.10.10.100NETMASK=24INTERFACE=ens32#网卡接口设备名称if [ ${MASTER_IP} = ${LOCAL_IP} ]; then /usr/sbin/ipaddradd ${VIP}/${NETMASK}dev ${INTERFACE}#将VIP绑定到该服务器上/usr/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}exit 0else/usr/sbin/ipaddr del${VIP}/${NETMASK}dev ${INTERFACE}#将VIP从该服务器上删除exit 0fiexit 1

3.2启动sentinel集群
redis-sentinel /data/26380/sentinel.conf &

3.3 停主库测试:
[root@db01 ~]# redis-cli -p 6380 shutdown[root@db01 ~]# redis-cli -p 6381 info replication启动源主库(6380),看状态。

3.4 sentinel其他命令操作
PING :返回 PONG 。 SENTINEL masters :列出所有被监视的主服务器 SENTINEL slaves < master name> SENTINEL get-master-addr-by-name < master name> : 返回给定名字的主服务器的 IP 地址和端口号。 SENTINEL reset < pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 SENTINEL failover < master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。


    推荐阅读