什么是哨兵

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




springboot 连接哨兵redis spring redis 哨兵_Redis


注:当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