简介
Redis Sentinel为Redis提供高可用性。主要有以下功能
- 监控,Sentinel会不断检查主节点和从节点是否按预期工作。
- 通知。Sentinel可以通过API通知系统管理员,一个受监控的Redis实例出现问题。
- 自动故障转移。如果主服务器未按预期工作,Sentinel可以启动故障转移过程,其中从节点升级为主节点,其他服务器重新配置向新主同步数据
Sentinel本身设计为在多个Sentinel进程协同工作的配置中运行。让多个Sentinel进程协作的优势如下:
- 当多个Sentinels同意给定主设备不再可用时,将执行故障检测。这降低了误报的可能性。
- 即使并非所有Sentinel进程都正常工作,哨兵也能正常工作,从而使系统能够抵御故障。毕竟,拥有故障转移系统并不是一件好事,而故障转移系统本身就是一个单一的故障点。
配置前的几个说明
- Sentinel会自动发现从节点,也就是我们只需要配置好监控的主节点,Sentinel会自己找到主节点的从节点,已经同样在监控主节点的其他Sentinel
- 配置Sentinel节点个数一般大于3 且是奇数,如果只有2个,那么发生网络分区的时候只需要1票就可以认为节点down了,这个就很不合理了。
配置
第一步:配置主从
在所有从节点的客户端命令行中执行下面命令设置主节点位置
192.168.253.168:26379>slaveof 192.168.253.128 6379
第二步:主节点查看复制相关信息
这里可以看到主从复制完成了
第三步:配置哨兵
在所有节点修改配置文件
logfile "/var/log/sentinel.log" #日志文件
bind 192.168.253.128 #监听的ip地址,根据节点不同进行调整
sentinel monitor mymaster 192.168.253.128 6379 2
#配置监控的主节点
#这个配置项格式为sentinel monitor <master-group-name> <ip> <port> <quorum>
#意义为监视一个名为mymaster的主节点(这里的mymaster可以自定义,主要是为了标识这个集群)
#主节点ip地址是192.168.253.128,端口为6379
#法定票数为2票。表示至少需要2个哨兵认为节点down了,才算down了。
启动sentinel
redis-sentinel /etc/sentinel.conf
第四步:测试
查看主节点信息
[root@localhost ~]# redis-cli -h 192.168.253.128 -p 26379
192.168.253.128:26379> sentinel master mymaster
1) "name" #标识名
2) "mymaster"
3) "ip" #主节点ip
4) "192.168.253.128"
5) "port" #端口
6) "6379"
7) "runid" #运行id
8) "c634d35abc11f54fc7df2c19b4739803a0461698"
9) "flags" #标识,这里表示是一个主节点
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "1006"
19) "last-ping-reply"
20) "1006"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2513"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "122978"
29) "config-epoch" #配置文件版本号,发生故障转移这个值会变化
30) "0"
31) "num-slaves" #从节点数量
32) "2"
33) "num-other-sentinels" #哨兵数量
34) "2"
35) "quorum" ##法定票数
36) "2"
37) "failover-timeout" #故障转移的超时时间
38) "180000"
39) "parallel-syncs" #支持多少个slave同时同步数据,值太大对主库有压力。太小的话整个集群同步时间慢
40) "1"
查看从节点信息
192.168.253.128:26379> sentinel slaves mymaster
查看其他sentinel信息
192.168.253.128:26379> sentinel sentinels mymaster
测试故障转移
在主节点输入命令
redis-cli -h 192.168.253.128 -p 6379 DEBUG sleep 100
然后查看日志文件信息,复制下来分析一下
192.168.253.168节点的sentinel日志信息 (有删减)
#+sdown (subject down)表示192.168.253.168这个哨兵主观上认为192.168.253.128这个主节点down了
6031:X 08 Nov 2018 11:00:18.373 # +sdown master mymaster 192.168.253.128 6379
#+odown (object down)表示192.168.253.128这个主节点已经至少有2个哨兵认为它down了
#(达到了法定票数2)从而进入了客观down状态
6031:X 08 Nov 2018 11:00:18.444 # +odown master mymaster 192.168.253.128 6379 #quorum 2/2
#表示配置文件的版本(因为每次故障转移,需要设置新主,其他从节点要跟新主同步数据,避免混乱,所以设置了配置的版本)
6031:X 08 Nov 2018 11:00:18.445 # +new-epoch 1
#正在进行新的故障转移,等待由多数人选举
6031:X 08 Nov 2018 11:00:18.445 # +try-failover master mymaster 192.168.253.128 6379
#投票选一个领头的哨兵进行故障转移,那些一长串字符是哨兵的runid,标识哨兵
6031:X 08 Nov 2018 11:00:18.446 # +vote-for-leader dbf42eceb20259b692a6b1cf15afb893b575a325 1
6031:X 08 Nov 2018 11:00:18.451 # c131e1a763049d61569652bf3a99fbc0c8c1c998 voted for dbf42eceb20259b692a6b1cf15afb893b575a325 1
6031:X 08 Nov 2018 11:00:18.451 # 8139bbdd2654b1d4a527959f24cb649d0221782a voted for dbf42eceb20259b692a6b1cf15afb893b575a325 1
#192.168.253.128 这个哨兵赢得选举,可以做故障转移
6031:X 08 Nov 2018 11:00:18.500 # +elected-leader master mymaster 192.168.253.128 6379
#选择新的主节点
6031:X 08 Nov 2018 11:00:18.500 # +failover-state-select-slave master mymaster 192.168.253.128 6379
#选择了192.168.253.168作为新主
6031:X 08 Nov 2018 11:00:18.553 # +selected-slave slave 192.168.253.168:6379 192.168.253.168 6379 @ mymaster 192.168.253.128 6379
#正在尝试将提升的slave为新master,等待它切换。
6031:X 08 Nov 2018 11:00:18.553 * +failover-state-send-slaveof-noone slave 192.168.253.168:6379 192.168.253.168 6379 @ mymaster 192.168.253.128 6379
6031:X 08 Nov 2018 11:00:18.654 * +failover-state-wait-promotion slave 192.168.253.168:6379 192.168.253.168 6379 @ mymaster 192.168.253.128 6379
#提升192.168.253.168为新主
6031:X 08 Nov 2018 11:00:19.494 # +promoted-slave slave 192.168.253.168:6379 192.168.253.168 6379 @ mymaster 192.168.253.128 6379
#故障转移状态已更改为reconf-slave 修改从节点配置
6031:X 08 Nov 2018 11:00:19.494 # +failover-state-reconf-slaves master mymaster 192.168.253.128 6379
#赢得选举的哨兵将SLAVEOF命令发送到此实例,以便从节点重新配置主节点
6031:X 08 Nov 2018 11:00:19.557 * +slave-reconf-sent slave 192.168.253.158:6379 192.168.253.158 6379 @ mymaster 192.168.253.128 6379
#从节点配置新主完成,但同步过程尚未完成
6031:X 08 Nov 2018 11:00:20.536 * +slave-reconf-inprog slave 192.168.253.158:6379 192.168.253.158 6379 @ mymaster 192.168.253.128 6379
#从节点与新主同步完成
6031:X 08 Nov 2018 11:00:20.536 * +slave-reconf-done slave 192.168.253.158:6379 192.168.253.158 6379 @ mymaster 192.168.253.128 6379
#故障转移成功。所有从节点配置完成
6031:X 08 Nov 2018 11:00:20.598 # +failover-end master mymaster 192.168.253.128 6379
#主配置新IP和地址是配置更改后指定的IP地址
6031:X 08 Nov 2018 11:00:20.598 # +switch-master mymaster 192.168.253.128 6379 192.168.253.168 6379
然后我们可以看一下新的主节点是不是192.168.253.168
192.168.253.168:26379> SENTINEL get-master-addr-by-name mymaster
相关的配置项
-
port 26379
监听的端口 -
sentinel monitor <master-name> <ip> <port> <quorum>
- <master-name> 标识集群,这个可以自定义名称
- <ip>主节点ip
- <port>主节点的端口
- <quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障;如果没有达到这个法定票数则是s_down: subjectively down (主观down),达到票数之后就是o_down: objectively down (客观down)
-
sentinel auth-pass <master-name> <password>
认证的口令 -
sentinel down-after-milliseconds
监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”; -
sentinel parallel-syncs
指在failover过程中,能够被sentinel并行配置的从节点的数量; -
sentinel failover-timeout
sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败; -
sentinel notification-script
通知脚本,此脚本被自动传递多个参数;
sentinel常用的几个命令
SENTINEL masters #查看主节点信息
SENTINEL slaves <MASTER_NAME> #查看对应集群的从节点信息
SENTINEL failover <MASTER_NAME> #进行故障转移
SENTINEL get-master-addr-by-name <MASTER_NAME> #查看当前的主节点地址