redis-哨兵模式(sentinel)

1、基础

1.1、什么是哨兵模式(sentinel)

能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

 1.2、流程图

2、环境准备

2.1、调整为一主二仆模式,6379带着63806381

redis-server /usr/local/redis-6.2.5/etc/6379.conf
redis-server /usr/local/redis-6.2.5/etc/6380.conf
redis-server /usr/local/redis-6.2.5/etc/6381.conf

# 从节点
redis-cli -p 6381 slaveof 192.168.10.19 6379
redis-cli -p 6380 slaveof 192.168.10.19 6379

2.2、复制三个哨兵的配置文件

cp sentinel.conf sentinel_26379.conf 
cp sentinel.conf sentinel_26380.conf 
cp sentinel.conf sentinel_26381.conf 

3、哨兵模式(sentinel)配置

3.1、sentinel的配置

3.1.1、sentinel_26379.conf

]# cat sentinel_26379.conf | egrep -v '^$|^#'
bind 192.168.10.19
port 26379
daemonize yes
pidfile /var/run/redis-sentinel_26379.pid
logfile "/usr/local/redis-6.2.5/log/sentinel_26379.log"
dir /tmp
sentinel monitor mymaster 192.168.10.19 6379 2
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no

3.1.2、sentinel_26380.conf

]# cat sentinel_26380.conf | egrep -v '^$|^#'
bind 192.168.10.19
port 26380
daemonize yes
pidfile /var/run/redis-sentinel_26380.pid
logfile "/usr/local/redis-6.2.5/log/sentinel_26380.log"
dir /tmp
sentinel monitor mymaster 192.168.10.19 6379 2
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no

3.1.3、sentinel_26381.conf

]# cat sentinel_26381.conf | egrep -v '^$|^#'
bind 192.168.10.19
port 26381
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "/usr/local/redis-6.2.5/log/sentinel_26381.log"
dir /tmp
sentinel monitor mymaster 192.168.10.19 6379 2
sentinel down-after-milliseconds mymaster 30000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no

3.2、启动哨兵并且检查状态

3.2.1、启动哨兵

redis-sentinel /usr/local/redis-6.2.5/etc/sentinel_26379.conf 
redis-sentinel /usr/local/redis-6.2.5/etc/sentinel_26380.conf 
redis-sentinel /usr/local/redis-6.2.5/etc/sentinel_26381.conf 

3.2.2、查询端口是否开启


]# netstat -tunlp | grep sen
tcp        0      0 192.168.10.19:26379     0.0.0.0:*               LISTEN      29170/redis-sentine 
tcp        0      0 192.168.10.19:26380     0.0.0.0:*               LISTEN      29177/redis-sentine 
tcp        0      0 192.168.10.19:26381     0.0.0.0:*               LISTEN      29183/redis-sentine

3.3、查询启动日志

3.3.1、sentinel_26379.log

]# cat sentinel_26379.log 
29170:X 16 May 2023 18:09:13.559 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
29170:X 16 May 2023 18:09:13.559 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=29170, just started
29170:X 16 May 2023 18:09:13.559 # Configuration loaded
29170:X 16 May 2023 18:09:13.577 * monotonic clock: POSIX clock_gettime
29170:X 16 May 2023 18:09:13.577 * Running mode=sentinel, port=26379.
29170:X 16 May 2023 18:09:13.578 # Sentinel ID is 4454006c07746963438acf4bb2a6bc45abed9332
29170:X 16 May 2023 18:09:13.578 # +monitor master mymaster 192.168.10.19 6379 quorum 2
29170:X 16 May 2023 18:09:13.579 * +slave slave 192.168.10.19:6380 192.168.10.19 6380 @ mymaster 192.168.10.19 6379
29170:X 16 May 2023 18:09:13.580 * +slave slave 192.168.10.19:6381 192.168.10.19 6381 @ mymaster 192.168.10.19 6379
29170:X 16 May 2023 18:09:24.626 * +sentinel sentinel aefeef40e1435d815ade585d958159e44ebb6152 192.168.10.19 26380 @ mymaster 192.168.10.19 6379
29170:X 16 May 2023 18:09:27.387 * +sentinel sentinel b2cd40043a818171575865fed4c31195af78f5d7 192.168.10.19 26381 @ mymaster 192.168.10.19 6379

3.3.2、sentinel_26380.log

]# cat sentinel_26380.log 
29177:X 16 May 2023 18:09:22.598 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
29177:X 16 May 2023 18:09:22.598 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=29177, just started
29177:X 16 May 2023 18:09:22.598 # Configuration loaded
29177:X 16 May 2023 18:09:22.598 * monotonic clock: POSIX clock_gettime
29177:X 16 May 2023 18:09:22.599 * Running mode=sentinel, port=26380.
29177:X 16 May 2023 18:09:22.600 # Sentinel ID is aefeef40e1435d815ade585d958159e44ebb6152
29177:X 16 May 2023 18:09:22.600 # +monitor master mymaster 192.168.10.19 6379 quorum 2
29177:X 16 May 2023 18:09:22.600 * +slave slave 192.168.10.19:6380 192.168.10.19 6380 @ mymaster 192.168.10.19 6379
29177:X 16 May 2023 18:09:22.601 * +slave slave 192.168.10.19:6381 192.168.10.19 6381 @ mymaster 192.168.10.19 6379
29177:X 16 May 2023 18:09:23.672 * +sentinel sentinel 4454006c07746963438acf4bb2a6bc45abed9332 192.168.10.19 26379 @ mymaster 192.168.10.19 6379
29177:X 16 May 2023 18:09:27.386 * +sentinel sentinel b2cd40043a818171575865fed4c31195af78f5d7 192.168.10.19 26381 @ mymaster 192.168.10.19 6379

3.3.3、sentinel_26381.log

]# cat sentinel_26381.log 
29183:X 16 May 2023 18:09:25.383 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
29183:X 16 May 2023 18:09:25.384 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=29183, just started
29183:X 16 May 2023 18:09:25.384 # Configuration loaded
29183:X 16 May 2023 18:09:25.384 * monotonic clock: POSIX clock_gettime
29183:X 16 May 2023 18:09:25.384 * Running mode=sentinel, port=26381.
29183:X 16 May 2023 18:09:25.386 # Sentinel ID is b2cd40043a818171575865fed4c31195af78f5d7
29183:X 16 May 2023 18:09:25.386 # +monitor master mymaster 192.168.10.19 6379 quorum 2
29183:X 16 May 2023 18:09:25.386 * +slave slave 192.168.10.19:6380 192.168.10.19 6380 @ mymaster 192.168.10.19 6379
29183:X 16 May 2023 18:09:25.387 * +slave slave 192.168.10.19:6381 192.168.10.19 6381 @ mymaster 192.168.10.19 6379
29183:X 16 May 2023 18:09:25.695 * +sentinel sentinel 4454006c07746963438acf4bb2a6bc45abed9332 192.168.10.19 26379 @ mymaster 192.168.10.19 6379
29183:X 16 May 2023 18:09:26.728 * +sentinel sentinel aefeef40e1435d815ade585d958159e44ebb6152 192.168.10.19 26380 @ mymaster 192.168.10.19 6379

3.4、查询sentinel状态

]# redis-cli -h 192.168.10.19 -p 26379
192.168.10.19:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.10.19:6379,slaves=2,sentinels=3

4、模拟故障

4.1、将6379下掉

redis-cli -p 6379 shutdown

4.2、查看哨兵状态是否切换新的master

]# redis-cli -h 192.168.10.19 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.10.19:6381,slaves=2,sentinels=3 # 已切换新节点

4.3、查询角色

]# redis-cli -p 6380 info replication | grep role
role:slave


]# redis-cli -p 6381 info replication | grep role role:master

4.4、恢复原来的节点

4.4.1、恢复6379节点

redis-server /usr/local/redis-6.2.5/etc/6379.conf

4.4.2、发现原来的节点,已经变为从节点

]# redis-cli -p 6379 info replication | grep role
role:slave

5、故障恢复

优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid

 

posted @ 2023-05-16 19:10  小粉优化大师  阅读(273)  评论(0编辑  收藏  举报