Redis集群三主三从如何保证数据一致性 redis集群为什么要三主三从

一.redis集群简述
在之前的文章中,使用docker完成了redis一主二从三哨兵的设置,但有出现一个新的问题。
哨兵模式中如果主从中master宕机了,是通过哨兵来选举出新的master,在这个选举切换主从的过程,整个redis服务是不可用的。而且哨兵模式中只有一个主节点对外提供服务,因此没法支持更高的并发。而且当个主节点的内存设置也不宜过大。否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

redis集群是由一系列的主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要 sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,客户端通过CRC16算法对key进行hash得到一个值,来判断该key存储在哪个主从服务上面,因此就算是某一个主从整个宕机,redis集群也是部分可用的。方便水平扩展,可以根据业务规模可以随时加减配置。据官方文档称可以线性扩展到上万个节点(但是官方推荐不超过1000个节点)。redis集群的性能和高可用性均优于哨兵模式。

二.docker实操
1.拉取 Redis 镜像
docker pull redis


2.修改redis.conf配置文件


cluster-enabled yes               #   开启集群模式
cluster-config-file nodes-6379.conf   #集群配置信息存放文件名,每一个节点需要有个配置文件,需要6份,每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个问及那是由reids自己维护。如果需要重新创建集群,那么需要将这个文件删掉。
cluster-node-timeout 5000          #节点离线时间限制,到达此值时发起某个主从重新选举master
requirepass 123456          # 设置本机密码
masterauth 123456           # 设置访问别的机器的密码
appendonly yes                 # 开启aof

复制6份,将文件中的端口号改掉

3.创建6个Redis容器
在上面redis-start.sh中添加如下命令(这种方式启动时候特别便捷,后续会改成使用docker-compose.yml文件的方式)

docker run -p 6381:6381 -p 16381:16381  --name redis-6381 -v /mydata/redis-cluster/redis-6381.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6381:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;        
docker run -p 6380:6380 -p 16380:16380 --name redis-6380 -v /mydata/redis-cluster/redis-6380.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6380:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;        
docker run -p 6379:6379 -p 16379:16379 --name redis-6379 -v /mydata/redis-cluster/redis-6379.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6379:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;
docker run -p 6382:6382 -p 16382:16382 --name redis-6382 -v /mydata/redis-cluster/redis-6382.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6382:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;        
docker run -p 6383:6383 -p 16383:16383 --name redis-6383 -v /mydata/redis-cluster/redis-6383.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6383:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;        
docker run -p 6384:6384 -p 16384:16384 --name redis-6384 -v /mydata/redis-cluster/redis-6384.conf:/etc/redis/redis.conf -v /mydata/redis-cluster/data6384:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes;


在/mydata/redis-cluster目录下执行sh redis-start.sh命令

启动后使用 docker ps -a查看

为了方便调试,可以在编写一个 redis-stop.sh脚本,使用sh redis-stop.sh命令进行批量关闭docker容器

docker stop redis-6379;
docker rm redis-6379;
docker stop redis-6380;
docker rm redis-6380;
docker stop redis-6381;
docker rm redis-6381;
docker stop redis-6382;
docker rm redis-6382;
docker stop redis-6383;
docker rm redis-6383;
docker stop redis-6384;
docker rm redis-6384;


4.组建 Redis 集群
进入任何一个容器

docker exec -it redis-6379 /bin/bash
1.
执行组件集群的命令:

redis-cli -c --cluster create 47.94.93.93:6379 47.94.93.93:6380 47.94.93.93:6381 47.94.93.93:6382 47.94.93.93:6383 47.94.93.93:6384 --cluster-replicas 1 -a 123456
1.
执行命令截图如下:

5.创建成功后,通过 cluster nodes 查看一下集群节点信息:


6.SpringBoot集成Redis集群
spring:
  redis:
    password: 123456
    cluster:
      nodes: 47.94.93.93:6379,47.94.93.93:6380,47.94.93.93:6381,47.94.93.93:6382,47.94.93.93:6383,47.94.93.93:6384


三.自己搭建redis集群中所遇到的问题
1.当我启动6个容器后,进入redis-6379容器中,进行集群部署时报错


这个是因为在复制redis.conf文件时粗心,未将文件中的配置port端口号和启动命令中的端口号写一致。

2.修改号第一个问题后,紧接着又出现第二个问题,卡在这个页面不动了


原因是因为 redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,例如redis端口为6379,则集群总线端口为16379,所有服务器的点需要开通redis的客户端连接端口和集群总线端口,当然,如果有安全组,也要放开这些端口。

具体修改:

在启动命令中添加 -p 16379:16379 然后重新启动即可

3.关于Redis集群搭建
创建集群的命令中,这个参数 --cluster-replicas 1,参数后面的数字表示的是主从比例,比如这里的 1 表示的是主从比例是 1:1,也就是 1 个主节点对应1个从节点,现有 6 个实例,所以主从分配就是 3 个 master 主节点,3 个 slave 从节点。

主节点最少3个,3个才能保证集群的健壮性。

如果 --cluster-replicas 2 呢?那么主从比例就是 1:2,也就是 1 个主节点对于应 2 个从节点。即:3(master) + 6(slave) = 9个 Redis 实例。

如果不足 9个 Redis 实例,但是参数指定为 2 会怎么样?

提示已经很清楚了,Redis集群至少需要3个主节点。那么从节点就需要有6个,所以最后说:至少需要9个节点。

本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
-----------------------------------
Redis集群三主三从如何保证数据一致性 redis集群为什么要三主三从
https://blog.51cto.com/u_16099257/7118210

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 20.04 Redis 6.2三主三集群是一种分布式架构的Redis数据存储方案。在这种架构中,有三个主节点和三个从节点组成一个集群,实现了高可用性和负载均衡。 在Ubuntu 20.04上搭建Redis 6.2三主三集群可以按照以下步骤进行: 1. 首先,确保在每个节点上安装了Redis 6.2,并将其配置为允许远程访问。 2. 在主节点上编辑Redis配置文件,设置节点的端口号、IP地址、密码等信息。将从节点配置为复制主节点。 3. 在每个节点的命令行终端上启动Redis服务。 4. 在每个节点上执行`slaveof 主节点IP地址 主节点端口号`命令,将从节点连接到主节点。 5. 在主节点上执行`CLUSTER MEET 从节点IP地址 从节点端口号`命令,将从节点添加到主节点集群中。 6. 执行`CLUSTER REPLICATE 主节点ID`命令,将从节点设置为主节点的从节点。 7. 重复步骤4-6,将剩余的主节点和从节点都添加到集群中,确保集群的完整性。 8. 执行`CLUSTER INFO`命令,查看集群的状态和节点信息。 通过以上步骤,就可以在Ubuntu 20.04上搭建Redis 6.2三主三集群。这种集群架构能够提供高可用性和负载均衡,当主节点出现故障时,从节点可以自动接替主节点的功能,保证系统的可用性。同时,通过将数据进行分布存储,集群能够提供更高的读写性能。 值得注意的是,在集群中添加或删除节点时,需要进行相应的配置更改和数据迁移,以确保集群的稳定和一致性。因此,在进行任何更改之前,务必备份重要的数据,并了解Redis集群的运维和管理知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值