Redis的分片集群搭建 (Cluster 集群模式-三主三从)

PS:分享记录一下学习Redis分片集群的过程吧。

一、分片集群的特点

  1. 横向扩展能力: 分片集群允许将数据分散到多个节点上,从而实现横向扩展。当数据量增长时,可以通过增加节点来扩展系统的容量和性能,而无需对单个节点进行升级。

  2. 提高性能和吞吐量: 将数据分散到多个节点上可以减轻单个节点的负载,从而提高整个系统的性能和吞吐量。每个节点只需要处理部分数据和请求,从而降低了单个节点的负载压力。

  3. 容错和高可用性: 分片集群通常具有复制和故障转移机制,能够在节点故障或网络分区时继续提供服务。通过复制数据到多个节点,可以确保即使部分节点失效,系统仍然可以继续运行。

  4. 灵活性和可伸缩性: 分片集群允许根据需求动态调整集群的大小和配置。可以根据数据量、负载情况和业务需求来添加或删除节点,以满足系统的需求变化。

  5. 负载均衡: 分片集群通常具有负载均衡机制,能够自动将请求分发到不同的节点上,从而平衡整个系统的负载,提高系统的稳定性和可用性。

 

二、分片集群的搭建

 2.1 搭建6台redis实例

   Redis的单节点详细搭建过程: Redis的单机部署(Linux环境)(一文搞定)-CSDN博客

    大致步骤: 

    1.下载Redis的安装包

    2.解压安装包并进行make编译

    3.对配置文件redis.conf 进行修改

    4.启动Redis服务,指定配置文件

    

 2.2 针对Redis的分片集群模式,进行配置文件修改

 

# 自行使用vi命令进入redis.conf 进行修改

# 设置 cluster-enabled yes  开启集群模式
cluster-enabled yes 


# 节点心跳失败的超时时间 默认15秒值 
cluster-node-time 5000


#文件不需要我们们创建,由redis自己维护
#自己创建前置目录,可以用端口号进行区分
cluster-config-file  /usr/local/redis-6.0.10/7001/nodes.conf 

 如果在同一台机器安装6台Redis实例的话  就自行创建6个目录,把配置文件复制过去, 进行修改.

 生产环境肯定是分多台机器安装Redis, 防止单机故障问题.

# 用redis-serve 命令启动redis服务 后面指定配置文件位置 

安装目录/src/redis-server 配置文件

 启动6个redis实例后,查看进程如下:

5268f5826f2b453a8a6a9a89f8cf58cc.png

 

2.3 创建分片集群 

在Redis5.0之前创建集群比较麻烦,依赖于redis-trib实现集群管理

所以需要安装 ruby 环境。

# 安装依赖
yum -y install zlib ruby rubygems
gem install redis
# 进去redis的src目录

cd redis/src

# 命令创建分片集群
./redis-trib.rb create --replicas 1 192.168.159.59:7001 192.168.159.59:7002 192.168.159.59:7003 192.168.159.59:8001 192.168.159.59:8002 192.168.159.59:8003

Redis 5.0以后 集群管理已经集成到了redis-cli中,格式如下:

#可以用这个命令查看命令参数帮助  ./redis-cli --cluster help


# 创建集群命令
./redis-cli -a 密码 --cluster create --replicas 1 192.168.159.59:7001 192.168.159.59:7002 192.168.159.59:7003 192.168.159.59:8001 192.168.159.59:8002 192.168.159.59:8003


# redis 设置了Redis的密码, 可以用-a 参数指定密码

4ae0c79a33d84530a2ec4b0022937c89.png

注意: 如果多台机器的redis实例,需要保证各台机器的redis端口和集群总线端口 (redis端口+10000)都开放。

执行上述命令后,需要确认插槽信息, 16384个插槽平分给三个主节点

190aaaf4006b46f58523d8e1f0988bfe.png

 输入yes 确定创建后

e55aea67d4584db2ae5a16009a9a9d1e.png

 

使用Redis-cli的客户端登录到7001端口上

./redis-cli -a 密码 -c -p 7001

# -c 表示加入集群

# -p 表示登录的端口

 登录上7001端口的实例上后,   使用cluster nodes 命令查看集群信息

 测试set key value 可以发现Redis会根据key计算出key所在的槽位,自动跳转到对应的实例上设置key

计算规则: 使用CRC算法对Key的有效部分 (有效部分可以用{}标记) 进行单字节哈希,然后对16384取余,得到具体的槽位值

3cee2db141dc40218a85e57d3bd66348.png

7bba03a0dcc145119bcd6d6c673a4137.png

分片集群的基本功能已经实现.

 

三、哈希插槽

  

28494e025dd349ccbdd63fd572987553.png

通过哈希插槽,Redis 分片集群可以将数据均匀地分布到多个节点上,实现数据的分片存储和负载均衡。具体来说,哈希插槽的作用包括: 

  1. 数据分片: 将所有的数据划分为固定数量的哈希插槽,每个插槽对应一个节点。这样可以确保数据被均匀地分布到整个集群的各个节点上,避免单个节点负载过重。

  2. 负载均衡: 当客户端请求某个键的数据时,Redis 首先根据键名计算出对应的哈希值,然后根据哈希值确定它所属的哈希插槽,最后根据哈希插槽找到对应的节点。这样可以确保相同的键总是被存储在相同的节点上,从而实现负载均衡。

  3. 故障转移: 当节点发生故障或者需要进行维护时,Redis 可以通过重新分配哈希插槽来实现数据的迁移和故障转移。这样可以确保数据在节点故障或者维护期间不会丢失,并且集群仍然可以继续提供服务。

 

四、故障转移

在分片集群中,故障转移是指在发生节点故障时,系统能够自动将受影响的服务从故障节点转移到其他健康节点上,以确保系统的可用性和持续性。以下是分片集群中故障转移的一般过程:

  1. 检测节点故障: 集群中的监控机制会定期检测节点的健康状态。如果一个节点停止响应或者出现其他故障,监控机制会立即发现并将其标记为故障节点。

  2. 选举新的主节点: 一旦发现主节点故障,集群中的其他节点会通过选举过程选择一个新的主节点来替代故障节点。通常,这个选举过程会选择具有最高优先级的从节点来升级为新的主节点。

  3. 数据同步和复制: 新的主节点会尝试从其他节点或者备份中恢复数据,并开始接受客户端的写入请求。同时,其他从节点会向新的主节点同步数据,以确保数据的一致性和可用性。

  4. 更新集群配置: 一旦新的主节点成功选举并且数据同步完成,集群会更新配置信息,将故障节点替换为新的主节点。客户端可以根据新的配置信息重新连接到集群。

  5. 恢复正常操作: 一旦故障转移完成,集群会恢复到正常运行状态,继续处理客户端的请求和数据操作。客户端可以继续向集群发送请求,而无需感知故障发生。

总的来说,分片集群的故障转移过程是自动化的,可以快速、有效地应对节点故障,并且能够保证系统的可用性和持续性。

 

五、自由伸缩

查询cluster 的帮助文档

fb1a74d733084f69a3b90073d77be7be.png

       大致步骤,新建一个Redis实例, 通过add-node 进行新增节点, 然后给这个新增的节点进行分配插槽数量, 然后Redis会把插槽迁移到这个新增的节点上。

Redis 分片集群具有自由伸缩的能力,可以根据需求动态地增加或减少节点,以适应不断变化的数据量和负载。这种自由伸缩的能力是通过以下几种方式实现的:

  1. 动态添加节点: 在 Redis 分片集群中,可以随时向集群中添加新的节点。新节点加入后,集群会自动进行哈希插槽的重新分配,将部分插槽分配给新节点,并将一部分数据从旧节点迁移到新节点上。这样可以实现数据的平滑迁移,而无需停机或者影响现有服务。

  2. 动态移除节点: 同样地,Redis 分片集群也支持随时从集群中移除节点。当一个节点需要下线时,集群会自动将该节点上的哈希插槽重新分配给其他节点,并将该节点上的数据迁移到其他节点上。这样可以确保数据不会丢失,并且集群仍然可以继续提供服务。

  3. 动态调整哈希插槽数量: Redis 分片集群中的哈希插槽数量通常是固定的,例如默认的 16384 个插槽。但是,如果需要调整集群的大小或者增加节点数量,也可以通过手动修改配置文件或者执行命令来动态调整哈希插槽的数量。调整哈希插槽数量后,集群会自动重新分配插槽和数据,以适应新的配置。

总的来说,Redis 分片集群具有灵活的自由伸缩能力,可以根据需求随时增加或减少节点数量,以满足不同规模和负载的应用需求。这种自由伸缩的能力使得 Redis 分片集群成为处理大规模数据和高并发请求的理想选择。

 

六、SpringBoot集成分片集群的Redis

和哨兵集群的步骤基本相似

Springboot集成Redis的哨兵集群(实现读写分离)-CSDN博客

c8b130e6c1a14ecea3670616fe5c2969.png

 

  • 28
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值