work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Redis 哨兵机制和实现

Posted on 2020-07-04 23:35  work hard work smart  阅读(234)  评论(0编辑  收藏  举报

在前面的1主2从架构中Redis 主从架构实践

  CentOS 64-bit-basic  192.168.127.130    redis(主)

 CentOS 64-bit    192.168.127.128  redis(从) 

 CentOS 64-bit_2   192.168.127.129    redis(从)

如果Redis主挂了,两个redis从不能进行写操作,将导致redis不可用。Redis从也不会自动转为Redis主。这时候哨兵机制就很好的解决了这个问题。

 

一、哨兵机制原理

 

  哨兵模式(Sentinel): 哨兵会监控所有的redis主和redis从,当redis主挂了之后,会在redis从当中选择一个redis从作为redis主。新的redis主和redis从重新组成redis主从模式。

往往一个哨兵是不够的,通常是一个哨兵集群。

这样这能实现了Redis的高可用。

 

二、Redis哨兵机制实践

1、CentOS 64-bit-basic  192.168.127.130 redis(主) 配置sentinel.conf

cd  /home/tools/redis-6.0.5

cp sentinel.conf /usr/local/redis/

cd /usr/local/redis/

vi sentinel.conf

1)  protected-mode no

2) 哨兵后台运行

daemonize yes 

3) 配置日志文件

logfile /usr/local/redis/sentinel/redis-sentinel.log

4)哨兵工作路径

dir /usr/local/redis/sentinel

5) 配置哨兵监控

sentinel monitor larry-master 192.168.127.130 6379 2

larry-master 是redis主的昵称

2 代表哨兵的数量

6) 配置密码

sentinel auth -pass larry-master larry123456

7) 设置判定master失效的实践

sentinel down-after-milliseconds larry-master 10000

单位毫秒,也就是如果mater失效时间超过10秒,则认为master失效了。

8)设置并行同步的数量

sentinel parallel-syncs larry-master  1

假设有5个slavel,如果master挂了,其中1个slave成功master,那么新的master要与其它4个slave进行同步,这4个slave是一个接着一个进行同步的。

如果设置为2,则是2个接着2个进行同步。

9)主备切换的超时时间设置。默认3分钟

sentinel failover-timeout larry-master 180000 

master主挂了,哨兵进行故障转移。如果超过3分钟哨兵还没处理好,由于哨兵也是集群,则由其它哨兵处理。

 

启动哨兵

cd /home/tools/redis-6.0.5/src/

cp redis-sentinel  /usr/local/bin/

cd /usr/local/redis/

redis-sentinel sentinel.conf

 

查看是否启动

 

 说明哨兵已经启动了

 

2、 同理CentOS 64-bit 192.168.127.128 redis(从) 和redis主配置一致,并启动redis-sentinel

3、 同理CentOS 64-bit_2 192.168.127.129  redis(从)和redis主配置一致,并启动redis-sentinel

4、测试哨兵模式

此时redis1主2从以及redis哨兵已经启动,现在停掉redis主

1) CentOS 64-bit-basic  192.168.127.130 redis(主)

 

 2) CentOS 64-bit 192.168.127.128 redis(从) 

 

 3) CentOS 64-bit_2 192.168.127.129  redis(从)

 

 4) 停止redis主

192.168.127.130(Redis主)服务器上查看日志

cd /usr/local/redis/sentinel

  tail -f redis-sentinel.log

 

 从日志里可以看出  192.168.127.130所在的redis主已经停掉了,然后vote-for-leader 进行投票选择master

130挂了之后,129被选为master,128是slave, 129和128构成redis1主1从。

在129的redis-cli查看,128是slave

 

 在128的redis-cli查看,129是master

 

 然后关闭129,128被选为master。 开启129和130。最后是128是master,其它是slave

 

 

此时129任然是master, 130是slave。

注意: 由于redis主从配置时,刚开始redis主为130,后来它变为slave,未设置 masterauth larry123456,将导致最后同步master数据。解决方法: 加上masterauth。