Redis 一定要了解的知识 - (六)Redis HA 实践(Redis Sentinel)

六、Redis HA 实践(Redis Sentinel)

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。
在这里插入图片描述
Sentinel 是一个监视器,它可以根据被监视实例的身份和状态来判断应该执行何种动作。

6.1 Redis Sentinel 功能

  • 监控(Monitoring):

Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

  • 提醒(Notification):

当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

  • 自动故障迁移(Automatic failover):

当一个主服务器不能正常工作时,Sentinel 会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。

6.2 服务器连接

发现并连接主服务器:
在这里插入图片描述

Sentinel 通过用户给定的配置文件来发现主服务器。

Sentinel 会与被监视的主服务器创建

两个网络连接:
命令连接用于向主服务器发送命令。
订阅连接用于订阅指定的频道,从而发现监视同一主服务器的其他 Sentinel。
  • 发现并连接从服务器:

    Sentinel 通过向主服务器发送 INFO 命令来自动获得所有从服务器的地址。
    跟主服务器一样,Sentinel 会与每个被发现的从服务器创建命令连接和订阅连接。

在这里插入图片描述

  • 发现其他 Sentinel:

Sentinel 会通过命令连接向被监视的主从服务器发送“HELLO” 信息,该消息包含Sentinel 的 IP、端口号、ID 等内容,以此来向其他 Sentinel 宣告自己的存在。与此同时Sentinel会通过订阅连接接收其他 Sentinel 的“HELLO”信息,以此来发现监视同一个主服务器的其他 Sentinel 。

在这里插入图片描述

sentinel1 通过发送HELLO 信息来让sentinel2 和 sentinel3发现自己,其他两个sentinel 也会进行类似的操作。

  • 多个Sentienl之间的链接:

Sentinel 之间只会互相创建命令连接,用于进行通信。因为已经有主从服务器作为发送和接收 HELLO 信息的中介,所以 Sentinel之间不会创建订阅连接。

6.3 检测实例的状态

Sentinel 使用 PING 命令来检测实例的状态:如果实例在指定的时间内没有返回回复,或者返回错误的回复,那么该实例会被Sentinel 判断为下线。

在这里插入图片描述

    Redis 的 Sentinel 中关于下线(down)有两个不同的概念:
    
    主观下线(Subjectively Down,简称 SDOWN)指的是单个Sentinel 实例对服务器做出的下线判断。
 
    客观下线(Objectively Down,简称 ODOWN)指的是多个Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过SENTINEL is-master-down-by-addr 命令互相交流之后,得出的服务器下线判断。(一个 Sentinel 可以通过向另一个Sentinel 发送SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
        如果一个服务器没有在 master-down-after-milliseconds 选项所指定的时间内,对向它发送 PING 命令的 Sentinel 返回一个有效回复(valid reply),那么 Sentinel 就会将这个服务器标记为主观下线。

6.4 故障转移FAILOVER

一次故障转移操作由以下步骤组成:

  1. 发现主服务器已经进入客观下线状态。

  2. 基于Raft leader election 协议,进行投票选举

  3. 如果当选失败,那么在设定的故障迁移超时时间的两倍之后,重新尝试当选。如果当选成功,那么执行以下步骤。

  4. 选出一个从服务器,并将它升级为主服务器。

  5. 向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。

  6. 通过发布与订阅功能,将更新后的配置传播给所有其他 Sentinel,其他 Sentinel 对它们自己的配置进行更新。

  7. 向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。

  8. 当所有从服务器都已经开始复制新的主服务器时,leader Sentinel 终止这次故障迁移操作。

6.5 配置sentinel

  • 创建程序目录
cd /application
mkdir 26380
cp /usr/local/redis/src/redis-sentinel ./26380/
cd  26380
  • 编辑配置文件
vim sentinel.conf
port 26380
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6380 2
sentinel down-after-milliseconds mymaster 60000
sentinel config-epoch mymaster 0
  • 启动sentinel
./redis-sentinel ./sentinel.conf

配置文件说明

  • 指定监控master
sentinel monitor mymaster 127.0.0.1 6370 2 
# {2表示多少个sentinel同意}
# 安全信息
sentinel auth-pass mymaster root
# 超过15000毫秒后认为主机宕机
sentinel down-after-milliseconds mymaster 15000 
# 当主从切换多久后认为主从切换失败
sentinel failover-timeout mymaster 900000
# 这两个配置后面的数量主从机需要一样,epoch为master的版本
sentinel leader-epoch mymaster 1
sentinel config-epoch mymaster 1

6.6 Sentinel命令操作

命令描述
PING返回 PONG
SENTINEL masters列出所有被监视的主服务器
SENTINEL slaves
SENTINEL get-master-addr-by-name 返回给定名字的主服务器的 IP 地址和端口号。
SENTINEL reset 重置所有名字和给定模式 pattern 相匹配的主服务器
SENTINEL failover 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。

6.7 Sentinel发布与订阅信息

客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器:你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令,通过订阅给定的频道来获取相应的事件提醒。

一个频道能够接收和这个频道的名字相同的事件。比如说,名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。

通过执行 PSUBSCRIBE * 命令可以接收所有事件信息。

以下列出的是客户端可以通过订阅来获得的频道和信息的格式:

第一个英文单词是频道/事件的名字,其余的是数据的格式。 注意, 当格式中包含 instance details 字样时,
表示频道所返回的信息中包

含了以下用于识别目标实例的内容:

<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
@ 字符之后的内容用于指定主服务器, 这些内容是可选的, 它们仅在 @ 字符之前的内容指定的实例不是主
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值