Redis(5):哨兵模式解释和Java实例

一、哨兵模式作用

1.主从状态检测 
2.如果 Master 异常,则会进行 Master-Slave 切换,将其中一个 Slave 作为 Master,将之前的 Master 作为 Slave。

二、工作原理

1.每个 Sentinel 以每秒钟一次的频率向它所知的 Master,Slave 以及其他 Sentinel 实例发送一个 PING 命令; 
2.如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被Sentinel标记为主观下线; 
3.如果一个 Master 被标记为主观下线,则正在监视这个 Master 的所有 Sentinel 要以每秒一次的频率确认Master 的确进入了主观下线状态; 
4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 Master 的确进入了主观下线状态,则 Master 会被标记为客观下线 ; 
5.在一般情况下,每个 Sentinel 会以每 10 秒一次的频率向它已知的所有 Master,Slave 发送 INFO 命令
6.当 Master 被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 ; 
7.若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的主观下线状态就会被移除;若Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的客观下线状态就会被移除;

三、配置和检验

1.环境3master和3slave

192.168.0.9:6382> cluster nodes
dbc30ef2574f11b8c7ffe9fad9de39fefbc62659 192.168.0.9:6381 master - 0 1583327351101 2 connected 5461-10922
efe2c2c197eceec0864c3d09e4878c9d2264b990 192.168.0.9:6382 myself,master - 0 0 3 connected 10923-16383
40bada33e11e058ade5b7523315aee866acd21dd 192.168.0.9:6385 slave efe2c2c197eceec0864c3d09e4878c9d2264b990 0 1583327350082 6 connected
c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 192.168.0.9:6380 master - 0 1583327352113 1 connected 0-5460
586c9d258380b71d5ec8a7301ba3c79cd27d143b 192.168.0.9:6383 slave c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 0 1583327349058 4 connected
ea9b8edb48b9f657380f785d91f5eca66335953b 192.168.0.9:6384 slave dbc30ef2574f11b8c7ffe9fad9de39fefbc62659 0 1583327345998 5 connected

关系示意图

2.修改哨兵的配置文件,配置三个哨兵监听master :192.168.0.9:6381 

sentinel_26379.conf,sentinel_26380.conf和sentinel_26381.conf

// Sentinel节点的端口,三个哨兵分别为26379,26380,26381
port 26379  


// 当前Sentinel节点监控 192.168.0.9:6381 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor mymaster 192.168.0.9 6381 2

//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000

//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1

//故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000

监控关系示意图

3.启动

因为不是后台启动,所以需要三个客户端
客户端1
redis-sentinel /opt/modules/redis-3.2.0/mycluster/sentinel_26379.conf
客户端2
redis-sentinel /opt/modules/redis-3.2.0/mycluster/sentinel_26380.conf
客户端3
redis-sentinel /opt/modules/redis-3.2.0/mycluster/sentinel_26381.conf

查看哨兵进程

[root@bigdata ~]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      33891  0.0  0.3 137656  9804 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6380 [cluster]
root      33895  0.0  0.3 137656  9784 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6381 [cluster]
root      33899  0.0  0.3 137656  9796 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6382 [cluster]
root      33904  0.0  0.2 137656  7760 ?        Ssl  12:31   0:25 redis-server 192.168.0.9:6383 [cluster]
root      33909  0.0  0.2 137656  7740 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6384 [cluster]
root      33913  0.0  0.2 137656  7760 ?        Ssl  12:31   0:25 redis-server 192.168.0.9:6385 [cluster]
root      33955  0.0  0.1  13340  3084 pts/1    S+   12:35   0:00 redis-cli -h 192.168.0.9 -c -p 6385
root      34869  0.1  0.2 133560  7964 pts/7    Sl+  21:23   0:02 redis-sentinel *:26379 [sentinel] 
root      34958  0.1  0.2 133560  7968 pts/2    Sl+  22:00   0:00 redis-sentinel *:26380 [sentinel] 
root      34987  0.2  0.2 133560  7964 pts/4    Sl+  22:00   0:00 redis-sentinel *:26381 [sentinel] 

root      35014  0.0  0.0 103268   892 pts/5    S+   22:00   0:00 grep redis

4. 重新查看哨兵配置文件sentinel_26379.conf,发现多了1个slave从节点,和2个sentinel节点

[root@bigdata mycluster]# vi sentinel_26379.conf

# Generated by CONFIG REWRITE
sentinel known-slave mymaster 192.168.0.9 6384 //从节点
sentinel known-sentinel mymaster 192.168.0.9 26381 0505ef5fef583c9bcdbf3e29fba88e0bf40a901c //其他两个哨兵之一
sentinel known-sentinel mymaster 192.168.0.9 26380 b373a6e1c45296cfe25f9608188f291cfb38207e //其他两个哨兵之一

sentinel current-epoch 0

5.测试故障转移

(1)关闭监听的6381端口的redis主节点(master)

[root@bigdata mycluster]# ps -aux | grep redis                  
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      33891  0.0  0.3 137656  9804 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6380 [cluster]
root      33895  0.0  0.3 137656  9784 ?        Rsl  12:31   0:28 redis-server 192.168.0.9:6381 [cluster]
root      33899  0.0  0.3 137656  9796 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6382 [cluster]
root      33904  0.0  0.2 137656  7760 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6383 [cluster]
root      33909  0.0  0.2 137656  7740 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6384 [cluster]
root      33913  0.0  0.2 137656  7760 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6385 [cluster]
root      33955  0.0  0.1  13340  3084 pts/1    S+   12:35   0:00 redis-cli -h 192.168.0.9 -c -p 6385
root      34869  0.1  0.2 133560  7964 pts/7    Sl+  21:23   0:02 redis-sentinel *:26379 [sentinel] 
root      34958  0.1  0.2 133560  7972 pts/2    Sl+  22:00   0:00 redis-sentinel *:26380 [sentinel] 
root      34987  0.1  0.2 133560  7968 pts/4    Rl+  22:00   0:00 redis-sentinel *:26381 [sentinel] 
root      35028  0.0  0.0 103268   872 pts/5    R+   22:06   0:00 grep redis
[root@bigdata mycluster]# kill -9 33895
[root@bigdata mycluster]# ps -aux | grep redis
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      33891  0.0  0.3 137656  9804 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6380 [cluster]
root      33899  0.0  0.3 137656  9796 ?        Ssl  12:31   0:27 redis-server 192.168.0.9:6382 [cluster]
root      33904  0.0  0.2 137656  7760 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6383 [cluster]
root      33909  0.0  0.2 137656  7740 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6384 [cluster]
root      33913  0.0  0.2 137656  7760 ?        Ssl  12:31   0:26 redis-server 192.168.0.9:6385 [cluster]
root      33955  0.0  0.1  13340  3084 pts/1    S+   12:35   0:00 redis-cli -h 192.168.0.9 -c -p 6385
root      34869  0.1  0.2 133560  7964 pts/7    Sl+  21:23   0:02 redis-sentinel *:26379 [sentinel] 
root      34958  0.1  0.2 133560  7972 pts/2    Sl+  22:00   0:00 redis-sentinel *:26380 [sentinel] 
root      34987  0.1  0.2 133560  7968 pts/4    Sl+  22:00   0:00 redis-sentinel *:26381 [sentinel] 
root      35030  0.0  0.0 103268   892 pts/5    S+   22:07   0:00 grep redis

(2)观察master已经转移到6384端口的redis服务器

-》关闭6381前,6381是主,从是6384

192.168.0.9:6382> cluster nodes
dbc30ef2574f11b8c7ffe9fad9de39fefbc62659 192.168.0.9:6381 master - 0 1583314735242 2 connected 5461-10922
efe2c2c197eceec0864c3d09e4878c9d2264b990 192.168.0.9:6382 myself,master - 0 0 3 connected 10923-16383
40bada33e11e058ade5b7523315aee866acd21dd 192.168.0.9:6385 slave efe2c2c197eceec0864c3d09e4878c9d2264b990 0 1583314739314 6 connected
c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 192.168.0.9:6380 master - 0 1583314738299 1 connected 0-5460
586c9d258380b71d5ec8a7301ba3c79cd27d143b 192.168.0.9:6383 slave c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 0 1583314737279 4 connected
ea9b8edb48b9f657380f785d91f5eca66335953b 192.168.0.9:6384 slave dbc30ef2574f11b8c7ffe9fad9de39fefbc62659 0 1583314741356 5 connected

-》关闭6381后,主是6384

192.168.0.9:6382> cluster nodes
dbc30ef2574f11b8c7ffe9fad9de39fefbc62659 192.168.0.9:6381 master,fail - 1583330828283 1583330825351 2 disconnected
efe2c2c197eceec0864c3d09e4878c9d2264b990 192.168.0.9:6382 myself,master - 0 0 3 connected 10923-16383
40bada33e11e058ade5b7523315aee866acd21dd 192.168.0.9:6385 slave efe2c2c197eceec0864c3d09e4878c9d2264b990 0 1583331031876 6 connected
c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 192.168.0.9:6380 master - 0 1583331029835 1 connected 0-5460
586c9d258380b71d5ec8a7301ba3c79cd27d143b 192.168.0.9:6383 slave c972db1e5df4e1ffe495e42c03fc8d27ca99d15b 0 1583331030853 4 connected
ea9b8edb48b9f657380f785d91f5eca66335953b 192.168.0.9:6384 master - 0 1583331028823 7 connected 5461-10922

(3)sential哨兵控制台打印信息

[root@bigdata mycluster]# redis-sentinel sentinel_26380.conf 
34958:X 04 Mar 22:00:09.757 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.0 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26380
 |    `-._   `._    /     _.-'    |     PID: 34958
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                    
34958:X 04 Mar 22:00:09.760 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
34958:X 04 Mar 22:00:09.771 # Sentinel ID is b373a6e1c45296cfe25f9608188f291cfb38207e
34958:X 04 Mar 22:00:09.771 # +monitor master mymaster 192.168.0.9 6381 quorum 2
34958:X 04 Mar 22:00:09.772 * +slave slave 192.168.0.9:6384 192.168.0.9 6384 @ mymaster 192.168.0.9 6381
34958:X 04 Mar 22:00:10.223 * +sentinel sentinel 62a11b8815a1bd2b64226bb3abaa320c48812d75 192.168.0.9 26379 @ mymaster 192.168.0.9 6381
34958:X 04 Mar 22:00:40.291 # +sdown sentinel 62a11b8815a1bd2b64226bb3abaa320c48812d75 192.168.0.9 26379 @ mymaster 192.168.0.9 6381
34958:X 04 Mar 22:00:48.419 * +sentinel sentinel 0505ef5fef583c9bcdbf3e29fba88e0bf40a901c 192.168.0.9 26381 @ mymaster 192.168.0.9 6381
34958:X 04 Mar 22:01:18.511 # +sdown sentinel 0505ef5fef583c9bcdbf3e29fba88e0bf40a901c 192.168.0.9 26381 @ mymaster 192.168.0.9 6381
34958:X 04 Mar 22:07:38.340 # +sdown master mymaster 192.168.0.9 6381

四、Java连接

1.代码

    /**
     * 7.哨兵模式
     */
    public static void Sentinel() {
        Set<String> set=new HashSet<>();
        // set中放的是哨兵的Ip和端口
        set.add("192.168.0.9:26379");
        set.add("192.168.0.9:26380");
        set.add("192.168.0.9:26381");

        GenericObjectPoolConfig poolConfig=new GenericObjectPoolConfig();
        JedisSentinelPool jedisSentinelPool=new JedisSentinelPool("mymaster",set,poolConfig,60000);

        Jedis jedis=jedisSentinelPool.getResource();
        String val=jedis.get("k1");
        jedis.set("Jedis","jedis1");
        System.out.println(val);

    }

2.报错


警告: Cannot get master address from sentinel running @ 192.168.0.9:26381. Reason: redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled,

解决办法:

(1)参考:

(2)参考:


五、参考

1. Redis 学习笔记(十三)Redis Sentinel 介绍与部署
https://blog.csdn.net/men_wen/article/details/72724406?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

2.redis经典三节点高可用哨兵模式集群搭建

https://blog.csdn.net/zhangcongyi420/article/details/84191873

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值