redis 集群模式(redis cluster)介绍

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
传统型负载均衡 CLB,每月750个小时 15LCU
简介: redis 集群模式(redis cluster)介绍

一    redis cluster 相关定义

1, redis cluster 是什么

redis 集群是 redis 群集三种模式之一。

redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,本文会讲解一下三种模式的工作方式,以及如何搭建cluster群集

●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。

缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

●哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。

缺陷:写操作无法负载均衡;存储能力受到单机的限制;哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

●集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

 

2,redis 集群的组成

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

3,集群的作用

(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。

集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。

Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

 

(2)高可用集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。

 

4,集群架构图

二     Redis集群的数据分片

1,哈希槽是什么

Redis集群引入了哈希槽的概念

Redis集群有16384个哈希槽(编号0-16383)

集群的每个节点负责一部分哈希槽

每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

 

2,哈希槽如何排布

#以3个节点组成的集群为例:

节点A包含0到5460号哈希槽

节点B包含5461到10922号哈希槽

节点C包含10923到16383号哈希槽

 

3,Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。

 

4,哈希槽架构图

三     实验模拟redis 集群

1,实验环境

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:

以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号:6004/6005/6006。

 

2,清理实验环境

关闭防火墙 和redis

3, 模拟6个redis

首先在 /etc/redis/redis-cluster/   创建6个对应的文件夹

将redis 的配置文件   和启动文件分别拷贝到这6个文件夹

(此处为for循环 )

拷贝redis 启动文件

4 ,修改6个 节点的配置文件

代码如下:

#开启群集功能:
#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1             #69行,注释掉bind 项,默认监听所有网卡
protected-mode no           #88行,修改,关闭保护模式
port 6001               #92行,修改,redis监听端口,
daemonize yes             #136行,开启守护进程,以独立进程启动
cluster-enabled yes           #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf   #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000        #846行,取消注释群集超时时间设置
appendonly yes              #700行,修改,开启AOF持久化

tips:为了方便可以改好6001的配置文件再贴到其他5个下面

再改92行  和 840行

5,分别启动所有的redis

查看是否启动

6,启动redis 集群

代码如下;

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

解释:

#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。

--replicas 1 表示每个主节点有1个从节点。

7 ,  查看集群

cluster slots 首先查看主从  及哈希槽

可以得知 6001主 从为 6005

               6002主  从为6006

               6003主   从为 6004

8 ,   测试集群

如下图  输入-c   你可以理解为对这个集群的操作

会根据算法   将这个ceshi  键放到6003 机器上

查看6003 的    从 6004   可以看到该键   其他主机看不到

9,重点理解集群  redis 在集群模式下 redis-cli -p 6001 -c 新增键 不会报错 但是 redis-cli -p 6001 新增键会报错

如图所示  不加-c  会报错   因为

在Redis集群模式下,分别使用以下两种方式执行新增键的操作:

  1. 使用 redis-cli -p 6001 -c
  • -p 6001 指定连接到集群中监听6001端口的某个节点。
  • -c 参数表示客户端应以集群模式工作,能够理解并自动处理Redis集群返回的“MOVED”重定向响应。
  1. 当您尝试新增一个键时,如果该键应归属于当前连接节点,或者redis-cli能够根据“MOVED”响应成功找到并重定向到正确的节点执行命令,那么操作不会报错。这是因为redis-cli在这种模式下具备处理集群内部键迁移和分布的能力。
  2. 使用 redis-cli -p 6001
  • 同样使用 -p 6001 指定连接到集群中监听6001端口的节点,但没有提供 -c 参数。
  1. 在这种情况下,redis-cli 认为它正在与单个独立的Redis实例交互,而不是一个集群。当您尝试新增一个键时,如果该键实际应由集群中的其他节点处理(即不属于当前连接节点负责的槽位),Redis集群会返回一个“MOVED”错误,指示您应该将命令发送到正确的节点。由于缺少 -c 参数,redis-cli 无法自动处理这个重定向响应,而是将“MOVED”错误直接显示给您,导致操作报错。

总结来说,使用 redis-cli -p 6001 -c 连接Redis集群并新增键通常不会报错,因为它能够应对键可能分布在不同节点的情况,自动处理重定向。而使用 redis-cli -p 6001(无 -c 参数)连接时,由于客户端不具备集群模式的支持,遇到需要重定向的情况会直接报告错误,无法完成新增键的操作。因此,在与Redis集群交互时,尤其是在进行写入操作时,务必使用 -c 参数以确保命令能够正确执行。

四   总结

1,redis  主从复制

redis主从复制是一种同步机制,

主服务器数据的修改会实时同步到从服务器上,实现数据备份和读写分离

2, 哨兵

1)监控

2)通知

3)自动故障转移

4)配置提供服务(客户端做为验证)

redis 哨兵是一个用于管理多个redis 服务器的系统它提供监控 通知自动故障转移和配置服务,来实现redis高可用性。

3,redis cluster

1)数据分片

2)故障转移

3)高性能

4)高可用

redis集群是一个提供    高性能    高可用   数据分片    故障转移  特性的

分布式数据库模式

相关文章
|
1月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
181 2
|
5月前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
192 5
|
8天前
|
存储 运维 NoSQL
Redis集群模式
Redis集群是一种分布式存储方案,旨在解决数据存储容量不足的问题。它通过将数据分片存储在多个节点上,实现数据的横向扩展。常见的分片算法包括哈希求余、一致性哈希和哈希槽分区。其中,Redis采用哈希槽分区算法,将数据均匀分配到16384个槽位中,每个分片负责一部分槽位。当节点故障时,集群通过故障检测和主从切换机制,确保服务的高可用性。集群还支持自动的数据迁移和负载均衡,保障系统稳定运行。
|
1月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
2月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
|
5月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
6月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
|
7月前
|
缓存 NoSQL Redis
Redis原理—3.复制、哨兵和集群
详细介绍了Redis的复制原理、哨兵原理和集群原理。
|
9月前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
366 5
|
11月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
102 2