转自: http://my.oschina.net/fifadxj/blog/614086 多谢分享
很多网站都使用Redis作为自己的缓存系统,网站要做到高可用,它使用的缓存系统自然也必须支持高可用,这里就介绍一下Redis的高可用方案Sentinel。
Sentinel是Redis官方提供的一种高可用方案(除了Sentinel,Redis Cluster是另一种方案),它可以自动监控Redis master/slave的运行状态,如果发现master无法访问了,就会启动failover把其中一台可以访问的slave切换为master,并且通过pub/sub事件通知Redis客户端新的master的ip地址。
支持Sentinel的Redis客户端(例如java得Jedis)会在连接Redis服务器的时候向Sentinel询问master的ip,并且会在收到master切换的pub/sub事件后自动重新连接到新的master。对调用Redis客户端的业务系统来说,这些都是完全透明的。
下图是redis sentinel的部署和运行机制
下图是master宕机后,failover的发起流程
现在我们来实战一下,我们的例子中有3台server,3个sentinel,1个master和2个slave。由于我们只有3台server,所以每个sentinel和一个master或者slave放在一个server上。采用的部署结构如下图所示
- 配置master(redis.conf):
requirepass 123456 #设置master的密码
masterauth 123456 #设置slave连接master进行同步时使用的密码(虽然当前是master不需要密码,但是当master挂了以后再重启以后,这个时候可能failover已经完成了,master会自动被降级为slave)
- 分别配置slave1和slave2(redis.conf):
slaveof 172.17.138.94 6379 #指定slave1和slave2的master
requirepass 123456 #设置slave的密码
masterauth 123456 #设置slave连接master进行同步时使用的密码
- 分别配置sentinel1,sentinel2,sentinel3(sentinel.conf):
sentinel monitor mymaster 172.17.138.94 6379 2 #指定sentinel监控的master(组id为mymaster,当前master ip为172.17.138.94,端口6379,最后的2指定quorum的值,表明如果有2个sentinels无法连接master,才认为master挂了),slave不用指定,sentinel会通过pub/sub机制自动发现所有slave
sentinel auth-pass mymaster 123456 #设置sentinel连接的master和slave的密码(只能设置一个密码,所以master和slaves的密码必须相同)
- 启动master和slave1,slave2:
分别ssh到master,slave1,slave2,运行redis-server redis.conf &
- 查看master-slave分布情况,redis-cli info Replication
master应该看到类似下图信息
slave1和slave2应该看到类似下图信息
- 启动sentinel1,sentinel2,sentinel3:
分别ssh到每个sentinel,运行redis-sentinel sentinel.conf &
- 通过sentinel查看master,slave的情况
分别ssh到每个sentinel,运行redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
将能看到当前的master的ip地址,redis客户端(jedis)就是通过这个命令来获知应该连接到哪个redis服务器的,如下图
- 现在我们来演示failover,我们先把master关了来模拟master宕机了
这时候查看sentinel的日志,当有2台(达到quorum)sentinel发现master无法访问后,sentinels进行投票,自动把master切换为slave2(172.17.138.92)
现在再询问sentinel当前master的地址,发现master已经变成了slave2(172.17.138.92)。
而且当挂掉的master重新启动后,它将被自动配置成新master的slave。
如果你这时查看redis.conf和sentinel.conf,你会发现它们的内容已经自动修改成172.17.138.92作为master相对应的配置了,也就是说sentinel的failover是永久性的,下次重启所有redis和sentinels的时候还是有效。
总结:sentinel是一种有效的高可用方案,不过如果你是通过切片(sharding/partition)的可扩展方式使用Redis的话,目前好像还没有成熟的sentinel和切片集成使用的方法。如果你需要同时拥有高可用和可扩展的Redis方案的话,不妨考虑一下Redis3新推出的Redis Cluster方案,或者第三方的Twemproxy,Codis
相关推荐
redis-sentinel 就像他的名字一样,他是一个哨兵,监控 master 状态,如果超过规定时间没有响应,则自动进行主从切换,期间会有一段时间(决定于具体的配置参数)redis集群无法提供服务 。原理类似 mysql 的 MHA。...
redis搭建sentinel高可用方法
docker-compose 形式部署 redis 1主2从3哨兵 redis 多节点高可用 redis 主从哨兵 redis 集群高可用 redis 哨兵 redis 高可用
redis+Keepalived实现Redis高可用性 主要包含两个文件: 1、安装文档 2、各种脚本文件
Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来带大家看看redis高可用集群如
搭建Redis高可用集群的哨兵模式(Redis-Sentinel)的实例配置,可以为 Redis 容灾+高可用 应用场景提供解决方案Demo
Redis 高可用架构最佳实践.ppt
该资源是本人在学习redis过程中积累总结的经验以分享给大家:redis-sentinel高可用一键配置工具就是一键帮你从下载->安装->配置 好 redis 高可用的服务环境,省去了很多弯路,节约了更多的时间花在自己项目的主要...
redis-sentinel 基于 phpredis 扩展的 redis-sentinel 客户端
该资源是本人在学习redis过程中积累总结的经验以分享给大家:redis-sentinel高可用一键配置工具就是一键帮你从下载->安装->配置 好 redis 高可用的服务环境,省去了很多弯路,节约了更多的时间花在自己项目的主要...
Redis高可用解决方案:哨兵(Sentinel)(csdn)————程序
Keepalived+redis高可用主从,本技术文档主要是Keepalived的配置,redis主从配置可以看我的文章https://blog.csdn.net/qq_41709494/article/details/116382183
zookeeper实现redis的高可用,包括监控心跳和切换,以及恢复等
redis高可用笔记
高可用Redis:主从复制、sentinel哨兵、漂移VIP故障转移
该资源是本人在学习redis过程中积累总结的经验以分享给大家:redis-sentinel高可用一键配置工具就是一键帮你从下载->安装->配置 好 redis 高可用的服务环境,省去了很多弯路,节约了更多的时间花在自己项目的主要...
Redis高可用性解决方案之哨兵与集群.docx
Redis高可用集群Redis Cluster搭建
keepalived+redis 高可用方案 集群环境搭建. 部分来自网上,部分自己的总结. 详细的记录了如何搭建keepalived+redis的环境
keepalived 配置redis高可用