`
mhtbbx
  • 浏览: 36530 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Redis高可用方案之Sentinel原理解析

阅读更多

转自: 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 2.8.9 sentinel集群实验

    Redis Sentinel是Redis数据库的一种高可用性解决方案,它主要用于监控、通知和自动故障转移。在本实验中,我们将探讨如何设置和操作一个Redis 2.8.9版本的Sentinel集群,该集群包括环境的搭建、实验步骤以及相关截图...

    Redis中Sentinel高可用解决方案.docx

    1. **高可用性**:通过自动化的故障检测和转移,确保 Redis 服务的高度可用。 2. **可扩展性**:支持动态增加或减少 Sentinel 实例,适应不同规模的服务需求。 3. **易于管理**:Sentinel 系统的设计使得其易于管理...

    redis最新版5.0.2高可用集群搭建

    通过对 Redis 5.0.2 高可用集群的搭建流程进行详细解析,我们可以发现,相较于传统的哨兵模式,Redis 5.0.2 版本的集群模式不仅提供了更高的可用性和更强的性能,同时也简化了集群管理和维护的复杂度。这对于需要高...

    2、Redis sentinel原理及实现源码剖析-冯光普1

    Redis Sentinel是Redis的高可用性解决方案,它提供监控、故障检测、自动故障转移以及配置提供者的功能。在冯光普的演讲中,他详细解析了Sentinel的工作原理和源码实现。 Sentinel系统的核心特性包括: 1. **分布式...

    redis简单介绍及安装部署原理.doc

    Redis 是一款流行的、开源的键值存储系统,以其高性能、丰富的数据结构和高可用性而闻名。它是一款非关系型数据库(NoSQL),提供了多种编程语言的API,方便开发者集成到各种应用程序中。本文将深入探讨Redis的安装...

    redis视频以及代码

    6. 哨兵系统(Sentinel):提供高可用性解决方案,监控、故障检测和自动故障转移。 7. Lua脚本:Redis支持在服务器端执行Lua脚本,可以实现复杂的逻辑操作。 8. 聚合操作:如`KEYS`、`SCAN`用于查找匹配的键,`...

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    以上内容涵盖了Kafka、Redis和MySQL在处理高并发和高可用性时的关键知识点,包括它们的基本原理、操作方法、优化策略和常见问题的解决方案。学习和掌握这些知识点,有助于构建稳定、高效的数据处理系统。

    redis学习文档

    在多机特性方面,Redis Sentinel提供了高可用性解决方案,可以监控、故障检测和自动故障恢复主从架构的Redis实例。而Redis Cluster则是Redis的分布式解决方案,通过数据分区实现水平扩展,每个节点负责一部分数据,...

    redis深度历险,redis佳作。

    同时,也会涉及Redis在高可用性和扩展性方面的解决方案,如哨兵(Sentinel)系统和集群(Cluster)模式。 此外,书中还会涵盖Redis与其它技术的集成,如与Spring框架的整合,以及在大数据分析、实时计算中的应用。读者...

    全面掌握Redis技术栈:原理与实战指南

    内容概要:《Redis学习教程》不仅详尽地阐述了Redis的基础概念和技术特点,还深度解析了如集群部署、高可用性实现以及Spring框架集成等多个实战主题。涵盖Redis安装、常见使用场景、存储机制及性能调优、事务及管道...

    redis in action 源码

    近年来,Redis还引入了哨兵(Sentinel)系统和Cluster集群模式,提供了更高级的高可用性和分布式解决方案。 综上所述,深入研究《Redis in Action》的源码,不仅可以帮助我们理解Redis的工作原理,还能提升我们的...

    redis实例

    6. **Redis Cluster**:Redis Cluster是官方提供的分布式解决方案,支持数据分区,能够处理大规模数据并提供高可用性。 7. **性能优化**:包括调整内存策略、禁用不必要的日志、使用合适的数据类型、避免阻塞操作等...

    深入浅出Redis-redis哨兵集群.docx

    Redis Sentinel 是Redis的一个重要组件,它提供了高可用性(HA)解决方案,确保在主Redis服务器故障时能够自动切换到备份节点,从而保持服务的连续性。本文将深入探讨Redis Sentinel的集群原理、工作流程以及源码...

    Redis 中文文档

    复制是Redis保证高可用性和容错性的关键技术之一。通过主从复制,一个Redis实例(主节点)的数据可以被复制到多个从节点上。这样不仅可以提高系统的可用性,还可以通过读写分离来提升性能。 #### 七、通信协议...

    60道关于Redis的常见面试题.pdf

    - **定义**:Sentinel 是 Redis 的高可用方案之一,主要用于监控主服务器的状态、在主服务器故障时自动转移从服务器为新的主服务器,并通知客户端。 - **配置和使用**: - 在`sentinel.conf`配置文件中指定监控的主...

    spring-data-redis 1.7.6

    2. 支持Redis Sentinel和Cluster:1.7.6版本提供了对Redis Sentinel的完整支持,用于高可用性设置,同时也能与Redis Cluster配合,实现分布式存储和负载均衡。 3. Jedis升级:内部使用的Jedis客户端进行了更新,以...

    《Redis实战-PDF》

    此外,Redis还支持Sentinel哨兵系统和Cluster集群,进一步增强了高可用性。 Redis的使用场景广泛,例如: - 缓存:利用其高速读写能力,缓存热点数据,减轻数据库压力。 - 排行榜:通过有序集合实现动态更新和查询...

    redis源码以及哨片分片连接池实现

    哨兵系统(Sentinel)是Redis的一个高可用性解决方案,用于监控、故障检测和自动故障转移。通过哨兵,多个Redis实例可以形成一个集群,当主节点出现故障时,哨兵会自动将从节点提升为主节点,确保服务的连续性。在...

    redis所有知识点.zip

    本资料集包含了Redis的各种知识点,包括基础概念、高可用性、性能测试、事务处理、实战应用等多个方面。下面将详细阐述这些内容。 1. **Redis入门**:Redis作为NoSQL数据库的一员,它支持多种数据结构,如字符串、...

Global site tag (gtag.js) - Google Analytics