Docker 部署Redis Cluster集群

Redis集群简介

Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有 节点连接。其redis-cluster架构图如下:
在这里插入图片描述

其结构特点:

 1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
 2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
 3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
 4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
  5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

1.redis cluster节点分配

现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:
节点A覆盖0-5460;
节点B覆盖5461-10922;
节点C覆盖10923-16383.

获取数据:

  如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')%16384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据

2.Redis Cluster主从模式

      redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。  

使用Docker搭建redis-cluster集群

我们在单个服务器上搭建测试环境,当然也可在多个服务器上搭建,我们搭建3个redis-master节点,和3个redis-slave节点,所以总共需要准备6个redis
我们使用docker-compose来运行我们的6个redis
redis.yml文件内容如下:
在这里插入图片描述
在这里插入图片描述
编写完毕后启动所有容器
docker-compose -f redis.yml up -d
在这里插入图片描述
查看各个容器运行状态:
docker-compose -f redis.yml ps
在这里插入图片描述

1.创建集群

docker run --rm -it 10.30.5.120/docker/redis-trib create --replicas 1 192.168.189.141:7001 192.168.189.141:7002 192.168.189.141:7003 192.168.189.141:7004 192.168.189.141:7005 192.168.189.141:7006

redis-redis-trib是一个管理redis集群的工具
create 创建集群
–replicas 1 每个master有一个slave
在这里插入图片描述
在这里插入图片描述
看到所有的槽都已被覆盖说明集群已经创建成功

测试

2.任意登录一个节点

redis-cli -c -h 192.168.189.141-p 7001
-c是使用集群的方式连接redis
-h 是redis主机ip地址
-p 是redis主机的端口

3.查看集群的信息

在这里插入图片描述
在这里插入图片描述

4.查看集群各个节点的信息

在这里插入图片描述
测试存取一个键值,可以看到他将根据分配的槽,存储在指定主机上,我们可以直接获取数据,并且在获取的时候会直接路由到指定主机上操作:
在这里插入图片描述
你在退出后,无论登录集群的那个redis节点,都可以获取到数据
在这里插入图片描述

5.测试高可用

目前我们的name键值对的数据存在redis2上,我们停掉redis2,查看数据是否收影响
在这里插入图片描述
在这里插入图片描述
然后我们在登录到集群中查看各个节点的状态,
在这里插入图片描述
我们可以看到7002端口对应的redis2已经断开连接,处于fail状态,但是7005对应的redis5已经成为了新的master(可以根据覆盖的槽来辨别)
我们再来获取数据测试,数据是否正常读取和写入
在这里插入图片描述
我们发现数据依然可以正常从redis5上获取
至此redis-cluster集群搭建并测试完毕

原创文章 167 获赞 6 访问量 4123

猜你喜欢

转载自blog.csdn.net/xiaowoniuwzx/article/details/105744951