跳转至

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