Redis之哨兵模式

文章目录

  • Redis之哨兵模式
    • 1.哨兵介绍
    • 2.哨兵作用
    • 3.哨兵相关配置
    • 4.配置哨兵
    • 5.演示(配置哨兵)
    • 6.主从切换过程
    • 7.阶段一监控阶段
    • 8.阶段二通知阶段
    • 9.阶段三故障转移阶段

Redis之哨兵模式

注:本文是基于CentOs 7系统上Redis v4.0.0进行讲解

1.哨兵介绍

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

Redis之哨兵模式_第1张图片

2.哨兵作用

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

3.哨兵相关配置

注:一般情况下rdb文件、aof文件、”哨兵的一些工作信息“都存在一个目录下面,即使不同的端口的也给存到一个目录下;
sentinel.conf与redis-conf文件也存放在一个目录下,即使不同端口的sentinel.conf与redis-conf文件也给存到一个目录下

1.port 26379:
哨兵通常默认端口是26379
2.dir “/var/lib/redis”:
存储哨兵的一些工作信息
3.sentinel monitor :
让 sentinel 去监控一个地址为 ip:port 的主服务器,这里的 master-name 可以自定义; 是一个数字,表示当有多少个 sentinel 认为主服务器宕机时,它才算真正的宕机掉,通常数量为半数或半数以上才会认为主机已经宕机, 需要根据 sentinel 的数量设置。
4.sentinel monitor mymaster 127.0.0.1 6379 2:
监控的主机,mymaster这个单词可以更改,可以自定义名字
2是指2个哨兵认定主机挂那么才会认为主机挂,相当于是一个标准,通常设定为哨兵数量的一半加1,这就是为什么我们的哨兵数量通常设为单数(比如设置3个哨兵的时候,有2个哨兵认为主机挂了,才认为主机是挂了)(3个哨兵配置2)(5个哨兵配置3)(7个哨兵配置4)
5.sentinel down-after-milliseconds
在指定的毫秒数内,若主节点没有应答哨兵的 PING 命令,此时哨兵认为服务器主观下线,默认时间为 30 秒。 与mymaster需要一一对应,是毫秒单位
6.sentinel parallel-syncs :
指定可以有多少个 Redis 服务同步新的主机,即可以有多少个redis同时开始同步数据,一般而言,这个数字越小同步时间越长,而越大,则对网络资源要求就越高。
7.# sentinel auth-pass mymaster MySUPER–secret-0123passw0rd:
sentinel auth-pass <服务器名称><密码>
若主服务器设置了密码,则哨兵必须也配置密码,否则哨兵无法对主从服务器进行监控。该密码与主服务器密码相同。
8.# sentinel failover-timeout
指定故障转移允许的毫秒数,若超过这个时间,就认为故障转移执行失败,默认为 3 分钟。

4.配置哨兵

1)配置一拖二的主从结构
2)配置三个哨兵(配置相同,端口不同)
3)参看sentinel.conf
注:启动顺序是,先启动主机,再启动从机再启动哨兵
启动哨兵命令如下:

redis-sentinel sentinel-端口号.conf

Redis之哨兵模式_第2张图片

5.演示(配置哨兵)

创建了3个哨兵,一个master,2个slave。
“哨兵1”、“哨兵2“、”哨兵3“窗口用于看日志;

可以看到有一个 sentinel.conf配置文件

Redis之哨兵模式_第3张图片

复制sentinel.conf配置文件,并进行修改成sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf:

Redis之哨兵模式_第4张图片
Redis之哨兵模式_第5张图片

Redis之哨兵模式_第6张图片

查看redis-6379.conf、redis-6380.conf配置文件

Redis之哨兵模式_第7张图片

创建redis-6381.conf配置文件

Redis之哨兵模式_第8张图片

删除数据目录下的乱七八糟文件

Redis之哨兵模式_第9张图片

启动6379master主机、6380slave从机、6381salve从机、:

Redis之哨兵模式_第10张图片
Redis之哨兵模式_第11张图片
Redis之哨兵模式_第12张图片

启动26379哨兵

Redis之哨兵模式_第13张图片

可以进入哨兵26379客户端进行查看key即get操作,不过不允许进行set操作;
还可以info查看信息

Redis之哨兵模式_第14张图片
Redis之哨兵模式_第15张图片

再次查看26379配置文件,发现里面新增添了许多信息,即一旦启动哨兵,它的配置文件信息就要变化

Redis之哨兵模式_第16张图片

启动26380哨兵:
从最后一行可以看到哪个id就是26379哨兵的id了

Redis之哨兵模式_第17张图片

再次查看26379哨兵日志,发现也多了一行,是26380哨兵的id,即说明哨兵之间是可以互相通信的

Redis之哨兵模式_第18张图片

再次查看26379配置文件,发现里面信息又发生了一次变化

Redis之哨兵模式_第19张图片

启动26381哨兵

Redis之哨兵模式_第20张图片

再次查看26379配置文件,发现里面信息又发生了一次变化

Redis之哨兵模式_第21张图片

ctrl+c停掉6379master主机

Redis之哨兵模式_第22张图片

30秒以后,26379哨兵开始打印大量日志
进行选举投票,让6381当主机,让6379、6380当从机,这就是主从切换,但是6379仍然是掉线的,即再sdown 6379

Redis之哨兵模式_第23张图片

6.主从切换过程

哨兵在进行主从切换过程中经历三个阶段
1.监控:
同步信息
2.通知:
保持联通
3.故障转移:
1)发现问题
2)竞选负责人
3)优选新master
4)新master上任,其他slave切换master,原master作为slave故障回复后连接

7.阶段一监控阶段

Redis之哨兵模式_第24张图片

为了哨兵与master更好的进行信息交互,建立一个cmd连接(相当于通道)
master也会生成一个“SentinelRedisInstance”信息,与""SentinelState“几乎一模一样

Redis之哨兵模式_第25张图片

第二个sentinel来之后,会发现“SentinelRedisInstance”信息,这样的话也就知道其他哨兵的信息了

Redis之哨兵模式_第26张图片

此时第一个sentinel只有一个哨兵的信息,但是sentinel有两个哨兵的信息,为了保证哨兵之间同步,建立起”发布订阅通道“,这样的话就可以相互对称信息了

Redis之哨兵模式_第27张图片

为了保证第一个哨兵与第二个哨兵之间可以长期对称,它们之间需要ping命令来维持

Redis之哨兵模式_第28张图片

8.阶段二通知阶段

第一次可能是sentinel1发送hello给master与slave,收到回复后再转发给其他哨兵,第二次可能就是sentinel2发送hello给master与slave,收到回复后再转发给其他哨兵

Redis之哨兵模式_第29张图片

9.阶段三故障转移阶段

1.服务器列表中挑选备选master
1)不在线的
2)响应慢的
3)与原master断开时间久的
4)优先原则
4.1)优先级
4.2)offset
4.3)runid
2.发送指令( sentinel )
1)向新的master发送slaveof no one
2)向其他slave发送slaveof 新masterIP端口

一个sentinel标记主机挂了是sdown,超过半数sentinel标记主机下线是odown

Redis之哨兵模式_第30张图片
Redis之哨兵模式_第31张图片

你可能感兴趣的:(Redis,redis)