sqlserver故障转移集群和alwayson的区别_Redis sentinel高可用集群

9c6f7fec83859b321314b0972e46d3e6.gif

Sentinel为Redis提供了高可用性架构,该部署架构可以在无需人工干预的情况下完成故障转移;同时也提供监控,通知等其他功能.

一. 架构

sentinel的主要架构如下: redis服务1主2从,用来数据备份和分流; 3个sentinel服务用来做系统监控,通知和故障转移.

0805c2e9fccb3c3c499e9a294a8a36ac.png

二. 配置

为了sentinel能正确的进行监控和故障转移,首先了解下sentinel.conf配置

pidfile /var/run/redis-sentinel.pidlogfile ""daemonize yesport 26379dir /tmp# 集群监控配置# 定义master节点为127.0.0.1 6379的集群名称为mymaster# 哨兵票选时,至少需要2个哨兵认为节点down了,才认为真正down了sentinel monitor mymaster 127.0.0.1 6379 2# 指ping命令超时时间,超过后会变成主观下线状态,单位:毫秒sentinel down-after-milliseconds mymaster 30000# 发生故障转移时最多有多少个slave节点同时对新的master进行数据同步sentinel parallel-syncs mymaster 1# 指定故障转移超时,单位:毫秒sentinel failover-timeout mymaster 180000# 发生警告事件时调用的脚本,如主观下线和客观下线sentinel notification-script # 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息.以下参数将会在调用脚本时传给脚本:# #目前总是[failover], 是[leader]或者[observer]中的一个. 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的sentinel client-reconfig-script # 运行时不能更新notification-script和client-reconfig-script通知脚本sentinel deny-scripts-reconfig yes

三. 定时任务

为了维持各节点间的信息交互,以及系统能够及时故障转移,Sentinel提供了3个定时任务

1. 每10秒一次,向所有的master和slave节点发送info命令.

主要用于,发现slave节点信息和确认各节点主从关系;

4f57c1305ff943ad0760b15b6ba9e613.png

2. 每2秒一次,利用了master的pub/sub机制,所有sentinel节点发布自己和master节点信息;同时订阅该channel,更新自己维护的节点列表信息.

pub/sub channel: __sentinel__:hello

e69eca4cb48325acadf75debc6beb1b4.png

3. 每1秒一次,每个sentinel节点向所有redis节点和其他sentinel节点发送PING命令,进行心跳检测.

回复:+PONG , -LOADING或者-MASTERDOWN

c6eda8614605f8b4987dd6c61867e731.png

四. 故障转移

主要流程如下:

ac7602a55ad95f3a25a73aa8b1922eb4.png

1.如果一个sentinel距最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,那么这个redis节点会被 sentinel 标记为主观下线(SDOWN). 

2. 被标记为主观下线的master节点,sentinel 会以每秒一次的频率确认主服务器的确进入了主观下线(SDOWN)状态.

3. 当sentinel集群中有足够数量节点都认为是主观下线状态,这个master节点就会被标记为客观下线,同时会以每秒一次的频率向slave节点发送info命令;反之,没有足够数量时,会移除主观下线(ODOWN)状态.

4. 各sentinel节点,会根据raft协议选出主节点,协调执行故障转移.

5. sentinel主节点会优先选择优先级小,复制偏移量大,进程ID小的节点选为master并发送SLAVEOF NO ONE命令.

6. sentinel主节点通知其他slave节点的主节点变更为新master节点,并进行数据复制.

五. TILT 模式

redis sentinel 严重依赖计算机的时间功能: 比如说,为了判断一个实例是否可用, sentinel 会记录这个实例最后一次相应 PING 命令的时间,并将这个时间和当前时间进行对比, 从而知道这个实例有多长时间没有和sentinel进行任何成功通讯.

不过, 一旦计算机的时间功能出现故障, 或者计算机非常忙碌, 又或者进程因为某些原因而被阻塞时, sentinel 可能也会跟着出现故障.

TILT 模式是一种特殊的保护模式: 当 sentinel 发现系统有些不对劲时, sentinel 就会进入 TILT 模式.

因为 sentinel 的时间中断器默认每秒执行 10 次, 所以我们预期时间中断器的两次执行之间的间隔为 100 毫秒左右. sentinel 的做法是, 记录上一次时间中断器执行时的时间, 并将它和这一次时间中断器执行的时间进行对比:

如果两次调用时间之间的差距为负值,或者非常大(超过 2 秒钟), 那么 sentinel 进入 TILT 模式.

如果 sentinel 已经进入 TILT 模式, 那么 sentinel 延迟退出 TILT 模式的时间.

当 sentinel 进入 TILT 模式时, 它仍然会继续监视所有目标, 但是:

它不再执行任何操作,比如故障转移.

当有实例向这个 sentinel 发送 sentinel is-master-down-by-addr 命令时, sentinel 返回负值: 因为这个 sentinel 所进行的下线判断已经不再准确.

如果 TILT 可以正常维持 30 秒钟,那么 sentinel 退出 TILT 模式.

六. 常用命令

1. 获取指定master信息

sentinel master <master name>

2. 获取所有master信息

sentinel masters

3. 列出给定master的所有slave节点信息.

sentinel slaves <master name>

4. 获取指定master的sentinel信息

sentinel sentinels <master-name>

5. 询问指定sentinel节点redis master节点是否下线状态.

sentinel is-master-down-by-addr <ip> <port> <current-epoch> <runid>

6. 返回指定集群的ip和端口.

sentinel get-master-addr-by-name 

7. 重置匹配的主服务器状态.

sentinel reset <pattern>

8. 当主服务器失效时,强制开始一次故障迁移.

sentinel failover <master name>

9. 检查当前的sentinel配置是否能够达到故障转移主机所需的仲裁,以及授权故障转移所需的大多数.在监视系统中应使用此命令来检查sentinel部署是否正常.

sentinel ckquorum<master name>

10. 设置sentinel开始设置监视具有指定名称,ip,端口和仲裁数量的主服务器

sentinel monitor <name> <ip> <port> <quorum>

11. 如果sentinel监控的主节点设置了密码,sentinel通过以上命令添加主节点的密码

sentinel auth-pass <master-name> <password>

12. 删除指定master集群,sentinel不再对该集群进行监控

sentinel remove 

13. 设置指定集群对应sentinel属性

sentinel set <mastername> [<option> <value>]

关于sentinel操作命令点击阅读全文查看官方文档了解更多详细说明

七. Sentinel集群的不足

1. 集群较难支持横向扩容,且单节点的容量是有限的。

2. 从节点并不能分担主节点的压力,在没有故障发生时是很浪费资源的.

3. 系统高度依赖计算机时间,时间不一致时,容易造成系统不稳定,以及脑裂等事件.

综上,sentinel集群在数据量不是很大,并发也不是很高的情况是一种不错的选择.

推荐阅读


  • Redis pub/sub 发布订阅功能

  • Redis Pipeline 命令的批量操作

  • Redis 事务 批量命令的原子操作

  • Redis  HyperLogLog UV等基数统计

  • Redis geo 轻松实现「附近的人」

  • Redis 三种数据持久化方式

  • Redis 过期策略

  • Redis 慢日志

  • Redis 主从同步

e3b8b5db02b710b8d532a506913ab850.png

(长按二维码即可关注)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值