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

关于redis集群方案分析

 
阅读更多

最近在研究redis集群方案,看到知乎上有个朋友写的观点很好,就先收过来了。

为什么集群?

通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢?
首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,scale up不是一个好办法,我们需要scale out横向可伸缩扩展,这需要由多台主机协同提供服务,即分布式多个Redis实例协同运行。
其次,目前硬件资源成本降低,多核CPU,几十G内存的主机很普遍,对于主进程是单线程工作的Redis,只运行一个实例就显得有些浪费。同时,管理一个巨大内存不如管理相对较小的内存高效。因此,实际使用中,通常一台机器上同时跑多个Redis实例。

方案

1.Redis官方集群方案 Redis Cluster

Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。Redis Cluster中,Sharding采用slot(槽)的概念,一共分成16384个槽,这有点儿类似前面讲的pre sharding思路。对于每个进入Redis的键值对,根据key进行散列,分配到这16384个slot中的某一个中。使用的hash算法也比较简单,就是CRC16后16384取模。Redis集群中的每个node(节点)负责分摊这16384个slot中的一部分,也就是说,每个slot都对应一个node负责处理。当动态添加或减少node节点时,需要将16384个槽做个再分配,槽中的键值也要迁移。当然,这一过程,在目前实现中,还处于半自动状态,需要人工介入。Redis集群,要保证16384个槽对应的node都正常工作,如果某个node发生故障,那它负责的slots也就失效,整个集群将不能工作。为了增加集群的可访问性,官方推荐的方案是将node配置成主从结构,即一个master主节点,挂n个slave从节点。这时,如果主节点失效,Redis Cluster会根据选举算法从slave节点中选择一个上升为主节点,整个集群继续对外提供服务。这非常类似前篇文章提到的Redis Sharding场景下服务器节点通过Sentinel监控架构成主从结构,只是Redis Cluster本身提供了故障转移容错的能力。
Redis Cluster的新节点识别能力、故障判断及故障转移能力是通过集群中的每个node都在和其它nodes进行通信,这被称为集群总线(cluster bus)。它们使用特殊的端口号,即对外服务端口号加10000。例如如果某个node的端口号是6379,那么它与其它nodes通信的端口号是16379。nodes之间的通信采用特殊的二进制协议。
对客户端来说,整个cluster被看做是一个整体,客户端可以连接任意一个node进行操作,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node,这有点儿像浏览器页面的302 redirect跳转。
Redis Cluster是Redis 3.0以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。

2.Redis Sharding集群

Redis 3正式推出了官方集群技术,解决了多Redis实例协同服务问题。Redis Cluster可以说是服务端Sharding分片技术的体现,即将键值按照一定算法合理分配到各个实例分片上,同时各个实例节点协调沟通,共同对外承担一致服务。
多Redis实例服务,比单Redis实例要复杂的多,这涉及到定位、协同、容错、扩容等技术难题。这里,我们介绍一种轻量级的客户端Redis Sharding技术。
Redis Sharding可以说是Redis Cluster出来之前,业界普遍使用的多Redis实例集群方法。其主要思想是采用哈希算法将Redis数据的key进行散列,通过hash函数,特定的key会映射到特定的Redis节点上。这样,客户端就知道该向哪个Redis节点操作数据。Sharding架构如图:
http://www.2cto.com/kf/201603/495416.html

分享到:
评论

相关推荐

    Redis集群性能测试分析

    本次实验的目的主要是搭建Redis Cluster和TwemProxy Redis两种集群,分别对其进行性能测试,测试出集群性能的拐点,找出性能的瓶颈有哪些,并对两套集群进行比较,以便于在不同业务场景下择优选择。

    windowsredis集群搭建

    在Windows环境下搭建Redis集群虽然相比Linux环境复杂一些,但遵循以上步骤,配合相应的调试工具和日志分析,可以顺利完成。记得在生产环境中,要考虑到安全策略、性能优化以及持久化策略等因素,确保集群稳定可靠。

    redis集群主流架构方案分析.doc

    Redis 集群架构方案分析 Redis 作为一款高性能的键值存储系统,在处理大量热点数据的缓存场景中表现出色。随着数据量的增长,单个 Redis 实例的存储能力可能无法满足需求,这时就需要引入集群方案来实现动态扩展和...

    Redis集群监控软件,方便部署,全方位监控

    Redis是一款高性能的键值数据库,常用于数据缓存、消息队列等场景。在大型分布式系统中,为了保证高可用性和可扩展性,通常会采用Redis...因此,对于任何使用Redis集群的企业或项目,都应当重视并配备相应的监控方案。

    5、分布式缓存Redis集群安装

    Redis集群可以提供高可用性和高性能的数据存储解决方案,适合大规模数据存储和高并发读取场景。同时,Redis集群也可以提供数据的安全性和灾难恢复功能。 Redis集群的应用场景 Redis集群可以应用于各种需要高性能和...

    redis集群搭建步骤.docx

    Redis 集群是 Redis 的一种高可用性解决方案,可以实现高可用性和扩展性。Redis 集群由多个 Redis 节点组成,每个节点都是一个独立的 Redis 实例。这些节点之间可以相互通信,实现数据的复制和故障转移。 1.1.1 ...

    Redis-5.0.0集群配置

    到了5.0.0版本,Redis引入了一种类似Kafka的消息队列功能,这为实时数据分析、日志处理等场景提供了新的解决方案。 本文档旨在介绍如何配置Redis 5.0.0集群,并且强调从5.0.0版本开始,`redis-trib.rb`工具的部分...

    redis集群主流架构方案分析.docx

    Redis 集群主流架构方案分析 本文对 Redis 集群的架构方案进行了分析和比较,涵盖了客户端分片、Twemproxy、Redis Cluster 和 Proxy Redis Cluster 等四种主流的架构方案。每种方案都有其优点和缺点,适用于不同的...

    Redis集群Windows解压版6节点.zip

    这个“Redis集群Windows解压版6节点.zip”文件是一个预先配置好的Redis集群解决方案,特别适合开发者在Windows环境下快速搭建测试环境或进行开发调试。 首先,Redis集群的基本概念是将数据分布到多个节点上,每个...

    liunx下redis3.0.0集群负载均衡文档完整部署带所有安装包(redis集群)

    以下是关于Redis集群及其在Linux下部署的详细知识点: 1. **Redis集群原理**: - Redis集群通过分片(Sharding)将数据分散到多个节点上,每个节点负责一部分数据,实现数据的水平扩展。 - 集群中的每个节点都有...

    Redis持久化以及集群部署

    除了官方提供的集群方案外,还有一些第三方工具可以用于 Redis 的集群部署,例如 Twemproxy 和 Codis。 - **Twemproxy**: - 优点:配置简单,支持多种数据库; - 缺点:不支持动态扩容,运维相对麻烦; - **...

    redis 离线集群redis5.0以上版本

    在Redis 5.0以上版本中,特别是5.0.2这个Linux版本,引入了一些重要的变化和改进,这对于搭建和管理Redis集群至关重要。 1. **Redis Cluster支持**: Redis 5.0引入了官方的集群解决方案——Redis Cluster,它允许...

    Redis集群下过期key监听的实现代码

    Redis集群是Redis的一种高可用性解决方案,它通过将数据分布在不同的Redis节点上,并提供一定机制保证数据的复制和高可用性。集群通过分片(Sharding)的方式将数据分散存储在多个节点上,每个节点保存一部分数据,...

    Redis集群的安装、高可用测试、扩展测试---带源码

    Redis是一款高性能的键值存储系统,常用于数据库、缓存和消息中间件等场景。它支持丰富的数据结构,如字符串、...在实践中不断优化配置和测试方案,才能确保Redis集群在面对各种复杂场景时依然能够稳定、高效地运行。

    redis集群搭建(一主一从一哨兵)

    Redis 集群是一种分布式解决方案,将数据分散存储在多个节点上,以提高处理能力并提供容错机制。每个节点负责一部分键空间,当某个节点失效时,其上的数据可以通过从节点接管或哨兵系统自动恢复。 2. **一主一从...

    Go-Codis是用Go编写基于代理的高性能Redis集群解决方案

    总结,Go-Codis是利用Go语言构建的高性能Redis集群方案,它提供了高效的并发处理能力、动态缩放以及对Redis特性的全面支持。通过学习和使用Go-Codis,开发者可以更好地理解和应用分布式键值存储系统,以满足大规模、...

    nginx+tomcat+redis+mysq集群部署方案.docx

    本方案将详细阐述如何利用Nginx、Tomcat、Redis和MySQL进行集群部署。 **第1章 集群** 1.1 什么是集群 集群是一种计算机系统架构,由多台独立的计算机组成,通过网络连接并协同工作,对外表现为单一的系统。集群...

    redis集群,在集群运行时段时间出现master 丢失

    最后,为了避免类似问题的发生,推荐实施监控和告警机制,对Redis集群的健康状态进行实时监控,以便在问题发生时能够快速定位并解决问题,减少服务中断的时间。同时,定期备份数据和测试灾难恢复计划也是保持高可用...

    Redis集群演化的心路历程.pdf

    Redis集群技术自2.x时代发展到3.0时代,展现了其在性能、功能以及运维等方面的显著进步。在整个发展过程中,它对于企业级应用尤其是在大数据平台中的应用,提供了关键的KV存储解决方案。 在基于Redis 2.x的KV存储...

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

    #### 一、Redis集群方案比较 Redis 是一种高性能的键值存储系统,在多种场景中被广泛应用于缓存、消息队列以及实时分析等领域。随着应用规模的增长,单一的 Redis 实例往往难以满足高并发和大数据量的需求,因此...

Global site tag (gtag.js) - Google Analytics