高可用之redis主从failover

redis在2.4+即提供了Sentinel模式。

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

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

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

Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 RedisSentinel 。

现给出redis哨兵模式最小集配置

1台master 1台slave 以及2台Sentinel

java

需要确保所有配置文件均可读写,哨兵模式需要rewrite对应的配置文件。

配置文件应当除了端口号其余均保持一致。

在启动哨兵模式之前需要先启动master(防止出现sentinel找不到master)

执行命令

java

此时master的端口为6380

java

执行命令

redis-cli -p 6380 DEBUG sleep 300

可以使得master fail.此时需要哨兵将会自动切换slave为master

java

可以看到此时6379已经被提升为master

而哨兵也会重写配置文件持久化配置。

java

使用jedis做哨兵配置也比较简单

java

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180226A1ETGQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券