Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中是Redis官方推荐的高可用性(HA)解决方案。
- 作用:
1). Master状态检测
2). 如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3). Master-Slave切换后,sentinel.conf的监控目标会随之调换- 工作模式:
1). 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2). 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3). 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4). 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线 。- 主观下线和客观下线
1). 主观下线:Subjectively Down,简称 SDOWN,指的是当前 一个Sentinel 实例对某个redis服务器做出的下线判断。
2). 客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover
配置哨兵模式
redis-master 192.168.19.129
redis-slave-1 192.168.19.130
redis-slave-2 192.168.19.131
关闭防火墙和SELinux
全部配置好redis
#全部 vim redis.conf
bind 0.0.0.0
#全部 vim sentinel.conf
sentinel monitor mymaster 192.168.19.129 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000 #单位毫秒
sentinel failover-timeout mymaster 10000 #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no #关闭加密模式--新添加到sentinel配置文件中
#全部启动redis
[root@redis-master redis]# src/redis-server ./redis.conf &
#全部启动sentinel服务
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf &

image.png
测试
[root@redis-master redis]# src/redis-cli #确认为主节点
127.0.0.1:6379> info replication
# Replication
role:master #为主节点
connected_slaves:2
slave0:ip=192.168.19.130,port=6379,state=online,offset=45733,lag=1
slave1:ip=192.168.19.131,port=6379,state=online,offset=45733,lag=1
master_replid:4871e86197595dfb4613470881539176a5bbc3ee
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:46019
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:46019
[root@redis-master redis]# ps -ef|grep redis
root 14255 1 0 17:39 ? 00:00:02 src/redis-server 0.0.0.0:6379
root 14364 1253 0 18:08 pts/0 00:00:01 ./src/redis-sentinel *:26379 [sentinel]
root 14376 1253 0 18:16 pts/0 00:00:00 grep --color=auto redis
[root@redis-master redis]# kill -9 14255

image.png
192.168.19.129关闭后192.168.19.131切换为master(没有优先级,为随机切换)
#查看192.168.19.131
[root@redis-slave-2 redis]# src/redis-cli
127.0.0.1:6379> INFO replication
# Replication
role:master #为master
connected_slaves:1 #杀掉的redis没有启动所以仅有一个slave
slave0:ip=192.168.19.130,port=6379,state=online,offset=126811,lag=1
master_replid:2faf486cf6366c1545a4cc1e273ac76122b4fd02
master_replid2:4871e86197595dfb4613470881539176a5bbc3ee
master_repl_offset:126811
second_repl_offset:58259
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:155
repl_backlog_histlen:126657
#启动192.168.19.129的redis
[root@redis-master redis]# src/redis-server ./redis.conf &
[root@redis-master redis]# src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave #角色变为slave
master_host:192.168.19.131
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:184555
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2faf486cf6366c1545a4cc1e273ac76122b4fd02
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:184555
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:162800
repl_backlog_histlen:21756