Redis中的Sentinel

什么是Sentinel?

sentinel(哨兵)监控redis的运行情况,保证了redis的高可用性。主要功能包括两个:1)、监控主服务器和从服务器是否正常运行;2)、主服务器出现故障时,从服务器自动切换成主服务器。一个sentinel实例可以监控任意多个主服务器,以及主服务器下从服务器;同样,也可以使用多个sentinel来监控一个(多个redis服务器组成的)redis系统。此时,多个sentinel也会相互监控,整个监控系统会更加完善。

Sentinel的实现原理

1、判断redis服务器下线(故障)

哨兵启动后,会与redis主服务器、redis从服务器建立连接。哨兵会每隔1秒会向redis主服务器、redis从服务器和其他哨兵发送ping命令,通过ping命令返回的结果来判断对方是否在线。哨兵配置文件(sentinel.conf)中sentinel down-after-milliseconds <master-name> <milliseconds>指定了哨兵判断redis服务器进入主观下线的时间。如果redis服务器在milliseconds(单位是毫秒)内向哨兵返回无效回复,则哨兵认为该服务器进入主观下线状态,当哨兵将某个redis服务器(假设是redis主服务器)认定为主观下线时,哨兵会继续向其他监控该redis主服务器的哨兵发送命令,询问该主服务器是否真的下线,当哨兵从其他哨兵接收到足够数量的(redis主服务器)已下线判断后,哨兵就会将该redis主服务器判断为客观下线,并对主服务器执行故障转移。

2、故障转移

故障恢复需要由领头哨兵完成,选举领头哨兵是由raft算法完成(zookeeper的核心算法,想了解的可以百度下),选举出领头哨兵后,将会对redis主服务器进行故障转移。领头哨兵会从停止服务的redis主服务器的从服务器中选出一个来当新的主服务器,依据是优先级最高的从服务器。优先级设置在redis配置文件的replica-priority选项(参考【Redis的配置文件 )。选出一个从服务器后,领头哨兵会向从服务器发送命令(slaveof no one)使其关闭复制功能并升级为主服务器,接着会向其他服务器发送命令(slaveof 新主服务器.ip 新主服务器.port)来使它们成为新主服务器的从服务器。最后,将停止服务的旧的主服务器设置为新主服务器的从服务器,这样,当旧的主服务器重新启动服务时,它将会以新主服务器的从服务器来进行运行。

Sentinel配置

1、在多个linux服务器上安装redis服务或者一台服务器安装不同端口的多个redis服务;

2、针对这多个redis服务进行主从复制配置;

3、配置sentinel.conf文件;

4、启动sentinel服务

在128上启动4个redis服务(一主三从)来记录下Sentinel需要怎么样配置,下面简单地写下步骤

第一步:打开一个窗口,记为窗口1,进入redis目录

[root@localhost ~]# ps -ef|grep redis
root      2078  2058  0 13:16 pts/0    00:00:00 grep redis
[root@localhost ~]# cd /opt/redis-5.0.4
[root@localhost redis-5.0.4]# ls
00-RELEASENOTES  appendonly.aof  BUGS  CONTRIBUTING  COPYING  deps  dump.rdb  INSTALL  Makefile  MANIFESTO  README.md  redis.conf  runtest  runtest-cluster  runtest-sentinel  sentinel.conf  src  tests  utils

第二步:配置主从复制

复制redis的配置redis.conf,命名为redis6380.conf,并且修改配置,配置主从复制

[root@localhost redis-5.0.4]# cp redis.conf redis6380.conf
[root@localhost redis-5.0.4]# vim redis6380.conf 
此次需要修改的配置
port 6380   设置端口
pidfile /var/run/redis_6380.pid pid文件路径
replicaof 192.168.136.128 6379  配置主机ip端口,配置主从复制
masterauth password(redis没有设置密码,则不需要配置)
replica-priority 10  优先级


已经修改过的:
bind 0.0.0.0
daemonize yes  不影响当前会话,启动过程隐藏,守护进程
protected-mode no 关闭保护模式,其他服务器可访问

然后再复制redis6380.conf,命名为redis6381.conf、redis6382.conf;配置相应修改(上面配置中的6380分别改成6381、6382);replica-priority分别设置为20、30

[root@localhost redis-5.0.4]# cp redis6380.conf redis6381.conf 
[root@localhost redis-5.0.4]# cp redis6380.conf redis6382.conf 
[root@localhost redis-5.0.4]# vim redis6381.conf 
[root@localhost redis-5.0.4]# vim redis6382.conf 
[root@localhost redis-5.0.4]# ls
00-RELEASENOTES  BUGS          COPYING  dump.rdb  Makefile   README.md       redis6381.conf  redis.conf  runtest-cluster   sentinel.conf  tests
appendonly.aof   CONTRIBUTING  deps     INSTALL   MANIFESTO  redis6380.conf  redis6382.conf  runtest     runtest-sentinel  src            utils

第三步:修改哨兵的配置文件sentinel.conf

使用命令vim sentinel.conf 修改sentinel.conf文件,简单说明下需要注意的配置项:

port <sentinel-port>   

哨兵端口,默认是26379,只启动单个sentinel,不需要修改,如果要运行多个sentinel,需要将这个端口号设置成唯一的,如:26380、26381等。

 sentinel monitor <master-name> <ip> <redis-port> <quorum> 

master-name表示要监控的redis名字,可以任意取,规则:由大小写字母、数字、常用符号(如:下划线等)组成;

<ip> <redis-port>表示redis服务器的ip和端口号;

<quorum>表示最低通过票数,当redis主机发生故障时,从机选举成主机的最少哨兵的同意个数。

sentinel auth-pass <master-name> <password>

设置redis连接的安全校验密码,没有设置密码的情况下,不需要配置。

sentinel down-after-milliseconds <master-name> <milliseconds>

判断主机主观下线的时间,当sentinel不断向redis主机发送ping命令,在milliseconds(单位为毫秒,默认值为30000,即30S)时间内收不到回复,则认为主机主观下线。

sentinel parallel-syncs <master-name> <numreplicas>

当新的主机产生时,复制新主机的从机数量,建议设置为1。

sentinel failover-timeout <master-name> <milliseconds>

故障转移失败时间,即在故障

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值