Redis Sentinel:redis集群应用,分布式系统。

  • 多个Sentinal进程之间通过 gossip 协议来接收主服务器是否下线的信息,通过 Raft 一致性协议来决定故障转移及转移服务器。
  • 监控(monitoring):PING消息检查主从服务器运行状态
  • 通知(notification):通知问题服务器信息
  • 故障迁移(automatic failover):提升失效主服务器的从服务器为新的主服务器,其它从属服务器从新的主服务器复制信息,集群向客户端返回新的主服务器地址,

1、启动命令:

redis-server /path/to/sentinel.conf --sentinel

配置文件

sentinel monitor mymaster 127.0.0.1 6379 2 //主服务器名称 ip port 判定失效投票数

sentinel down-after-milliseconds mymaster 60000 //sentinel判定服务器失效所需的毫秒数

sentinel failover-timeout mymaster 180000 //故障转移时限

sentinel parallel-syncs mymaster 1 //故障转移时,最多可以有多少个从服务器对新的主服务器请求同步 同一时间只让一个从服务器置于不可用状态

2、自动发现Sentinel实例及从服务器:

  • sentinel实例发现:监视相同主机的sentinel实例,通过订阅发布功能实现相互发现,频道: _sentinel_:hello

  • 从服务器发现:sentinel实例通过询问主服务来获取其下从属服务器信息:

  • 发现流程:

sentinel 发送本实例 ip、port、runid 到监视的主从服务器频道 sentinel:hello
|                                                                                                                                     |
sentinel 从订阅的 主从服务器 sentinel:hello 频道 获取监视的sentinel信息                     从订阅的 主从服务器 sentinel:hello 频道获取监视的sentinel主发送的服务器配置信息
|                                                                                                                                     |
自动添加新的sentinel实例到配置列表(所有监视同一主服务器的所有sentinel实例列表) 将主服务器配置信息更新到最新的配置
(相同runid或者相同ip:port的列表条目会被移除,然后添加新的条

3、下线:

  • 主观下线(SDOWN):单个sentinel判定服务器下线

  • 客观下线(ODOWN):多个sentinel判定服务器SDOWN,并通过SENTINEL is-master-down-by-addr命令相互交互后,得出服务器下线判断。只适用于主服务器

  • 判定流程:

    • sentinel PING消息;服务器回复 +PONG -LOADING -MASTERDOWN
    • 服务器在master-down-after-milliseconds内连续回复无效信息 认定主观下线
    • 发现主服务器客观下线的sentinel进行故障迁移操作
    • sentinel 实例 只提供了订阅功能的redis服务器,订阅相应的频道获取监控服务器的相关信息。
    • Raft协议领导者选举。

4、故障转移过程:

  • 主服务器客观下线

  • sentinel epoch自增,试图当选执行故障转移

  • Raft协议选择一个从属服务器为新的主服务器

  • 发送SLAVEOF NO ONE 使其转变为主服务器

  • 通过订阅发布向其它sentinel发送最新的主服务器配置信息。

  • 向原来的从服务器发送SLAVEOF命令,使他们向心的主服务器请求信息复制同步

  • 当所有从服务器想新的主服务器请求数据复制同步事,sentinel终止故障转移

4、附注:

  • Redis Sentinel严重依赖系统时间,例配置
  • lua脚本执行超时,redis返回-BUSY状态,Sentinel会在故障转移前杀死脚本。
  • 哨兵是为了解决单点故障问题
 

最新文章

  1. PHP curl 函数
  2. Cruehead.1
  3. search in 2d matrix and serach minimum in rotated array
  4. git warning解决方案
  5. 141. Linked List Cycle
  6. 通过批处理文件启动oracle11g服务
  7. JDBC连接Oracle数据库的问题
  8. iOS-Reachability的使用
  9. JS操作css的float属性的特殊写法
  10. PL/SQL编程重点语句输出整理
  11. [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-widgets简介
  12. cookie, session, token 是什么 以及相应的安全考量
  13. DENIED Redis is running in protected mode
  14. IOS中的用户安全
  15. strip_tags、htmlentities、htmlspecialchars的区别
  16. 逆序对__归并排序__树状数组 Inversions SGU - 180
  17. Ubuntu学习总结-01 安装Ubuntu
  18. CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  19. python多进程(一)
  20. GO/GOLANG程序员笔记大全

热门文章

  1. iostat查看系统的IO负载情况
  2. Selenium自动化测试之基本控件使用
  3. 处理HTML表单(11)
  4. linux重要目录
  5. php实现姓名按首字母排序的类与方法
  6. [笔记] FireDAC DataSet 导入及导出 JSON
  7. BigData:值得了解的十大数据发展趋势
  8. CDH部署(以5.7.5为例)
  9. Python学习 :网络通信要素
  10. [转]Web登录中的信心安全问题