redis哨兵环境搭建和工作原理

相关阅读:
linux 安装redis 完整步骤
Redis主从架构搭建详细步骤

此时我已经搭建好主从了,一主2从
我们来了解哨兵相关内容,哨兵的工作是干啥?一般都是在外面监控着敌情变化,告诉领导,让领导好做事情,但是如果领导被一个导弹给炸死了怎么办?带着这些疑问去学习下哨兵相关内容

哨兵是什么?

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的
master并将所有slave连接到新的master。

哨兵的作用

  • 监控
    不断的检查master和slave是否正常运行。
    master存活检测、 master与slave运行情况检测
  • 通知(提醒)
    当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
  • 自动故障转移
    断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服
    务器地址
    注意:
    哨兵也是一台redis服务器,只是不提供数据服务
    通常哨兵配置数量为单数

环境搭建

redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
sentinel monitor mymaster 127.0.0.1 6379 2
mymaster 是一个名字可以随便叫
2这个参数决定了最终参与选举的服务器数量,比如我,1个我们就设置1,3个哨兵就是设置2,5个就设置3,这也说明我们位数哨兵个数是单数的原因

说明:
mymaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号
127.0.0.1:监控的主数据库的IP
6379:监控的主数据库的端口
2:最低通过票数

redis哨兵环境搭建和工作原理

启动哨兵进程

redis-sentinel /opt/redis/6379/26379.conf 或者 redis-server /opt/redis/6379/26379.conf --sentinel
redis-sentinel /opt/redis/6380/26380.conf 或者 redis-server /opt/redis/6380/26380.conf --sentinel
redis-sentinel /opt/redis/6380/26380.conf 或者 redis-server /opt/redis/6381/26381.conf --sentinel

1.查看sentinel的基本状态信息
127.0.0.1:26379> INFO

2.列出所有被监视的主服务器,以及这些主服务器的当前状态
127.0.0.1:26379> SENTINEL MASTERS redis-test-master

3.列出给定主服务器的所有从服务器,以及这些从服务器的当前状态
127.0.0.1:26379> SENTINEL SLAVES redis-test-master

4.返回给定名字的主服务器的IP地址和端口号
127.0.0.1:26379> SENTINEL GET-MASTER-ADDR-BY-NAME redis-test-master

5.重置所有名字和给定模式pattern相匹配的主服务器,重置操作清除主服务器目前的所有状态,包括正在执行中的故障转移,并移除目
前已经发现和关联的,主服务器的所有从服务器和Sentinel
127.0.0.1:26379> SENTINEL RESET redis-test-master

6.当主服务器失效时,在不询问其他Sentinel意见的情况下,强制开始一次自动故障迁移,但是它会给其他Sentinel发送一个最新的配
置,其他sentinel会根据这个配置进行更新
127.0.0.1:26379> SENTINEL FAILOVER redis-test-master

7.查看其它哨兵信息
127.0.0.1:26379> SENTINEL sentinels redis-test-master

现在已经把环境搭建好了,此时你可以把6379主给宕机,再看哨兵的日志信息,
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理

哨兵工作原理

redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理
redis哨兵环境搭建和工作原理

4.Sentinel原理介绍
首先解释2个名词:SDOWN和ODOWN.

SDOWN:subjectively down,直接翻译的为”主观”失效,即当前sentinel实例认为某个redis服务为”不可用”状态.

ODOWN:objectively down,直接翻译为”客观”失效,即多个sentinel实例都认为master处于”SDOWN”状态,那么此时master将处于ODOWN,ODOWN可以简单理解为master已经被集群确定为”不可用”,将会开启failover

SDOWN与ODOWN转换过程:
i.每个sentinel实例在启动后,都会和已知的slaves/master以及其他sentinels建立TCP连接,并周期性发送PING(默认为1秒),在交互中,如果redis-server无法在”down-after-milliseconds”时间内响应或者响应错误信息,都会被认为此redis-server处于SDOWN状态.

ii.SDOWN的server为master,那么此时sentinel实例将会向其他sentinel间歇性(一秒)发送”is-master-down-by-addr ”指令并获取响应信息,如果足够多的sentinel实例检测到master处于SDOWN,那么此时当前sentinel实例标记master为ODOWN…其他sentinel实例做同样的交互操作.配置项”sentinel monitor ”,如果检测到master处于SDOWN状态的slave个数达到,那么此时此sentinel实例将会认为master处于ODOWN.

每个sentinel实例将会间歇性(10秒)向master和slaves发送”INFO”指令,如果master失效且没有新master选出时,每1秒发送一次”INFO”;”INFO”的主要目的就是获取并确认当前集群环境中slaves和master的存活情况.

经过上述过程后,所有的sentinel对master失效达成一致后,开始failover.

Sentinel与slaves”自动发现”机制:
在sentinel的配置文件中,都指定了port,此port就是sentinel实例侦听其他sentinel实例建立链接的端口.在集群稳定后,最终会每个sentinel实例之间都会建立一个tcp链接,此链接中发送”PING”以及类似于”is-master-down-by-addr”指令集,可用用来检测其他sentinel实例的有效性以及”ODOWN”和”failover”过程中信息的交互.在sentinel之间建立连接之前,sentinel将会尽力和配置文件中指定的master建立连接.sentinel与master的连接中的通信主要是基于pub/sub来发布和接收信息,发布的信息内容包括当前sentinel实例的侦听端口.