redis高级特性-sentinel(哨兵)

给大家带来一个redis-sentinel的深入浅出的讲解,希望对大家有所帮助(windows为例)
        Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。         顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的主要功能包括以下两个。    

(1)监控主数据库和从数据库是否正常运行。    

(2)主数据库出现故障时自动将从数据库转换为主数据库。

我们采用一主(master)二从(slave)三sentinel的架构模式来做讲解

1、首先安装redis

2、修改redis.windows.conf配置文件:复制三个redis.windows.conf文件,分别命名为master.6379.conf, slave.6380.conf, slave.6381.conf,创建sentinel.63791.conf, sentinel.63792.conf,sentinel.63793.conf ;

master6379.conf:(作为主节点保持默认配置就行)

             port 6379              

             bind 127.0.0.1

slave.6380.conf :

               port 6380                

               bind 127.0.0.1                

               slaveof 127.0.0.1 6379

sentinel.63791.conf  配置内容如下(直接复制粘贴即可):

port 63791

#主master,2个sentinel选举成功后才有效,这里的master-1是名称,在整合的时候需要一致,这里可以随便更改

sentinel monitor master-1 127.0.0.1 6379 2

#判断主master的挂机时间(毫秒),超时未返回正确信息后标记为sdown状态

sentinel down-after-milliseconds master-1 5000

#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。

sentinel failover-timeout master-1 18000

#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长

sentinel config-epoch master-1 2

相关命令:

redis-service.exe master.6379.conf //启动主从

redis-service.exe sentionel.63791.conf --sentinel //启动哨兵

redis-cli.exe -h 127.0.0.1 -p 6379 //链接redis  

info Replication //查看配置

redis-cli -p 63791//链接哨兵

sentinel master master-1//查看master的状态

sentinel slaves master-1//查看salves的状态    

sentinel sentinels master-1//查看哨兵的状态

sentinel get-master-addr-by-name master-1//获取当前master的地址 info sentinel//查看哨兵信息

主观下线  :

       首先解析一下什么叫主观下线,所谓主观下线,就是单个sentinel认为某个服务下线。

客观下线   :

      当sentinel监视的某个服务主观下线后,sentinel会询问其它监视该服务的sentinel,看它们是否也认为该服务主观下线,接收到足够数量(这个值可以配置)的sentinel判断为主观下线,既任务该服务客观下线,并对其做故障转移操作。  

选举领头sentinel :

        一个redis服务被判断为客观下线时,多个监视该服务的sentinel协商,选举一个领头sentinel,对该redis服务进行故障转移操作

Sentinel的工作方式:

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 的主观下线状态就会被移除。

Sentinel的“仲裁会”

前面我们谈到,主从故障转移时,需要的sentinel认可的票数达到设置的值才可以。 不过,当failover主备切换真正被触发后,failover并不会马上进行,还需要sentinel中的大多数sentinel授权后才可以进行failover。 当sentinel认可不可用的票数达到时,failover被触发。failover一旦被触发,尝试去进行failover的sentinel会去获得“大多数”sentinel的授权 这个区别看起来很微妙,但是很容易理解和使用。例如,集群中有5个sentinel,票数被设置为2,当2个sentinel认为一个master已经不可用了以后,将会触发failover,但是,进行failover的那个sentinel必须先获得至少3个sentinel的授权才可以实行failover。 如果票数被设置为5,必须所有5个sentinel都主观认为master为不可用,要进行failover,那么得获得所有5个sentinel的授权。

总结:

对于哨兵的应用,我们直接按照上面说的方式安装redis,修改配置文件,之后按照命令启动即可:

此时启动了哨兵之后,我们代码中直接连接哨兵即可,具体接入方式网上有很多,大家根据自己的实际情况选择即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章