redis集群方案有哪些

作者&投稿:中叔砖 (若有异议请与网页底部的电邮联系)
~

Redis数据量日益增大,而且使用的公司越来越多,不仅用于做缓存,同时趋向于存储这块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片技术,解决单实例内存增大带来的一系列问题。
本篇文章简单介绍五种方案:
官方cluster方案
twemproxy代理方案
哨兵模式
codis
客户端分片
官方cluser方案
从redis 3.0版本开始支持redis-cluster集群,redis-cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他节点连接。redis-cluster是一种服务端分片技术。
redis-cluster架构图
redis-cluster特点:
每个节点都和n-1个节点通信,这被称为集群总线(cluster bus)。它们使用特殊的端口号,即对外服务端口号加10000。所以要维护好这个集群的每个节点信息,不然会导致整个集群不可用,其内部采用特殊的二进制协议优化传输速度和带宽。
redis-cluster把所有的物理节点映射到[0,16383]slot(槽)上,cluster负责维护node--slot--value。
集群预分好16384个桶,当需要在redis集群中插入数据时,根据CRC16(KEY) mod 16384的值,决定将一个key放到哪个桶中。
客户端与redis节点直连,不需要连接集群所有的节点,连接集群中任何一个可用节点即可。
redis-trib.rb脚本(rub语言)为集群的管理工具,比如自动添加节点,规划槽位,迁移数据等一系列操作。
节点的fail是通过集群中超过半数的节点检测失效时才生效。
整个cluster被看做是一个整体,客户端可连接任意一个节点进行操作,当客户端操作的key没有分配在该节点上时,redis会返回转向指令,指向正确的节点。
为了增加集群的可访问性,官方推荐的方案是将node配置成主从结构,即一个master主节点,挂n个slave从节点。如果主节点失效,redis cluster会根据选举算法从slave节点中选择一个上升为master节点,整个集群继续对外提供服务。
twemproxy代理方案
twemproxy代理架构图:
Redis代理中间件twemproxy是一种利用中间件做分片的技术。twemproxy处于客户端和服务器的中间,将客户端发来的请求,进行一定的处理后(sharding),再转发给后端真正的redis服务器。也就是说,客户端不直接访问redis服务器,而是通过twemproxy代理中间件间接访问。降低了客户端直连后端服务器的连接数量,并且支持服务器集群水平扩展。
twemproxy中间件的内部处理是无状态的,它本身可以很轻松地集群,这样可以避免单点压力或故障。
twemproxy又称nutcracker,起源于推特系统中redis、memcached集群的轻量级代理。
Github源码地址(https://github.com/twitter/twemproxy)
从上面架构图看到twemproxy是一个单点,很容易对其造成很大的压力,所以通常会结合keepalived来实现twemproy的高可用。这时,通常只有一台twemproxy在工作,另外一台处于备机,当一台挂掉以后,vip自动漂移,备机接替工作。关于keepalived的用法可自行网上查阅资料。
哨兵模式
Sentinel哨兵
Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务器下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
例如:
在Server1掉线后:
升级Server2为新的主服务器:
Sentinel的工作方式
每个Sentinel以每秒钟一次的频率向它所知的Master、Slave以及其他Sentinel实例发送一个PING命令。
如果一个实例距离最后一次有效回复PING命令的时间超过down-after-milliseconds选项所指定的值,则这个实例会被Sentinel标记为主观下线。
如果一个Master被标记为主观下线,则正在监视这个Master的所有Sentinel要以每秒一次的频率确认Master的确进入了主观下线状态。
当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线。
在一般情况下,每个Sentinel会以每10秒一次的频率向它所知的所有Master、Slave发送INFO命令。
当Master被Sentinel标记为客观下线时,Sentinel向下线的Master的所有Slave发送INFO命令的频率会从10秒一次改为每秒一次。
若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会被移除。若Master重新向Sentinel的PING命令返回有效值,Master的主观下线状态就会被移除。
codis
codis是一个分布式的Redis解决方案,由豌豆荚开源,对于上层的应用来说,连接codis proxy和连接原生的redis server没什么明显的区别,上层应用可以像使用单机的redis一样使用,codis底层会处理请求的转发,不停机的数据迁移等工作,所有后边的事情,对于前面的客户端来说是透明的,可以简单的认为后边连接的是一个内存无限大的redis服务。
客户端分片
分区的逻辑在客户端实现,由客户端自己选择请求到哪个节点。方案可参考一致性哈希,这种方案通常适用于用户对客户端的行为有完全控制能力的场景。
总结:没有最好的方案,只有最合适的方案。
更多Redis相关技术文章,请访问Redis教程栏目进行学习!


redis集群 可以用scan吗
可以,不过要拆成单节点scan,只scan master节点,过滤slever

redis 集群时jedis该怎么配置
简单说一下,除了一些公司自主开发的集群外。常用的一般有三种:使用redis-trib.rb,这个是安装redis时就自带的一种集群,采用了服务端分片的方式。Jedis使用JedisCluster类来访问。使用Jedis带的客户端分片ShardedJedisPool类。使用代理进行分片twemproxy,连接代理可以使用Jedis类(单链接)和JedisPool类(多...

SpringBoot下集成Redis Cluster集群实践
SpringBoot集成Redis Cluster集群实践本文将指导你如何在SpringBoot环境中实现对Redis Cluster的连接和操作,特别是针对3主3从架构,Redis版本为7.0的集群环境。从Spring Boot 2.X版本开始,官方转向使用Lettuce作为Redis客户端,它具备对MOVED和ASK重定向的处理能力,这对于集群环境尤为重要。在SpringBoot的...

什么是redis集群
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。Redis 集群的数据分片Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:节点 A ...

Redis - 集群Hash槽分配
同样删除一个节点也是类似,移动完成后就可以删除这个节点了。Redis的Hash槽分配不是 一致性Hash ,一致性Hash是成一个hash环,当节点加入或者失效的时候,在环上顺时针找到对应节点。而Redis集群属于手动分配 线性Hash槽 ,需要手动指定,并且尽量做到各个节点solt平均分配。 而至于为什么Redis没有采用...

构建容器化的 Redis 集群服务代理
Redis,作为一款流行的Key-Value存储系统,因其内存存储和多种数据结构支持而备受青睐。为了应对大规模、高可用的Redis集群需求,AWS提供了ElastiCache for Redis和MemoryDB of Redis两种解决方案。ElastiCache提供亚毫秒级延迟的内存存储,无需运维管理,支持集群和非集群模式,确保高可用性。MemoryDB则专为...

Redis分布式缓存搭建
直接运行命令: .\/redis-server \/usr\/redis-6.0.3\/redis.conf & redis.conf 配置文件里 bind 0.0.0.0 设置外部访问, requirepass xxxx 设置密码。 redis高可用方案有两种: 常用搭建方案为1主1从或1主2从+3哨兵监控主节点, 以及3主3从6节点集群。 (1)sentinel哨兵 \/usr\/redis-6.0.3\/src\/redis-sentinel ...

一般Redis集群搭建采用几台服务器?
一般来说都是两台以上才可以搭建redis集群的。

Redis-Cluster
是一种去中心化的集群架构 Redis Cluster 的性能与单节点部署是同级别的。 多主节点、负载均衡、读写分离 Redis Cluster 支持标准的 主从复制配置来保障高可用和高可靠。 failover (故障转移) Redis Cluster 也实现了一个类似 Raft 的共识方式,来保障整个集群的可用性。向 Redis Cluster 中...

「故障演练」 Redis Cluster集群,当master宕机,主从切换
Redis Cluster 集群已经完成了切换。但是 Spring Boot 客户端 没有动态感知到 Redis Cluster 的最新集群信息 原因分析:SpringBoot 2.X 版本, Redis默认的连接池采用 Lettuce 当Redis 集群节点发生变化后,Letture默认是不会刷新节点拓扑 解决方案:将 Letture 二方包仲裁掉 然后,引入 ...

伊通满族自治县13677718216: 目前成熟的Redis集群方案,有哪些 -
况婵植入: Redis-Sentinel,master挂了可以用slave顶上,备用master再挂了,仍然能自动用slave顶上,就是有个问题,master的地址一致在变的说,客户端会很困惑的.twemproxy对redis性能影响有些大了,接近20%~~~

伊通满族自治县13677718216: redis 集群时jedis该怎么配置 -
况婵植入: 简单说一下,除了一些公司自主开发的集群外.常用的一般有三种:1. 使用redis-trib.rb,这个是安装redis时就自带的一种集群,采用了服务端分片的方式.Jedis使用JedisCluster类来访问.2. 使用Jedis带的客户端分片ShardedJedisPool类.3. ...

伊通满族自治县13677718216: 如何部署高可用的Redis集群架构 -
况婵植入: 1、准备redis镜像Redis官方已经提供了Redis 3.2和3.3的镜像,都可以用来作为Redis集群的镜像,3.2是稳定版本.目前官方推出了alpine版本的Redis镜像,alpine镜像的优势是体积小.此次分享是采用官方的redis:3.2-alpine的镜像来做集群.2、准备初始化脚本的执行环境redis官方提供了一个ruby的脚本redis-trib.rb,这个脚本可以用来初始化集群、resharding集群、rebalance集群等.

伊通满族自治县13677718216: 常见的redis集群方案有哪些优缺点 -
况婵植入: 在大部分的情况下StackExchange.Redis 会自动的帮我们配置很多选项. 比如 服务器类型,版本, 超时时间 , 主从服务器等.. 尽管如此,有时候我们需要在服务器上面排除一些命令, 这种情况下有必要提供更多信息!

伊通满族自治县13677718216: redis怎么实现分布式 -
况婵植入: 为什么集群?通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构...

伊通满族自治县13677718216: SpringBoot集成Redis来实现缓存技术方案有哪些 -
况婵植入: 首先可以在多台服务器装memcached,启动时分别指定容量和端口 访问时采用集群方式访问,只需要spring配置文件里面配置即可 value可以放任何对象,包括集合 每个键值的生命周期可以在放入时独立设置 类库可以用spymemcached 数据更新方式可以

伊通满族自治县13677718216: [话题讨论]如何用好Redis -
况婵植入: 发了半个小时居然没有人回复么.如何用好redis.我对redis的使用也只是刚接触,提不出什么好的见解,但是一直有一些困惑.提三个问题,看看能不能引出高人的思路,楼主不介意吧.目前大型集群基本都使用了proxy方案,比较出名的就是...

伊通满族自治县13677718216: 如何使用 redis 集群来实现分布式储存 -
况婵植入: 一 : redis cluster 介绍篇1:redis cluster 的现状目前 redis 支持的 cluster 特性 ( 已亲测 ): 1): 节点自动发现2):slave->master 选举 , 集群容错3):Hot resharding: 在线分片4): 进群管理 :cluster xxx 5): 基于配置 (nodes-port.conf...

伊通满族自治县13677718216: 利用sentinel和cluster创建Redis集群的区别 -
况婵植入: sentinel是解决HA问题的,cluster是解决sharding问题的,经常一起用 再说一下两者的原理:1. 功能 Sentinel实现如下功能:(1)monitoring——Redis实例是否正常运行.(2)notification——通知application错误信息.(3)failover——某个master...

伊通满族自治县13677718216: jedissentinelpool和jedispool的区别 -
况婵植入: 区别是:ShardedJedis是基于一致性哈希算法实现的分布式Redis集群客户端;ShardedJedis的设计分为以下几块:对象池设计:Pool,ShardedJedisPool,ShardedJedisFactory 面向用户的操作封装:BinaryShardedJedis,BinaryShardedJedis 一...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网