一.哨兵简介

redis6主从哨兵模式搭建 redis哨兵_redis6主从哨兵模式搭建

redis6主从哨兵模式搭建 redis哨兵_redis_02

1. 哨兵概念

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

redis6主从哨兵模式搭建 redis哨兵_配置文件_03

2.哨兵的作用

监控

  • 不断的检查master和slave是否正常运行。
  • master存活检测、master与slave运行情况检测

通知(提醒)

  • 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。

自动故障转移

  • 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

注意:

  • 哨兵也是一台redis服务器,只是不提供数据服务
  • 通常哨兵配置数量为单数

二.启用哨兵模式

配置哨兵

  • 配置一拖二的主从结构
  • 配置三个哨兵(配置相同,端口不同)参看sentinel.conf
  • 启动哨兵
redis-sentinel sentinel- 端口号 .conf

 

1.准备配置文件

1.1 查看sentinel.conf

# 查看 --过滤注释  --过滤空行
cat sentinel.conf | grep -v "#" | grep -v "^$"

redis6主从哨兵模式搭建 redis哨兵_服务器_04

1.2 复制配置文件到自定义配置文件目录

cat sentinel.conf | grep -v "#" | grep -v "^$" > ./conf/sentinel-26379.conf

redis6主从哨兵模式搭建 redis哨兵_服务器_05

#端口
port 26379
#守护进程启动
#daemonize no
pidfile /var/run/redis-sentinel.pid
#日志
logfile "sentinel-26739.log"
#信息存储
dir /redis-5.0.5/data
#核心: mymaster--主的名称  127.0.0.1--ip 6379--port 
#     2--判断主是否挂的条件,这里标识2个哨兵认定挂了,就确认master挂了,建议:(哨兵数量/2)+1
sentinel monitor mymaster 127.0.0.1 6379 2
#连接未响应一定时间后认定挂了: mymaster--主的名称 30000--毫秒
sentinel down-after-milliseconds mymaster 30000
#新上任的master后每次同步数量级:  1 -- 越大服务器压力也越大,但速度越快
sentinel parallel-syncs mymaster 1
#同步超时时间 180000--毫秒
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

1.3 根据已有配置拷贝需要的配置

sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf

redis6主从哨兵模式搭建 redis哨兵_redis6主从哨兵模式搭建_06

2.按顺序启动

2.1 启动主从

master --redis-6379.conf

redis6主从哨兵模式搭建 redis哨兵_服务器_07

slave1 --redis-6380.conf

redis6主从哨兵模式搭建 redis哨兵_配置文件_08

slave2 --redis-6381.conf

redis6主从哨兵模式搭建 redis哨兵_服务器_09

2.2 启动哨兵

哨兵1 -- sentinel-26379.conf

redis6主从哨兵模式搭建 redis哨兵_配置文件_10

哨兵2 -- sentinel-26380.conf

redis6主从哨兵模式搭建 redis哨兵_配置文件_11

哨兵3 -- sentinel-26381.conf

redis6主从哨兵模式搭建 redis哨兵_redis_12

3个哨兵都启动后,哨兵1的日志添加了如下:

redis6主从哨兵模式搭建 redis哨兵_redis_13

现在将master下线后,哨兵1,2,3的日志如下:

redis6主从哨兵模式搭建 redis哨兵_配置文件_14

redis6主从哨兵模式搭建 redis哨兵_redis6主从哨兵模式搭建_15

redis6主从哨兵模式搭建 redis哨兵_配置文件_16

最后选择了slave1--6380为master

三.哨兵工作原理

主从切换

哨兵在进行主从切换过程中经历三个阶段

  • 监控
  • 通知
  • 故障转移

1.阶段一:监控阶段

1.1 用于同步各个节点的状态信息

redis6主从哨兵模式搭建 redis哨兵_redis_17

 获取各个sentinel的状态(是否在线)
 获取master的状态
                   master属性
                             runid
                             role:master
                   各个slave的详细信息
 获取所有slave的状态(根据master中的slave信息)
                   slave属性
                               runid
                               role:slave
                               master_host、master_port
                               offset
                               ……

1.2 工作顺序

redis6主从哨兵模式搭建 redis哨兵_配置文件_18

 

2. 阶段二:通知阶段

相互间信息保持联通

redis6主从哨兵模式搭建 redis哨兵_服务器_19

3. 阶段三:故障转移阶段

3.1 发现问题

认定那台服务下线了

redis6主从哨兵模式搭建 redis哨兵_服务器_20

redis6主从哨兵模式搭建 redis哨兵_服务器_21

3.2 竞选负责人

投票选出用于处理的哨兵

redis6主从哨兵模式搭建 redis哨兵_服务器_22

redis6主从哨兵模式搭建 redis哨兵_redis_23

redis6主从哨兵模式搭建 redis哨兵_服务器_24

redis6主从哨兵模式搭建 redis哨兵_redis_25

3.3 优选新master

服务器列表中挑选备选master

redis6主从哨兵模式搭建 redis哨兵_redis_26

 在线的

redis6主从哨兵模式搭建 redis哨兵_redis6主从哨兵模式搭建_27


 响应慢的

redis6主从哨兵模式搭建 redis哨兵_服务器_28

redis6主从哨兵模式搭建 redis哨兵_服务器_29


 与原master断开时间久的

redis6主从哨兵模式搭建 redis哨兵_配置文件_30

redis6主从哨兵模式搭建 redis哨兵_配置文件_31


 优先原则

        优先级

        offset

        runid

redis6主从哨兵模式搭建 redis哨兵_redis6主从哨兵模式搭建_32


 发送指令( sentinel )

         向新的master发送slaveof no one

         向其他slave发送slaveof 新masterIP端口