前言
本文主要讨论Redis集群相关技术及新发展,关于Redis运维等内容,以后另开主题讨论。
本文重点推荐Codis——豌豆荚开源的Redis分布式中间件(该项目于4个月前在GitHub开源,目前star已超过2100)。其和Twemproxy相比,有诸多激动人心的新特性,并支持从Twemproxy无缝迁移至Codis。
好吧我们正式开始。
1. Redis常见集群技术
长期以来,Redis本身仅支持单实例,内存一般最多10~20GB。这无法支撑大型线上业务系统的需求。而且也造成资源的利用率过低——毕竟现在服务器内存动辄100~200GB。
为解决单机承载能力不足的问题,各大互联网企业纷纷出手,“自助式”地实现了集群机制。在这些非官方集群解决方案中,物理上把数据“分片”(sharding)存储在多个Redis实例,一般情况下,每一“片”是一个Redis实例。
包括官方近期推出的Redis Cluster,Redis集群有三种实现机制,分别介绍如下,希望对大家选型有所帮助。
1.1 客户端分片
这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行分布式访问。这样的好处是,不依赖于第三方分布式中间件,实现方法和代码都自己掌控,可随时调整,不用担心踩到坑。
这实际上是一种静态分片技术。Redis实例的增减,都得手工调整分片程序。基于此分片机制的开源产品,现在仍不多见。
这种分片机制的性能比代理式更好(少了一个中间分发环节)。但缺点是升级麻烦,对研发人员的个人依赖性强——需要有较强的程序开发能力做后盾。如果主力程序员离职,可能新的负责人,会选择重写一遍。
所以,这种方式下,可运维性较差。出现故障,定位和解决都得研发和运维配合着解决,故障时间变长。
这种方案,难以进行标准化运维,不太适合中小公司(除非有足够的DevOPS)。
1.2 代理分片
这种方案,将分片工作交给专门的代理程序来做。代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。
这种机制下,一般会选用第三方代理程序(而不是自己研发),因为后端有多个Redis实例,所以这类程序又称为分布式中间件。
这样的好处是,业务程序不用关心后端Redis实例,运维起来也方便。虽然会因此带来些性能损耗,但对于Redis这种内存读写型应用,相对而言是能容忍的。
这是我们推荐的集群实现方案。像基于该机制的开源产品Twemproxy,便是其中代表之一,应用非常广泛。
1.3 Redis Cluster
在这种机制下,没有中心节点(和代理模式的重要不同之处)。所以,一切开心和不开心的事情,都将基于此而展开。
Redis Cluster将所有Key映射到16384个Slot中,集群中每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。客户端可以向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。
Redis Cluster的成员管理(节点名称、IP、端口、状态、角色)等,都通过节点之间两两通讯,定期交换并更新。
由此可见,这是一种非常“重”的方案。已经不是Redis单实例的“简单、可依赖”了。可能这也是延期多年之后,才近期发布的原因之一。
这令人想起一段历史。因为Memcache不支持持久化,所以有人写了一个Membase,后来改名叫Couchbase,说是支持Auto Rebalance,好几年了,至今都没多少家公司在使用。
这是个令人忧心忡忡的方案。为解决仲裁等集群管理的问题,Oracle RAC还会使用存储设备的一块空间。而Redis Cluster,是一种完全的去中心化……
本方案目前不推荐使用,从了解的情况来看,线上业务的实际应用也并不多见。
2. Twemproxy及不足之处
Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。
这个方案顺理成章地解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。
我想很多人都应该感谢Twemproxy,这么些年来,应用范围最广、稳定性最高、最久经考验的分布式中间件,应该就是它了。只是,他还有诸多不方便之处。
Twemproxy最大的痛点在于,无法平滑地扩容/缩容。
这样导致运维同学非常痛苦:业务量突增,需增加Redis服务器;业务量萎缩,需要减少Redis服务器。但对Twemproxy而言,基本上都很难操作(那是一种锥心的、纠结的痛……)。
或者说,Twemproxy更加像服务器端静态sharding。有时为了规避业务量突增导致的扩容需求,甚至被迫新开一个基于Twemproxy的Redis集群。
Twemproxy另一个痛点是,运维不友好,甚至没有控制面板。
Codis刚好击中Twemproxy的这两大痛点,并且提供诸多其他令人激赏的特性。
相关推荐
1. **基于代理的高性能Redis集群**:这表明Codis采用代理模式来分发和管理Redis实例间的请求,通过代理服务器,可以实现对多个Redis节点的透明访问,同时提高系统的扩展性和可用性。 2. **高性能Redis集群解决方案*...
codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.13 开发, 加入了 slot 的支持...
包括官方近期推出的RedisCluster,Redis集群有三种实现机制,分别介绍如下,希望对大家选型有所帮助。这种方案将分片工作放在业务程序端,程序代码根据预先设置的路由规则,直接对多个Redis实例进行
Github上给的架构图如下:几个关键组件说明:它实际就是个Redis的服务端,基于redis-server做了二次开发,增加额外的数据结构以便支持slot的相
Redis 集群方案是为了应对单实例Redis在处理大规模数据时面临的存储瓶颈,尤其是在像新浪微博这样的大型应用中,单实例无法满足超过TB级...无论采用何种方案,确保数据一致性、高可用性和扩展性是设计Redis集群的关键。
通过Codis,你可以将多个Redis实例组合成一个逻辑上的集群,实现数据的自动分片、故障转移以及平滑扩容。 **Redis基础知识** Redis是一个开源的内存数据存储系统,它支持多种数据结构,如字符串、哈希、列表、集合...
Redis Cluster是Redis官方提供的分布式集群解决方案,它允许用户在多个节点之间分发...通过详细的步骤和包含的所有组件,用户可以在离线环境中顺利构建起一个高可用的Redis集群,从而实现高效、稳定的数据存储和处理。
本文将详细介绍几种常见的Redis集群方案,包括客户端分片、Twemproxy、Codis以及Redis 3.0集群。 #### 一、客户端分片 **概念**: 客户端分片是一种将分片逻辑置于客户端实现的策略。该方案通过客户端预先定义好的...
在深入探讨Redis专场中Codis集群演化与Redis异步迁移的内容之前,首先需要对Codis和Redis这...通过理解这些内容,我们可以更全面地把握当前分布式缓存技术的最新发展动态,以及在实践中如何选择和应用适合的集群技术。
1. Redis-Cluster:官方推荐的原生集群方案,具有良好的数据一致性,但管理复杂度较高,需要手动处理槽迁移和节点故障。 2. Twemproxy:轻量级代理,用于分发请求,不提供数据持久化和故障转移功能,适合对一致性...
1. Codis:Codis 是一个基于 Redis 的集群解决方案,能够提供高可用性和高性能的服务。 2. Redis Cluster:Redis Cluster 是 Redis 官方提供的集群解决方案,能够提供高可用性和高性能的服务。 Redis 源码分析 ...
**Go-Codis:高性能Redis集群的Go语言实现** Go-Codis是一个使用Go语言编写的高性能、基于代理的Redis集群解决方案。它旨在提供一种灵活且可扩展的方式,以处理大规模的数据存储和检索需求,特别是在那些对数据一致...
Redis 集群是指通过多个 Redis 实例来实现横向扩展的技术。它可以提高 Redis 的可用性和负载均衡能力。但是,官方集群方案在实际应用中存在一些问题。 ##### 1. 官方集群方案的优缺点 - **优点**: - 支持数据分片...
安装redis集群管理器 mkdir /var/log/codis -pv cd /workspace/Go/src/github....
Codis到Redis Cluster的迁移工具支持将已经在Codis集群中的数据平滑迁移到Redis Cluster,无需停机,保证业务的连续性。同样,它也支持从Redis迁移到Codis,以及在Redis实例之间进行迁移,这些功能使得数据管理更具...
**CODIS集群安装包及文档详解** ...通过以上步骤和注意事项,你可以成功搭建和管理一个CODIS分布式Redis集群。CODIS提供的强大扩展性和易用性,使其成为大型互联网应用的首选分布式缓存解决方案。
Codis3.1集群搭建需要规划服务器的IP地址和角色,安装Go语言环境,安装Codis,启动Codis Server、Codis Manager、Codis Proxy和Codis FE,搭建Zookeeper集群。整个搭建过程需要逐步完成,每步骤都需要严格按照要求...
么时候适合使用? Redis 集群方案适合在以下场景使用: 1. 数据分片:如果数据量过...Redis 集群方案如 Codis、Redis Cluster 和自定义实现等,可以解决数据分片、高可用性等问题,适用于大规模、高并发的应用场景。