分布式设计-哨兵

  • 作用
    • 监控redis服务器的运行状态, 可以进行自动故障转移(failover), 实现高可用
    • 与 数据库主从 配合使用的机制
  • 特点
    • 独立的进程, 每台redis服务器应该至少配置一个哨兵程序
    • 监控redis主服务器的运行状态
    • 出现故障后可以向管理员/其他程序发出通知
    • 针对故障,可以进行自动转移, 并向客户端提供新的访问地址

  • 流言协议
    • 当某个哨兵程序ping 发现监视的主服务器下线后(心跳检测), 会向监听该服务器的其他哨兵询问, 是否确认主服务器下线, 当 确认的哨兵数量 达到要求(配置文件中设置)后, 会确认主服务器下线(客观下线), 然后进入投票环节
  • 投票协议
    • 当确认主服务器客观下线后, 哨兵会通过 投票的方式 来授权其中一个哨兵主导故障转移处理
    • 只有在 大多数哨兵都参加投票 的前提下, 才会进行授权, 比如有5个哨兵, 则需要至少3个哨兵投票才可能授权
    • 目的是避免出现错误的故障迁移
  • 建议最低配置
    • 至少在3台服务器上分别启动至少一个哨兵
    • 如果只有一台, 则服务器宕机后, 将无法进行故障迁移
    • 如果只有两台, 一旦一个哨兵挂掉了, 则投票会失败
  • 相关配置 (sentinel.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  # 执行故障转移时,最多几个从数据库可以同时同步主数据库数据(数量少会增加完成转移的时长; 数量多则正在同步的从数据库会因同步而无法提供数据查询功能)
  • 启动哨兵
    sudo redis-sentinel sentinel.conf
  • python通过哨兵访问redis
    • redis-py中就集成了哨兵功能

1552472-20190826191903289-1827211840.png

mysql官方没有提供故障转移方案, 需要用第三方的服务, 如 keepalive等

转载于:https://www.cnblogs.com/oklizz/p/11414376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值