redis集群详细搭建方式(含原理、操作指令、异常处理)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 1.概述概念:redis集群是从3.0版本开始支持的一个功能,是redis的一种水平扩展方式,将全局数据分散的存储在N个结点上,从而来将请求流量打散到各个结点上,减轻单结点压力。实现原理:redis的集群进行数据散列时使用了一致性hash算法的思想,如果对一致性hash算法有兴趣可以参照博主的另一篇文章:

1.概述

概念:

redis集群是从3.0版本开始支持的一个功能,是redis的一种水平扩展方式,将全局数据分散的存储在N个结点上,从而来将请求流量打散到各个结点上,减轻单结点压力。

实现原理:

redis的集群进行数据散列时使用了一致性hash算法的思想,如果对一致性hash算法有兴趣可以参照博主的另一篇文章:

一致性hash算法__BugMan的博客-CSDN博客

具体实现上,1个redis集群包含16384个槽位(solt),编号0-16384,将这些槽位分段给各个结点。如果要操作某个数据,CRC16(key)%16384计算出槽位号,如果这个槽位号在当前结点就直接在当前结点进行处理,如果在其它结点就使用重定向的方式将操作指令重定向到对应结点上去。redis将CRC16算法当作自己的hash函数的实现来使用。


以下以一个查找操作为例:

853a7c73c59248e5a338320cda893691.png

为什么能分担流量压力:

如果一个操作请求从业务代码发送过来,因为存在请求重定向机制的存在,所以请求随便发给一个redis结点都行。

环境依赖:

需要注意的是,5.0版本以前需要ruby环境,5.0版本以后不需要。

2.配置

2.1.配置文件

redis的配置文件redis.conf中关于集群的主要配置项有三个:


cluster-enabled,是否开启集群模式。


cluster-config-file,本届点生成的集群文件的名称。


cluster-node-timeout,失联等待时间,主要用于主节点失联后其他从节点何时开始重新竞选出主节点。

8ce74293ceab4a10892fae1f5ce9dc8f.png

2.2.合体

配置好后的各个结点还是相互独立的,集群处于未启动状态,各个结点还没分配各自的插槽号,需要使用指令来启动集群,并完成各节点插槽号的分配。

在5.0版本之前要使用redis-trib.rb命令来进行合体,在5.0以后合体命令继承在了redis-cli中,redis-cli支持了多种参数,在启动集群时对集群做一些初始化的配置:

注意:有多结点时,多个IP:port间以空格分隔。

命令格式 命令说明
redis-cli --cluster create IP:port 以默认的方式启动集群
redis-cli --cluster create IP:port --cluster-replicas 1 创建带主从关系的集群,主从关系由redis随机创建

使用redis-cli启动集群时创建的主从关系是无法指定的,如有需要的话可以在创建后手动调整。

命令格式 命令说明
redis-cli --cluster add-node IP:port 新增主结点

redis-cli --cluster add-node IP:port --cluster-slave --cluster-master-id 主节点的id 新增从结点

以下使用默认的方式启动集群,启动时redis会主动询问自动生成的集群配置是否满意:

image.png

合体成功后可以使用cluster nodes来查看当前集群的信息:

4849a542c7ff425898e06372012e7065.png

2.3.进入cli

集群模式下最好使用./redis-cli -c来进入集群模式下的客户端,因为进入普通模式的客户端的话很多集群功能不支持,比如说无法重定向,一旦进行存放值的操作时运算出来的hash值不在当前节点所管的范围,会直接报错。

3.集群操作

3.1.查看集群信息

cluster nodes

如果存在主从关系,通过编号消息可以看出主从关系。

72909fc3ee8e4621b512893c8ff05bb5.png

3.2.集群中录入值

一致性hash算法会将数据尽量均匀分布到集群中各个节点上去,但是不同节点上的数据不能进行批量操作,如mget、mset等。

如果想要强制指明将多个值都存放在一个节点上,以实现可以批量操作,可以使用{}来定义组。同组的数据,会在运算的时候强制将hash值算到一个范围中去。

08c1c4b66ab7453bb0e5aa6d644741b0.png

3.3.查询集群中的值

4ea7ea8e080d43859558866f65205a53.png

4.故障处理

某组主从集体掉线以后,对应的这段插槽号集体失效,不会被均分到其他节点上。redis默认所有插槽都正常的时候才会对外正常提供服务,一旦出现上面的情况3,redis默认会无法正常进行工作,在配置文件中将cluster-require-full-coverage从注释中放出来,改为no即可修改默认机制。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
NoSQL Redis
Redis 执行 Lua保证原子性原理
Redis 执行 Lua 保证原子性原理
352 1
|
3月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
134 0
|
2月前
|
缓存 NoSQL Linux
redis的原理(三)
redis的原理(三)
redis的原理(三)
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
1月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
37 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
59 1
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
235 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
2月前
|
存储 缓存 NoSQL
redis的原理(四)
redis的原理(四)
|
2月前
|
存储 缓存 NoSQL
redis的原理(二)
redis的原理(二)
|
2月前
|
缓存 NoSQL 安全
Redis的原理(一)
Redis的原理(一)
下一篇
无影云桌面