您的位置:首页 > 数据库 > Redis

redis sentinel 主从切换方案

2017-11-22 16:55 405 查看
redis2.8以上版本开始提供名为sentinel的主从切换方案:

主要用于:

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

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

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

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

一个健康的集群部署,至少需要三个Sentinel实例。

实验环境:

95 master

94 slave

93 slave

1.安装3.0+redis并配置主从

2.配置sentinel

Redis源码包中包含了一个sentinel.conf文件作为sentinel的配置文件,配置文件自带了关于各个配置项的解释。典型的配置项如下所示:

sentinel monitor mymaster 10.16.77.95 6379 2  #表示监控master redis, 地址为10.16.77.95 6379, 行尾的2表示当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。(sentinel集群中各个sentinel也有互相通信,通过gossip协议)

sentinel down-after-milliseconds mymaster 60000 #sentinel默认每秒会向master发送心跳来确认master是否存活,如果master在down-after-milliseconds时间内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会认为这个master已经不可用了(单位:毫秒)

sentinel parallel-syncs mymaster 1   #在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。

所有的配置都可以在运行时用命令SENTINEL SET command动态修改。

sentinel monitor mymaster 10.16.77.95 6379 2

sentinel auth-pass mymaster password

sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1

启动sentinel:

redis-sentinel ./sentinel.conf

port 26379   #端口

dir /tmp  #sentinel 运行时使用的临时目录

SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态;

SENTINEL slaves <master name> :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态;

SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个                     命令返回新的主服务器的 IP 地址和端口号;

SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清楚主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel ;

SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。

客户端可以通过SENTINEL get-master-addr-by-name <master name>获取当前的主服务器IP地址和端口号,以及SENTINEL slaves <master name>获取所有的Slaves信息

测试结果:

一个sentinel进程:

1.手动kill master redis

killall redis-server, 发送failover, 产生新的master, slave指向新的master

2.down掉的master恢复后,产生新的failover, down掉的master成为新master的slave

3.down掉master, 再down掉failover之后新产生的master, 此时剩下的slave成为master.

两个sentinel进程:

1.kill master redis
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: