Redis集群简记

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis集群http://doc.redisfans.com/topic/cluster-tutorial.htmlredis 集群是为了多个节点之间数据的共享和集群高可用的保证。redis 集群不支持同时处理多个键的redis命令,由于集群需要在多个redis之间迁移数据,在高负载的情况下这些命令会降低redis的性能,并导致不可预知的问题。

Redis集群

http://doc.redisfans.com/topic/cluster-tutorial.html

redis 集群是为了多个节点之间数据的共享和集群高可用的保证。
redis 集群不支持同时处理多个键的redis命令,由于集群需要在多个redis之间迁移数据,在高负载的情况下这些命令会降低redis的性能,并导致不可预知的问题。

redis集群的好处

  • 将数据自动切分到多个不同的节点的能力。
  • 当集群中的某一部分不可用时,仍然可以处理命令请求的能力。

Redis 集群数据共享

  • redis 集群采用分片(sharding)而非一致性哈希(consistency hashing)来实现
  • 一个redis集群包含了 16384 个哈希槽(hash slot)
  • 使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽
  • 添加或删除节点都不会导致阻塞,因此也不会导致集群的不可用

添加或删除节点数据迁移:

1、添加节点,根据 CRC16(key) % 16384来从新计算节点数据分配并迁移相应节点数据。
2、删除节点,在节点数据迁移完毕后下线即可。

Redis 集群中的主从复制

  • Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。
  • 如果某个节点的 master 下线,则其 replica 会接管 master 的工作,使得集群继续可用。
  • 如果某个节点的 master 和所有 replica 都下线了,则会导致整个集群不可用。

Redis 集群的一致性保证(guarantee)

  • Redis 集群不保证数据的强一致性(strong consistency)
  • 在特定条件下, Redis 集群可能会丢失已经被执行过的写命令。
客户端->master:发送写命令
master->master:执行写命令
master->客户端:发送写成功命令
master->slave:发送复制命令(如果此时不可用,则会导致数据的不一致性\n如果等待slave复制完成,则会导致整个集群性能极低。)
  • Redis 集群另外一种可能会丢失命令的情况是, 集群出现网络分裂(network partition), 并且一个客户端与至少包括一个主节点在内的少数(minority)实例被孤立。

创建Redis集群的实例

最少选项的集群配置文件

port 端口
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

cluster-enabled 用于开启集群, cluster-conf-file 用于设定节点配置文件。

需要几个节点的集群,则根据最小配置分别创建几个存放配置文件的目录和配置文件并修改端口即可。

启动集群的每个节点: ./redis-server 配置文件所在位置

创建集群 redis-trib

创建新集群检查集群或者对集群进行重新分片reshared):

通过使用 Redis 集群命令行工具 redis-trib

如创建集群:

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
  • 给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
  • 选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
  • 之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。

检测和确认完成后,如果一切正常的话, redis-trib 将输出以下信息:

>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

对集群进行重新分片

重新分片并不会对正在运行的集群程序产生任何影响

$ ./redis-trib.rb reshard 127.0.0.1:7000

只需要指定集群中其中一个节点的地址, redis-trib 就会自动找到集群中的其他节点。接下来根据需要的提示和需要做相应的操作即可。

添加新节点到集群

  • 添加的新节点是一个主节点
  • 添加的新节点是一个从节点

1、第一步要做的总是添加一个空节点。

和上述创建节点实例一样:

port 端口
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

2、启动节点

../../redis-server redis.conf

3、将新节点添加到集群里

./redis-trib.rb addnode 新节点IP:新节点端口 原有集群节点IP:原有集群某个主节点端口
如:
./redis-trib.rb addnode 127.0.0.1:7006 127.0.0.1:7000

此时,新节点已经连上集群;成为了集群的一部分。但是和其他主节点相比, 新节点还有两点区别:

  • 新节点没有包含任何数据, 因为它没有包含任何哈希槽。
  • 尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点;因此在集群将某个从节点升级为新的主节点前, 这个新节点不会被选中。

4、使用redis-trib转移哈希槽数据到新节点

具体转移方式见前文。

在数据转移完毕后,新节点就会成为真正的主节点了。

5、如果是想让新增的节点成为从节点

在新节点中执行如下命令

redis 新增节点IP:新增节点端口> cluster replicate 新增节点所在主节点的ID
如:
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

移除一个节点

1:如果删除的节点是主节点

1) 要把节点中的哈希槽转移到其他节点中

./redis-trib.rb reshard 127.0.0.1:7000

2) 根据系统提示输入需要删除节点哈希槽的数量

3) 根据系统提示输入要接收这些哈希槽的节点的ID

4) 完成后,输入要移除的节点ID,并输入 done 命令

5) 最后删除节点

./redis-trib.rb del-node 需要删除节点的IP:端口 需要删除节点的IP:端口

如:
./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006

2:如果删除的节点是从节点

./redis-trib.rb del-node 127.0.0.1:7006 127.0.0.1:7006
相关实践学习
基于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
相关文章
|
15天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
216 0
|
23天前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
181 2
|
29天前
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
176 0
|
2月前
|
运维 NoSQL 算法
Redis-Cluster 与 Redis 集群的技术大比拼
Redis-Cluster 与 Redis 集群的技术大比拼
81 0
|
3月前
|
存储 NoSQL Redis
Redis+SpringBoot企业版集群实战------【华为云版】(上)
Redis+SpringBoot企业版集群实战------【华为云版】
64 0
|
23天前
|
NoSQL Java 测试技术
面试官:如何搭建Redis集群?
**Redis Cluster** 是从 Redis 3.0 开始引入的集群解决方案,它分散数据以减少对单个主节点的依赖,提升读写性能。16384 个槽位分配给节点,客户端通过槽位信息直接路由请求。集群是无代理、去中心化的,多数命令直接由节点处理,保持高性能。通过 `create-cluster` 工具快速搭建集群,但适用于测试环境。在生产环境,需手动配置文件,启动节点,然后使用 `redis-cli --cluster create` 分配槽位和从节点。集群动态添加删除节点、数据重新分片及故障转移涉及复杂操作,包括主从切换和槽位迁移。
31 0
面试官:如何搭建Redis集群?
|
27天前
|
存储 缓存 NoSQL
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)(一)
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)
293 0
|
1月前
|
NoSQL Redis Docker
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
使用Docker搭建一个“一主两从”的 Redis 集群(超详细步骤)
64 0
|
1月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
1月前
|
运维 负载均衡 NoSQL
【大厂面试官】知道Redis集群和Redis主从有什么区别吗
集群节点之间的故障检测和Redis主从中的哨兵检测很类似,都是通过PING消息来检测的。。。面试官抓抓脑袋,继续看你的简历…得想想考点你不懂的😰。
67 1

热门文章

最新文章