redis 集群模式(redis cluster)介绍

时间:2024-04-13 22:55:14

目录

一    redis cluster 相关定义

1, redis cluster 是什么

2,redis 集群的组成

3,集群的作用

4,集群架构图

二     Redis集群的数据分片

1,哈希槽是什么

2,哈希槽如何排布

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

4,哈希槽架构图

三     实验模拟redis 集群

1,实验环境

2,清理实验环境

3, 模拟6个redis

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

5,分别启动所有的redis

6,启动redis 集群

7 ,  查看集群

8 ,   测试集群

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

四   总结

1,redis  主从复制

2, 哨兵

3,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”重定向响应。

    当您尝试新增一个键时,如果该键应归属于当前连接节点,或者redis-cli能够根据“MOVED”响应成功找到并重定向到正确的节点执行命令,那么操作不会报错。这是因为redis-cli在这种模式下具备处理集群内部键迁移和分布的能力。

  2. 使用 redis-cli -p 6001

    • 同样使用 -p 6001 指定连接到集群中监听6001端口的节点,但没有提供 -c 参数。

    在这种情况下,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集群是一个提供    高性能    高可用   数据分片    故障转移  特性的

分布式数据库模式