1. 前言
在谈谈redis的哨兵机制这篇文中,我们知道Redis是使用哨兵机制来监控各个节点之间的状态。但是,在分布式的环境下,哨兵机制就不能很好地监控各个节点之前的状态。为了解决这个问题,Redis在3.0的版本推出了Redis Cluster,即redis集群。本篇就谈谈redis集群,主要介绍常用的几种Redis集群方案。
2. Redis集群方案
Redis Cluster集群模式通常具有高可用、可扩展性、分布式、容错等特性。Redis分布式方案一般有三种:客户端分区方案、代理分区方案、查询路由方案。
2.1 客户端分区方案
这种方案顾名思义,客户端就已经决定数据会被存储到哪个redis节点或者从哪个redis节点读取数据。其主要思想是采用哈希算法将Redis数据的key进行散列,通过hash函数,特定的key会映射到特定的Redis节点上。通过一个简单的示例图描述下这种方案,如下所示:
客户端分区方案的代表为Redis-Sharding,Redis-Sharding是Redis Cluster出来之前,业界普遍使用的Redis多实例集群方法。Java的Redis客户端驱动库Jedis,支持Redis-Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool。客户端分区方案有其自身的优点及缺点,如下表所示:
优点 | 不使用第三方中间件,分区逻辑可控,配置简单,节点之间无关联,容易线性扩展,灵活性强。 |
缺点 | 客户端无法动态增删服务节点,客户端需要自行维护分发逻辑,客户端之间无连接共享,会造成连接浪费。 |
2.2 代理分区方案
这种方案具体的做法是这样:客户端发送请求到一个代理组件(Proxy),代理解析客户端的数据,并将请求转发至正确的节点,最后将结果回复给客户端。如下图所示:
这种方案的优缺点如下表所示:
优点 | 简化客户端的分布式逻辑,客户端透明接入,切换成本低,代理的转发和存储分离。 |
缺点 | 多了一层代理层,加重了架构部署复杂度和性能损耗。 |
代理分区主流实现的有方案有Twemproxy和Codis。下面分别简单介绍下这两种方案:
2.2.1 Twemproxy
Twemproxy也叫nutcraker,是twitter开源的一个redis和memcache的中间代理服务器程序。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。Twemproxy存在单点故障问题,需要结合Lvs和Keepalived做高可用方案。
如下图所示:
客观地分析下Twemproxy这种方案,优势和不足如下表所示:
优点 | 应用范围广,稳定性较高,中间代理层高可用。 |
缺点 | 无法平滑地水平扩容/缩容,无可视化管理界面,运维不友好,出现故障,不能自动转移。 |
2.2.2 Codis
Codis是一个分布式Redis解决方案,对于上层应用来说,连接Codis-Proxy和直接连接原生的Redis-Server没有的区别。Codis底层会处理请求的转发,不停机的进行数据迁移等工作。Codis采用了无状态的代理层,对于客户端来说,一切都是透明的。虽然文字描述Codis不那么复杂,但其实具体的实现还是蛮复杂的,如下图所示:
这种方案的优势和劣势,如下表所示:
优点 | 实现了上层Proxy和底层Redis的高可用,数据分片和自动平衡,提供命令行接口和RESTful API,提供监控和管理界面,可以动态添加和删除Redis节点。 |
缺点 | 部署架构和配置复杂,不支持跨机房和多租户,不支持鉴权管理。 |
2.3 查询路由方案
这种方案怎么理解呢?简单地说,客户端随机地请求任意一个Redis实例,然后由Redis将请求转发给正确的Redis节点。Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个Redis节点转发到另一个Redis节点,而是在客户端的帮助下直接重定向(redirected)到正确的Redis节点。具体方案如下图所示:
这种方案的优缺点,如下表所示:
优点 | 无中心节点,数据按照槽存储分布在多个Redis实例上,可以平滑的进行节点扩容/缩容,支持高可用和自动故障转移,运维成本低。 |
缺点 | 严重依赖Redis-trib工具,缺乏监控管理,需要依赖Smart Client(维护连接,缓存路由表,MultiOp 和 Pipeline 支持)。Failover节点的检测过慢,不如中心节点ZooKeeper及时。Gossip消息具有一定开销。无法根据统计区分冷热数据。 |
3. 总结
上面三种关于Redis集群的方案,都是小弟平时在学习和积累的时候总结的。如果有小伙伴有更多的关于Redis集群的方案,烦请告知。
相关推荐
接下来,我们谈谈 Redis 集群。从 Redis 3.0 开始,官方引入了集群支持,以实现更高的可用性和扩展性。Redis 集群将数据分布在多个节点上,每个节点负责一部分键空间。当一个节点故障时,其他节点可以接管其职责,...
4. **Emessage和Emobile的集成**:将Emessage服务和Emobile应用连接到Redis集群,设置合适的缓存策略。 5. **监控和维护**:设置日志监控,定期检查节点状态,及时发现并解决潜在问题。 综上所述,"Ecology&...
接下来,我们谈谈如何在Ruby环境中搭建Redis集群。首先,你需要安装Ruby编程环境,包括Ruby解释器和Ruby宝石管理工具`gem`。在命令行中,你可以使用`gem install redis-3.0.0.gem`来安装Redis的Ruby客户端库。这个...
3. 使用ClusterRedisConnectionFactory:在配置类中创建并返回ClusterRedisConnectionFactory对象,这将连接到Redis集群。 4. 创建RedisTemplate或StringRedisTemplate,使用ClusterRedisConnectionFactory,并配置...
接下来,我们谈谈免安装的Redis绿色版。免安装版通常是指不需要通过传统安装过程即可使用的软件版本,它们通常被打包为一个自包含的文件夹,包含了所有运行所需依赖。对于Redis而言,这意味着你可以下载一个包含所有...
1. 集群支持:Redis 2.8引入了集群支持,2.10.6版本进一步优化了集群的稳定性和性能。 2. 持久化:RDB(快照)和AOF(Append Only File)是Redis的两种持久化方式,2.10.6版本可能对它们进行了优化,以平衡数据安全...
3. **主从复制延迟**:在主从复制的Redis集群中,如果主节点故障,从节点升级为主节点,但数据尚未完全同步,可能会出现新主节点误发锁的情况。 为了解决这些问题,我们需要一个更为健壮的分布式锁实现。Redis 官方...
首先,我们来谈谈Redis。Redis是一个开源的、基于内存的数据结构存储系统,常作为数据库、缓存和消息中间件使用。它的特点是数据类型丰富(如字符串、哈希、列表、集合、有序集合等)、操作速度快、支持网络通信,...
请谈谈Redis的并发控制机制。 - **单线程模型**:自然地避免了数据竞争问题。 - **命令排队**:所有的命令都会被排队处理,确保命令的顺序执行。 - **事务处理**:通过`WATCH`命令实现乐观锁定,避免并发修改冲突。...
现在,我们来谈谈如何在Linux上配置Redis集群。Redis 5.0及以上版本支持集群模式,这允许你创建多个节点,实现数据冗余和负载均衡。以下是创建Redis集群的基本步骤: 1. 首先,确保所有节点都已安装并启动Redis...
通过《谈谈Memcached与Redis》这篇文档,我们可以深入理解这两种技术的原理、优缺点,并根据具体需求选择合适的缓存解决方案。同时,文档可能还会涵盖安装配置、优化技巧以及实际案例分析,帮助读者更好地掌握和应用...
这极大地简化了对容器的远程管理,特别是当你的集群中有很多容器时。 至于Redis,这是一个开源的、基于键值对的内存数据存储系统,通常用作数据库、缓存和消息代理。在Go-Dockssh的上下文中,Redis充当了密码管理器...
可以使用分布式会话管理,例如Memcached或Redis来存储会话信息。 2. **修改Tomcat配置**:在每个Tomcat实例的server.xml文件中,添加`<Cluster>`元素,配置集群通信协议(如TCP)和序列化机制。 3. **复制应用程序...
它不仅满足了基本的Redis数据库管理需求,如数据浏览、添加、修改、删除等,还可能包括高级功能,如性能监控、集群管理、数据导入导出等。免费的特性使得更多的开发者和企业能够无负担地使用,进一步推动了Redis在...
Ansible与Redis集群的搭建 阿里三面的一些问题 再谈谈面试官与面试观 什么是安全架构 【CA】Build a internal CA with Openssl and SoftHsm2 CNN笔记整理 locatunnel的使用回顾 同程面试题 如何进行管理 Talking ...
而缓存层则常用Redis、Codis或Redis集群等技术,它们提供快速的数据访问,减轻数据库压力,并增强系统的响应速度和并发性能。 总体来说,微服务架构和开源技术的讨论涉及到多个层面,包括服务的设计、构建、部署、...
当应用服务器集群化时,可以使用SSO(Single Sign-On)单点登录,通过加密cookie实现用户身份的跨服务器验证。此外,Tomcat和JBoss提供了session复制功能,但会导致性能下降和广播风暴。为避免这些问题,可以使用...
ZooKeeper是一个分布式的协调服务,它在分布式环境中提供了命名服务、配置管理、集群同步等多种功能。在蓝鲸CMDB中,ZooKeeper用于维护系统中的元数据和服务发现,确保各个组件之间的协同工作和数据一致性。 接下来...
4. **数据库集群**:单一数据库难以应对大量并发读写操作,所以通常采用数据库集群,如主从复制、读写分离、分片等策略,以提升性能和可靠性。 5. **分布式存储**:如HDFS(Hadoop Distributed File System)和对象...
答案:Spring Cloud 是一套微服务开发工具集,提供了服务发现、配置中心、断路器、智能路由、微代理、控制总线、全局锁、分布式会话、集群状态管理等功能。它基于 Spring Boot 实现,简化了微服务的开发和部署。...