redis哨兵模式是基于主从模式的,通过哨兵可以自动切换master服务器是谁,而原有模式下master一旦宕机,整个redis将不可用,在此处的话redis宕机,哨兵会将slave提升为master

进入sentinel配置文件

  1. vim /opt/redis-6.2.1/sentinel.conf

修改配置

pidfile /var/run/redis-sentinel.pid             #运行时PID文件
protected-mode no                               # 关闭保护模式
port 26379                                      # Redis哨兵默认的监听端口
daemonize yes                                   # 指定sentinel为后台启动
logfile "/var/log/sentinel.log"                 # 指定日志存放路径
dir "/var/lib/redis/6379"                       # 指定数据库存放路径

#监控的节点名字可以自定义,后边的2代表的:如果有俩个哨兵判断这个主节点挂了那这个主节点就挂了,通常设置为哨兵个数一半加一
# 指定该哨兵节点监控10.0.0.11:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 192.168.211.140 6379 2      

# 当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster redis6379


#哨兵连接主节点多长时间没有响应就代表主节点挂了,单位毫秒。默认30000毫秒,30秒。
sentinel down-after-milliseconds mymaster 30000 

#在故障转移时,最多有多少从节点对新的主节点进行同步。这个值越小完成故障转移的时间就越长,这个值越大就意味着越多的从节点因为同步数据而暂时阻塞不可用
# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
sentinel parallel-syncs mymaster 1

# 故障转移的超时时间,这里设置为三分钟180000(180秒)
sentinel failover-timeout mymaster 180000   

#禁止使用SENTINEL SET设置notification-script和client-reconfig-script
sentinel deny-scripts-reconfig yes

复制一份到redis配置文件位置,方便管理

cp /opt/redis-6.2.1/sentinel.conf /etc/redis/

启动哨兵,先启动master,在启动slave

redis-sentinel /etc/redis/sentinel.conf &

查看哨兵日志

tail -f /var/log/sentinel.log

image.png

查看主服务器哨兵状态

 redis-cli -p 26379   info sentinel

 #最后一行可以看到哨兵以监听到master状态,并有两个从机,三个哨兵

image.png

模拟故障

命令执行一个非法内存访问从而让redis崩溃,仅在开发时用户bug调试,后续需要重启服务。

#登录redis
[root@redis-master redis]# redis-cli -h 192.168.211.140 -p 6379 -a redis6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.211.140:6379> debug segfault
Could not connect to Redis at 192.168.211.140:6379: Connection refused
(0.63s)
not connected> 
not connected> exit
[root@redis-master redis]# ps aux | grep redis
root       2273  0.3  0.5 162496  9972 ?        Ssl  13:20   0:03 redis-sentinel *:26379 [sentinel]
root       2312  0.0  0.0 112812   976 pts/1    S+   13:34   0:00 grep --color=auto redis
#可以看到已经没有rendis的进程了

image.png

查看哨兵信息

redis-cli -p 26379 INFO Sentinel

image.png
可以看到master已切换到142

重启redis

/etc/init.d/redis_6379   start

查看服务信息

redis-cli -p  6379  -a redis6379 INFO Replication

image.png
可以看到140已变为salve,