Redis哨兵Sentinel模式
Redis 存在多台服务器,实现主从复制功能。哨兵模式是一种特殊模式,Redis 提供哨兵的命令,哨兵是一个独立进程,作为进程会独立运行。原理是哨兵通过发送命令, 等待 Redis 服务器响应,监控运行多个 Redis 实例。
哨兵有两个作用
- 通过发送命令,让 Redis 服务器返回监测其运行状态,包括主服务器和从服务器。
- 当 哨兵监测到 master宕机, 会自动将 slave 切换成 master,然后通过发布订阅模式通知到其他的从服务器,修改配置文件,让它们切换主机 。
只是现实中一个哨兵进程对 Redis 服务器进行监控,也可能出现问题,为了处理这个问题,可以使用多个哨兵的监控,各个哨兵之间还会相互监控,就变为了多个哨兵模式。多个哨兵不仅监控各个 Redis 服务器,而且哨兵之间互相监控 , 看看哨兵们是否还“活 ” 着。 如下图

故障切换( failover)的过程:
假设主服务器岩机,哨兵 1 先监测到这个结果,当时系统并不会马上进行 failover 操作 ,而仅仅是哨兵1 主观地认为主机己经不可用,这个现象被称为主观下线。【SDOWN】
当后面的哨兵监测也监测到主服务器不可用 并且有 一定数量的哨兵认为主服务器不可用,哨兵之间就会形成一次投票,投票的结果由一个哨兵发起,进行 failover 操作,在 failover 操作的过程中切换成功后,就会通过发布订阅方式,让各个哨兵把自己监控的服务器实现切换主机 , 这个过程被称为客观下线【ODOWN】
这样对于客户端而言, 一切都是透明的 。
Sentinel环境搭建
主机信息 :
服务类型 是否主服务器 IP地址 端口信息
Redis 是 192.168.223.129 6379
Redis 否 192.168.223.131 6379
Redis 否 192.168.223.130 6379
Sentinel — 192.168.223.129 26379
Sentinel — 192.168.223.130 26379
Sentinel — 192.168.223.131 26379
防火墙策略的调整
确保redis和哨兵进程的端口,在防火墙上开放。
redis的默认6379端口,在防火墙上开放,可以在本地通过RedisDeskTopManager来登录
哨兵的默认26379端口,在防火墙上开放,确保哨兵之间的通信。
Redis 的主服务器的配置修改
#使得 Redis 服务器可以跨网络访问 bind 0.0.0.0 #设置密码 requirepass admin #主服务器密码 masterauth admin
Redis 的从服务器的配置修改
#使得 Redis 服务器可以跨网络访问 bind 0.0.0.0 #设置密码 requirepass admin #指定主服务器,注意:有关 slaveof 的配置只是配置从服务器,而主服务器不需要配置 slaveof 192.168.223.129 6379 #主服务器密码 , 注意:有关 slaveof 的配置只是配置从服务器,而主服务器不需要配置 masterauth admin
主要是配置 Redis 服务器,从服务器比主服务器多一个 slaveof 的配置和密码 ,配置的 bind 使得 Redis 服务器可以跨网段访问 。 而对于外部的访问还需要提供密码,因此还提供 requirepass 的配置,用以配置密码 ,这样就配置完 3 台服务器 。
哨兵sentinel.conf 的配置
配置 3 个哨 兵 , 每一个哨兵的配置都是一样的 ,在 Redis 安装目录下可以找到sentinel.conf 文件
# 禁止保护模式 protected-mode no # 配置监听的主服务器,这里 sentinel monitor 代表监控 , # mymaster 代表服务器名称,可以自定义 # 192.168.223.129 代表监控的主服务器 # 6379 代表端口 # 2 代表只有两个或者两个以上的哨兵认为主服务器不可用的时候,才会做故障切换操作 sentinel monitor mymaster 192.168.223.129 6379 2 # sentinel auth-pass 定义服务的密码 # mymaster 服务名称 # admin Redis 服务器密码 sentinel auth-pass mymaster admin
启动顺序
首先是主机 192.168.223.129的 Redis 服务进程 ,然后启动从机的服务进程,最后启动 3 个哨兵的服务进程
哨兵进程启动命令,指定配置文件
./redis-sentinel ../etc/sentinel.conf
哨兵模式的其他配置顶
配置项 参数类型 作用
port 整数 启动哨兵进程端口
dir 文件夹目录 哨兵进程服务临时文件夹,默认为/tmp , 要保证有可写入的权限
sentinel down-after-milliseconds 〈服务名称〉〈毫秒数(整数)> 指定哨兵在监视j Red i s 服务时,当 Red is 服务在一个毫秒数内都无法回答时,单个哨兵认为的主观下线时间,默认为 30000 (30 秒)
sentinel parallel-syncs 〈服务名称〉〈服务器数(整数)> 指定可以有多少 Redis 服务同步新的主机, 一般而言 , 这个数字越小同步时间就越长,而越大,贝lj对网络资源要求则越高
sentinel failover-timeout 〈服务名称〉〈毫秒数(整数)〉 指定在故障切换允许的毫秒数,当超过这个毫秒数的时候,就认为切换故障失败,默认为 3 分钟
sentinel notification-script 〈服务名称〉〈脚本路径〉 指定 sentinel 检测到该监控的 redis 实例指向的实例异常时,调用的报警脚本.该配置项可选,比较常用
sentinel down-after-milliseconds 配置项只是一个哨兵在超过其指定的毫秒数依 旧没有得到回答消息后,会自己认为主机不可用。对于其他哨兵而言,并不会认为主机不可用。
浙公网安备 33010602011771号