【Redis集群模式主节点集群(3实例)以及主从模式集群(6实例)部署实践学习】

Redis集群模式cluster部署实践学习

知识回顾:

通过对Redis中的String的命令做了充分的讲解以及实践学习
通过对Redis中String类型之Bit命令的详解以及Bit命令的实践进行了学习
通过对Redis中的Hash类型以及Hash中常用命令的实践学习
通过对Redis之List类型的详解&List类型中常用命令的实践的学习
通过对Redis之Set类型的详解&Set类型中常用命令的实践的学习
通过对Redis之ZSet类型的详解&ZSet类型中常用命令的实践的学习
通过对Redis中消息的发布和订阅以及命令的实践学习
通过对Redis中事务Multi命令及监控键值Watch命令的实践学习
通过对Redis持久化原理之快照版本RDB的学习
通过对Redis持久化原理之AOF(Append Only File)的学习
通过对Redis主从复制原理以及搭建一主俩从集群实践的学习
通过对Redis一主(master)二从(slave)复制及哨兵模式实践学习
接下来的学习任务:
接下来我们要学习的内容是:Redis集群模式cluster部署实践学习。

Redis中String类型内容请看这里呦:
【Redis之String类型的详解&String类型中常用命令的实践】
Redis中String类型是Bit命令内容请看这里呦:
【Redis中String类型之Bit命令的详解&Bit命令的实践】
Redis之Hash类型的详解&Hash类型中常用命令的实践请看这里呦:
【Redis之Hash类型的详解&Hash类型中常用命令的实践】
Redis之List类型的详解&List类型中常用命令的实践请看这里呦:
【Redis之List类型的详解&List类型中常用命令的实践】
Redis之Set类型的详解&Set类型中常用命令的实践请看这里呦:
【Redis之Set类型的详解&Set类型中常用命令的实践】
Redis之Zset类型的详解&Zset类型中常用命令的实践请看这里呦:
【Redis之ZSet类型的详解&ZSet类型中常用命令的实践】
Redis中消息的发布和订阅以及命令的实践请看这里呦:
【Redis中消息的发布和订阅】
Redis中事务Multi命令及监控键值Watch命令的实践请看这里呦:
【Redis中事务Multi命令及监控键值Watch命令】
Redis持久化原理之快照版本RDB的学习请看这里呦:
【Redis持久化原理之快照版本RDB】
Redis持久化原理之AOF(Append Only File)的学习请看这里呦:
【Redis持久化原理之AOF(Append Only File)】
Redis主从复制原理以及搭建一主俩从集群实践的学习请看这里呦:
【Redis主从复制原理以及搭建一主master俩从slave集群实践】
Redis一主(master)二从(slave)复制及哨兵模式实践学习请看这有呦:
【Redis一主(master)二从(slave)复制及哨兵模式实践学习】

搭建Redis主节点集群

1、在linux主机上创建相应的目录用于挂载
mkdir -p /mydata/redis_cluster/node1/data   #集群一
mkdir -p /mydata/redis_cluster/node2/data   #集群二
mkdir -p /mydata/redis_cluster/node3/data   #集群三

2、创建集群

创建集群一

 docker create --name redis-node1 -v /mydata/redis_cluster/node1/data/:/data -p 6382:6379 redis --cluster-enabled yes --cluster-config-file redis-node1.conf

启动集群一:

docker start redis-node1

在这里插入图片描述

创建集群二

 docker create --name redis-node2 -v /mydata/redis_cluster/node2/data/:/data -p 6383:6379 redis --cluster-enabled yes --cluster-config-file redis-node2.conf

启动集群二:

docker start redis-node2

在这里插入图片描述

创建集群三

 docker create --name redis-node3 -v /mydata/redis_cluster/node3/data/:/data -p 6384:6379 redis --cluster-enabled yes --cluster-config-file redis-node3.conf

启动集群三:

docker start redis-node3

在这里插入图片描述

3、查看集群信息
docker ps 

在这里插入图片描述

4.注意三个集群的IP和端口信息

1、IP信息

三个Redis集群在Docker容器中被重新分配了IP信息

1)先看redis-node1容器被分配的IP地址

docker inspect redis-node1

在这里插入图片描述

2)再看redis-node2容器被分配的IP地址

docker inspect redis-node2

在这里插入图片描述

3)再看redis-node3容器被分配的IP地址

docker inspect redis-node3

在这里插入图片描述

2、 端口信息
在做端口映射时,我们已经指明了端口映射的具体情况,通过查看上面的命令我们也可以看到具体的端口情况

redis-node1对外的端口是6382,但是在自己docker分配IP下的端口还是6379
redis-node2对外的端口是6383,但是在自己docker分配IP下的端口还是6379
redis-node3对外的端口是6384,但是在自己docker分配IP下的端口还是6379

4、集群搭建

执行组建集群命令(请根据自己的ip信息进行拼接)

[root@VM-4-9-centos ~]# docker exec -it redis-node1 redis-cli --cluster create 172.17.0.7:6379  172.17.0.8:6379  172.17.0.10:6379 --cluster-replicas 0
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: b0541541646c447640925ec94c5decd4a831e34b 172.17.0.7:6379
   slots:[0-5460] (5461 slots) master
M: eb1772430c567c2f7ea1820e333122d235d4d5fc 172.17.0.8:6379
   slots:[5461-10922] (5462 slots) master
M: 0e204c5bd09ad71bab137aea3c2723f3de5acd0d 172.17.0.10:6379
   slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 172.17.0.7:6379)
M: b0541541646c447640925ec94c5decd4a831e34b 172.17.0.7:6379
   slots:[0-5460] (5461 slots) master
M: 0e204c5bd09ad71bab137aea3c2723f3de5acd0d 172.17.0.10:6379
   slots:[10923-16383] (5461 slots) master
M: eb1772430c567c2f7ea1820e333122d235d4d5fc 172.17.0.8:6379
   slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@VM-4-9-centos ~]# 

在这里插入图片描述

5、测试集群

启动redis,要以redis-cli -c命令启动,-c代表启动集群的意思。

在集群一中set username psx

[root@VM-4-9-centos ~]# docker exec -it redis-node1 redis-cli -c
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set username psx
-> Redirected to slot [14315] located at 172.17.0.10:6379
OK
172.17.0.10:6379> 

在这里插入图片描述

在集群二中get username

[root@VM-4-9-centos ~]# docker exec -it redis-node2 redis-cli -c
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> get username
-> Redirected to slot [14315] located at 172.17.0.10:6379
"psx"
172.17.0.10:6379> 

在这里插入图片描述

在集群三中get username

[root@VM-4-9-centos ~]# docker exec -it redis-node3 redis-cli -c
127.0.0.1:6379> keys *
1) "username"
127.0.0.1:6379> get username
"psx"
127.0.0.1:6379> 

在这里插入图片描述

通过上面我们已经部署好了Redis集群,但是存在一些问题,我们来分析一下

这种集群有个问题,就是这些ip是在一个docker下的,所以只能在一台服务器才可以成功,所以我们需要使用Redis部署在不同ip地址下的方式来进行集群的搭建。这个问题我们后续补充解决。

解决方案:

解决方案是让Docker使用 host模式 的网络连接类型,Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了,尽管这种方式有安全隐患,但目前来说还没找到其他可行性模式。

通过上面我们搭建了Redis的主节点集群,但是无法体现集群中的主从关系,所以,接下来我们来搭建一下Redis的主从集群,安排!

搭建Redis主从节点集群(3主3从)

1.创建 6 个 Redis 容器

redis-node1:6382
redis-node2:6383
redis-node3:6384
redis-node4:6385
redis-node5:6386
redis-node6:6387

2.创建对应的要挂在的目录结构
mkdir -p /mydata/redis_cluster/node1/data   
mkdir -p /mydata/redis_cluster/node2/data   
mkdir -p /mydata/redis_cluster/node3/data  
mkdir -p /mydata/redis_cluster/node4/data   
mkdir -p /mydata/redis_cluster/node5/data   
mkdir -p /mydata/redis_cluster/node6/data  
3.创建容器的具体执行命令
# 启动节点1
docker create --name redis-node1 --net host -v /data/redis_cluster/node1/data:/data redis --cluster-enabled yes --cluster-config-file redis-node1.conf --port 6382

# 启动节点2
docker create --name redis-node2 --net host -v /data/redis_cluster/node2/data:/data redis --cluster-enabled yes --cluster-config-file redis-node2.conf --port 6383

# 启动节点3
docker create --name redis-node3 --net host -v /data/redis_cluster/node3/data:/data redis --cluster-enabled yes --cluster-config-file redis-node3.conf --port 6384

# 启动节点4
docker create --name redis-node4 --net host -v /data/redis_cluster/node4/data:/data redis --cluster-enabled yes --cluster-config-file redis-node4.conf --port 6385

# 启动节点5
docker create --name redis-node5 --net host -v /data/redis_cluster/node5/data:/data redis --cluster-enabled yes --cluster-config-file redis-node5.conf --port 6386

# 启动节点6
docker create --name redis-node6 --net host -v /data/redis_cluster/node6/data:/data redis --cluster-enabled yes --cluster-config-file redis-node6.conf --port 6387
4.查看启动中的集群

在这里插入图片描述

部分参数解释:
  • –cluster-enabled:是否启动集群,选值:yes 、no
  • –cluster-config-file 配置文件.conf :指定节点信息,自动生成
  • –cluster-node-timeout 毫秒值: 配置节点连接超时时间
  • –appendonly:是否开启持久化,选值:yes、no
5.组建 Redis 集群

进入任意一个 Redis 实例:

# 这里以 redis-node1 实例为例
docker exec -it redis-node1 /bin/bash

执行组件集群的命令:

# 这里以 redis-node1 实例为例
# 组建集群,x.x.x.x为当前物理机的ip地址
redis-cli --cluster create x.x.x.x:6382 x.x.x.x:6383 x.x.x.x:6384 x.x.x.x:6385 x.x.x.x:6386 x.x.x.x:6387 --cluster-replicas 1

成功启动,三主三从。
在这里插入图片描述

6.集群命令讲解
redis-cli --cluster create x.x.x.x:6382~6387 --cluster-replicas 1
最重要的就是这个参数 --cluster-replicas 1,参数后面的数字表示的是主从比例,比如这里的 1 表示的是主从比例是 1:1,什么概念呢?
也就是 1 个主节点对应几个从节点,现有 6 个实例,所以主从分配就是 3 个 master 主节点,3 个 slave 从节点。

如果 --cluster-replicas 2 呢?
那么主从比例就是 1:2,也就是 1 个主节点对于应 2 个从节点。
即:3(master) + 6(slave) = 9个 Redis 实例。
如果不足 9个 Redis 实例,但是参数指定为 2 会怎么样?

在这里插入图片描述

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

但是我想4个主节点,2个从节点,这总怎么实现呢?
四个节点按照之前的流程启动,参数设置为0--cluster-replicas 0,剩下的两个从节点需要我们手动添加。
添加节点的命令:
redis-cli --cluster add-node x.x.x.x:6383 x.x.x.x:6379  --cluster-slave --cluster-master-id 启动后的容器id

好了,到这里【Redis集群模式主节点集群(3实例)以及主从模式集群(6实例)部署实践学习】就学习完毕了,中间有一个小的知识点【docker下redis三个主节点是共享一个docker的ip地址的,只能在一台服务器才可以成功】后面我会专门写一篇文档解决它,敬请期待!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值