什么是哨兵
Sentinel(哨兵)是用于监控Redis集群中Master状态工具,可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个服务升级为master来替代已宕机的master继续工作,是Redis高可用解决方案。
部署建议
哨兵节点要有至少3个或者奇数个节点(哨兵在做故障转移时,少数服从多数,选举leader)
哨兵分布式部署最好是在不同的计算机节点(如果部署在同一计算机节点,容灾性及性能相对比较弱)
一组哨兵建议只监听一组主从(有利于提高性能)
配置Sentinel(dev201 dev202 dev203)
[root@dev201 redis]# vim /usr/local/redis/sentinel.conf
#不限制ip访问
protected-mode no
port 26379
#后台运行
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
#日志
logfile "/usr/local/redis/sentinel/redis-sentinel.log"
#工作目录
dir /usr/local/redis/sentinel/
#监听配置 及 哨兵数量
#sentinel monitor <master-group-name master> <ip> <port> <quorum>
#<master-group-name master> master名称 <quorum> 哨兵数量
sentinel monitor andrick-master 192.168.1.201 6379 2
#配置哨兵连接master密码
sentinel auth-pass andrick-master 123456
#哨兵认为master dwon机的间隔时间
sentinel down-after-milliseconds andrick-master 10000
#master并行同步的数量,剩余的slaves重新和新的master做同步的并行数
sentinel parallel-syncs andrick-master 1
#故障转移,哨兵执行超时时间(主备切换的超时时间),超过这个时间后,会由其它哨兵来处理
sentinel failover-timeout andrick-master 180000
#增加 dev201 down 机后,连接master的密码
[root@dev201 redis]# vim redis.conf (主从是可以不用修改masterauth,这里要补上)
masterauth 123456
#配置完dev201 分别把配置文件复制到其它两台服务器的sentinel
[root@dev201 redis]# scp ./sentinel.conf root@dev202:/usr/local/redis/
sentinel.conf 100% 9826 9.6KB/s 00:00
[root@dev201 redis]# scp ./sentinel.conf root@dev203:/usr/local/redis/ sentinel.conf
#启动sentinel [root@dev201 redis]# redis-sentinel sentinel.conf
注:当master down掉后,slave 会选举一个作为master;而master up 后,会变为slave。
一般 naster数据无法同步给 slave的方案检查为如下:
1.网络通信问题,要保证互相ping通,内网互通。
2.关闭防火墙,对应的端口开发(虚拟机中建永久关闭防火墙,云服务器的话需要保证内网互通)。
3.统一所有的密码,不要漏了某个节点没有设置。
哨兵信息查询
[root@dev201 redis]# redis-cli -p 26379
查看andrick-master下的主节点信息
127.0.0.1:26379> sentinel master andrick-master
1) "name"
2) "andrick-master"
3) "ip"
4) "192.168.1.203"
5) "port"
6) "6379"
7) "runid"
8) "3429a849f17c51e11e892c7df1adeaab65eded44"
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) "805"
19) "last-ping-reply"
20) "805"
21) "down-after-milliseconds"
22) "10000"
23) "info-refresh"
24) "6547"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "3390366"
29) "config-epoch"
30) "1"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
查看andrick-master下从节点信息
127.0.0.1:26379> sentinel slaves andrick-master
1) 1) "name"
2) "192.168.1.202:6379"
3) "ip"
4) "192.168.1.202"
5) "port"
6) "6379"
7) "runid"
8) "c9c1e659e488eff9593d40cd6c2957f3c8925d42"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "479"
19) "last-ping-reply"
20) "479"
21) "down-after-milliseconds"
22) "10000"
23) "info-refresh"
24) "5869"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "3530137"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.1.203"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "864069"
2) 1) "name"
2) "192.168.1.201:6379"
3) "ip"
4) "192.168.1.201"
5) "port"
6) "6379"
7) "runid"
8) "6d172b61e7ec702e88f611107206394b61e5c009"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "543"
19) "last-ping-reply"
20) "543"
21) "down-after-milliseconds"
22) "10000"
23) "info-refresh"
24) "8179"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "3530137"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "192.168.1.203"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "863467"
127.0.0.1:26379>
查看andrick-master下的哨兵节点信息
由于上面配置了2个哨兵所以:
127.0.0.1:26379> sentinel sentinels andrick-master
1) 1) "name"
2) "1053fd8f25198b1c6654f9b1815bf43b873f808a"
3) "ip"
4) "192.168.1.203"
5) "port"
6) "26379"
7) "runid"
8) "1053fd8f25198b1c6654f9b1815bf43b873f808a"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "523"
19) "last-ping-reply"
20) "523"
21) "down-after-milliseconds"
22) "10000"
23) "last-hello-message"
24) "455"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
2) 1) "name"
2) "fce2017d4f744d218b2d6c6a0dfbebabf12e2f4c"
3) "ip"
4) "192.168.1.202"
5) "port"
6) "26379"
7) "runid"
8) "fce2017d4f744d218b2d6c6a0dfbebabf12e2f4c"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "285"
19) "last-ping-reply"
20) "285"
21) "down-after-milliseconds"
22) "10000"
23) "last-hello-message"
24) "793"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
Spring Redis哨兵配置
哨兵(主从复制)配置:
redis:
database: 1
password: 123456
sentinel:
master: andrick-master
nodes: dev201:26379,dev202:26379,dev203:26379
单机版本如下:
redis:
database: 0
host: 192.168.1.200
lettuce:
pool:
max-active: 50
max-idle: 20
max-wait: 10000
min-idle: 5
password:
port: 6379
ssl: false
timeout: 2000