`

谈谈Redis的集群

阅读更多

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集群的方案,烦请告知。

1
0
分享到:
评论

相关推荐

    redis-3.3.5.gem

    接下来,我们谈谈 Redis 集群。从 Redis 3.0 开始,官方引入了集群支持,以实现更高的可用性和扩展性。Redis 集群将数据分布在多个节点上,每个节点负责一部分键空间。当一个节点故障时,其他节点可以接管其职责,...

    Ecology&Emessage&Emobile集群+redis部署方案.zip

    4. **Emessage和Emobile的集成**:将Emessage服务和Emobile应用连接到Redis集群,设置合适的缓存策略。 5. **监控和维护**:设置日志监控,定期检查节点状态,及时发现并解决潜在问题。 综上所述,"Ecology&...

    redis-3.0.0.zip

    接下来,我们谈谈如何在Ruby环境中搭建Redis集群。首先,你需要安装Ruby编程环境,包括Ruby解释器和Ruby宝石管理工具`gem`。在命令行中,你可以使用`gem install redis-3.0.0.gem`来安装Redis的Ruby客户端库。这个...

    SpringBoot整合Redis实例

    3. 使用ClusterRedisConnectionFactory:在配置类中创建并返回ClusterRedisConnectionFactory对象,这将连接到Redis集群。 4. 创建RedisTemplate或StringRedisTemplate,使用ClusterRedisConnectionFactory,并配置...

    redis 可视化工具以及免安装redis 绿色版

    接下来,我们谈谈免安装的Redis绿色版。免安装版通常是指不需要通过传统安装过程即可使用的软件版本,它们通常被打包为一个自包含的文件夹,包含了所有运行所需依赖。对于Redis而言,这意味着你可以下载一个包含所有...

    redis-2.10.6.tar.gz

    1. 集群支持:Redis 2.8引入了集群支持,2.10.6版本进一步优化了集群的稳定性和性能。 2. 持久化:RDB(快照)和AOF(Append Only File)是Redis的两种持久化方式,2.10.6版本可能对它们进行了优化,以平衡数据安全...

    谈谈Redis分布式锁的正确实现方法

    3. **主从复制延迟**:在主从复制的Redis集群中,如果主节点故障,从节点升级为主节点,但数据尚未完全同步,可能会出现新主节点误发锁的情况。 为了解决这些问题,我们需要一个更为健壮的分布式锁实现。Redis 官方...

    搭建集群所需测试文件资源,免费下载!!!

    首先,我们来谈谈Redis。Redis是一个开源的、基于内存的数据结构存储系统,常作为数据库、缓存和消息中间件使用。它的特点是数据类型丰富(如字符串、哈希、列表、集合、有序集合等)、操作速度快、支持网络通信,...

    Redis面试题.pdf

    请谈谈Redis的并发控制机制。 - **单线程模型**:自然地避免了数据竞争问题。 - **命令排队**:所有的命令都会被排队处理,确保命令的顺序执行。 - **事务处理**:通过`WATCH`命令实现乐观锁定,避免并发修改冲突。...

    Linux 下redis5.0.0安装教程详解

    现在,我们来谈谈如何在Linux上配置Redis集群。Redis 5.0及以上版本支持集群模式,这允许你创建多个节点,实现数据冗余和负载均衡。以下是创建Redis集群的基本步骤: 1. 首先,确保所有节点都已安装并启动Redis...

    memcache与redis

    通过《谈谈Memcached与Redis》这篇文档,我们可以深入理解这两种技术的原理、优缺点,并根据具体需求选择合适的缓存解决方案。同时,文档可能还会涵盖安装配置、优化技巧以及实际案例分析,帮助读者更好地掌握和应用...

    Go-Dockssh从任何地何ssh进入任何容器借助redis进行密码存储

    这极大地简化了对容器的远程管理,特别是当你的集群中有很多容器时。 至于Redis,这是一个开源的、基于键值对的内存数据存储系统,通常用作数据库、缓存和消息代理。在Go-Dockssh的上下文中,Redis充当了密码管理器...

    轻松实现Apache_Tomcat集群和负载均衡

    可以使用分布式会话管理,例如Memcached或Redis来存储会话信息。 2. **修改Tomcat配置**:在每个Tomcat实例的server.xml文件中,添加`<Cluster>`元素,配置集群通信协议(如TCP)和序列化机制。 3. **复制应用程序...

    20200821.zip

    它不仅满足了基本的Redis数据库管理需求,如数据浏览、添加、修改、删除等,还可能包括高级功能,如性能监控、集群管理、数据导入导出等。免费的特性使得更多的开发者和企业能够无负担地使用,进一步推动了Redis在...

    blog:内在的平庸是失去卓越信念的那一刻。 去做就对了

    Ansible与Redis集群的搭建 阿里三面的一些问题 再谈谈面试官与面试观 什么是安全架构 【CA】Build a internal CA with Openssl and SoftHsm2 CNN笔记整理 locatunnel的使用回顾 同程面试题 如何进行管理 Talking ...

    谈谈微服务架构和开源.pdf

    而缓存层则常用Redis、Codis或Redis集群等技术,它们提供快速的数据访问,减轻数据库压力,并增强系统的响应速度和并发性能。 总体来说,微服务架构和开源技术的讨论涉及到多个层面,包括服务的设计、构建、部署、...

    谈谈业务中使用分布式的场景1

    当应用服务器集群化时,可以使用SSO(Single Sign-On)单点登录,通过加密cookie实现用户身份的跨服务器验证。此外,Tomcat和JBoss提供了session复制功能,但会导致性能下降和广播风暴。为避免这些问题,可以使用...

    蓝鲸CMDB安装包

    ZooKeeper是一个分布式的协调服务,它在分布式环境中提供了命名服务、配置管理、集群同步等多种功能。在蓝鲸CMDB中,ZooKeeper用于维护系统中的元数据和服务发现,确保各个组件之间的协同工作和数据一致性。 接下来...

    大型网站技术架构:核心原理与案例分析

    4. **数据库集群**:单一数据库难以应对大量并发读写操作,所以通常采用数据库集群,如主从复制、读写分离、分片等策略,以提升性能和可靠性。 5. **分布式存储**:如HDFS(Hadoop Distributed File System)和对象...

    互联网高频Java后端面试题20道(适合1~3年)V1.0.46.docx

    答案:Spring Cloud 是一套微服务开发工具集,提供了服务发现、配置中心、断路器、智能路由、微代理、控制总线、全局锁、分布式会话、集群状态管理等功能。它基于 Spring Boot 实现,简化了微服务的开发和部署。...

Global site tag (gtag.js) - Google Analytics