Redis_05-分布式设计-哨兵
- 如果终端无法使用
redis-server
开启可以使用which redis-sever
找到命令的位置,比如我redis命令位置在/usr/local/bin/redis-server
,那么开启服务器的时候可以使用/usr/local/bin/redis-server(sentinel) ConfPath
来按照配置文件开启集群或者主从或者哨兵
- 配置文件一般在
/etc/redis/
下
哨兵
- 监控redis服务器的运行状态, 可以进行
自动故障转移(failover)
, 实现高可用,与数据库主从
配合使用的机制
- 独立的进程, 每台redis服务器应该至少配置一个哨兵程序
- 监控redis主服务器的运行状态,出现故障后可以向管理员/其他程序发出通知
- 针对故障,可以进行自动转移, 并向客户端提供新的访问地址
流言协议
- 当某个哨兵程序 发现监视的主服务器下线后(心跳检测), 会向监听该服务器的其他哨兵询问, 是否确认主服务器下线, 当
确认的哨兵数量
达到要求(配置文件中设置)后, 会确认主服务器下线(客观下线), 然后进入投票环节
投票协议
- 当确认主服务器客观下线后, 哨兵会通过 投票的方式 来授权其中一个哨兵主导故障转移处理
- 只有在
大多数哨兵都参加投票
的前提下, 才会进行授权, 比如有5个哨兵, 则需要至少3个哨兵投票才可能授权
- 目的是避免出现
错误的故障迁移
最低配置
- 至少在3台服务器上分别启动至少一个哨兵
- 如果只有一台, 则服务器宕机后, 将无法进行故障迁移
- 如果只有两台, 一旦一个哨兵挂掉了, 则投票会失败
conf具体配置
bind 127.0.0.1 # 哨兵绑定的ip
port 26381 # 哨兵监听的端口号, redis客户端需要访问哨兵的ip和端口号
sentinel monitor mymaster 127.0.0.1 6380 2 # 设置哨兵 (主数据库别名 主数据库ip 主数据库端口 确认下线的最小哨兵数量)
sentinel down-after-milliseconds mymaster 60000 # 服务器断线超时时长
sentinel failover-timeout mymaster 180000 # 故障转移的超时时间
sentinel parallel-syncs mymaster 1 # 执行故障转移时,最多几个从数据库可以同步主数据库数据(数量少会增加完成转移的时长;数量多可能会影响主数据库的数据查询)
min-slaves-to-write 2 # 可执行故障转移的从数据库的最小数量(低于当数量时, 主数据库将禁止写入操作)
min-slaves-max-lag 10 # 从数据库的最大响应时长
# 以上两条连起来: 当至少有2个从数据库可以进行复制并且响应延迟都在10秒之内时, 主数据库才允许写操作
启动
redis-sentinel sentinel.conf