docker搭建redis三主三从集群的实现步骤

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享
免费资源网 – https://freexyz.cn/

目录一 准备redis镜像、容器1.1 下载redis6.0.81.2 准备6台服务器配置文件1.3 创建6台redis容器二 创建主从集群关系2.1 进入任意一台redis容器2.3 查看集群状态三 主从容错切换迁移案例3.1 数据读写存储3.2 容错切换迁移四 主从扩容4.1 新建6387、6388两个节点 新建后启动 查看是否8节点4.2 进入6387容器实例内部4.3 将新增的6387节点(空槽号)作为master节点加入原集群4.5 检查集群情况第1次4.6 重新分派槽号4.7 检查集群情况第2次4.8 为主节点6387分配从节点63884.9 第三次查看集群情况五 主从缩容案例5.1 检查集群情况并获得6388的节点ID5.2 将6388删除(从集群中将4号从节点6388删除)5.3 将6387的槽号清空,重新分配,本例将清出来的槽号都给63815.4 检查集群情况第二次5.5 将6387删除5.6 检查集群情况第三次

一 准备redis镜像、容器

1.1 下载redis6.0.8

docker pull redis:6.0.8

1.2 准备6台服务器配置文件

# redis出场配置放在文章最后
mkdir -p /usr/local/repository/redis/redis-node-1
# 配置参考文章最后
vim /usr/local/repository/redis/redis-node-1/redis.conf
cd /usr/local/repository/redis
# 依次复制其他5份
cp -r redis-node-1/ ./redis-node-2

1.3 创建6台redis容器

docker run -d –name redis-node-1 –net host –privileged=true -v /usr/local/repository/redis/redis-node-1/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-1/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6381

docker run -d –name redis-node-2 –net host –privileged=true -v /usr/local/repository/redis/redis-node-2/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-2/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6382

docker run -d –name redis-node-3 –net host –privileged=true -v /usr/local/repository/redis/redis-node-3/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-3/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6383

docker run -d –name redis-node-4 –net host –privileged=true -v /usr/local/repository/redis/redis-node-4/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-4/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6384

docker run -d –name redis-node-5 –net host –privileged=true -v /usr/local/repository/redis/redis-node-5/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-5/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6385

docker run -d –name redis-node-6 –net host –privileged=true -v /usr/local/repository/redis/redis-node-6/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-6/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6386

二 创建主从集群关系

2.1 进入任意一台redis容器

docker exec -it redis-node-1 /bin/bash

2.2 构建主从关系

redis-cli –cluster create 192.168.202.200:6381 192.168.202.200:6382 192.168.202.200:6383 192.168.202.200:6384 192.168.202.200:6385 192.168.202.200:6386 –cluster-replicas 1
# –cluster-replicas 1 表示为每个master创建一个slave节点

docker搭建redis三主三从集群的实现步骤插图

2.3 查看集群状态

# 进入任意redis容器,这里以6381为例
redis-cli -p 6381
cluster info
cluster nodes

docker搭建redis三主三从集群的实现步骤插图1

三 主从容错切换迁移案例

3.1 数据读写存储

3.1.1 进入6381新增两组key

# 重新进入6381,-c可以防止路由失效((error) MOVED 12706 192.168.202.200:6383),往其他服务器hash槽存数据时报错。
redis-cli -p 6381 -c
set k1 v1
set k2 v2

docker搭建redis三主三从集群的实现步骤插图2

3.1.2 切换到集群上的其他服务器,获取值

docker搭建redis三主三从集群的实现步骤插图3

3.1.3 查看集群信息

docker搭建redis三主三从集群的实现步骤插图4

3.2 容错切换迁移

3.2.1 主6381和从机切换

# 停止6381,机器,查看集群状态
docker stop redis-node-1
# 进入6382容器,查看集群状态
docker exec -it redis-node-2 bash

# 进入容器后先进入redis
redis-cli -p 6382 -c
# 查看集群信息
cluster nodes

docker搭建redis三主三从集群的实现步骤插图5

上图可以看出,当6381宕机后,6384由从机变为了主机。

3.2.2 重启6381

重启之后发现,6381还是从机,6384是主机。人走茶凉。要变回来只要把6384停了再启动即可。

docker搭建redis三主三从集群的实现步骤插图6

# 先启动6381,再重启6384,即可将6381变为主机器。这里不做测试。
docker stop redis-node-4
docker start redis-node-4

3.2.3 查看集群状态

redis-cli –cluster check 自己IP:6381

docker搭建redis三主三从集群的实现步骤插图7

四 主从扩容

4.1 新建6387、6388两个节点 新建后启动 查看是否8节点

# 到宿主机上,准备配置文件
cd /usr/local/repository/redis
# 参考上面6台机器,生成配置文件
# 启动6387及6388两个容器
docker run -d –name redis-node-7 –net host –privileged=true -v /usr/local/repository/redis/redis-node-7/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-7/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6387

docker run -d –name redis-node-8 –net host –privileged=true -v /usr/local/repository/redis/redis-node-8/redis.conf:/etc/redis/redis.conf -v /usr/local/repository/redis/redis-node-8/data:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6388

# 查看容器是否创建成功
docker ps

4.2 进入6387容器实例内部

docker exec -it redis-node-7 /bin/bash

4.3 将新增的6387节点(空槽号)作为master节点加入原集群

# 将新增的6387作为master节点加入集群
redis-cli –cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群

docker搭建redis三主三从集群的实现步骤插图8

4.5 检查集群情况第1次

redis-cli –cluster check 真实ip地址:6381
# 执行结果可以看出暂时没有槽号

docker搭建redis三主三从集群的实现步骤插图9

4.6 重新分派槽号

# 重新分派槽号
# 命令:redis-cli –cluster reshard IP地址:端口号
redis-cli –cluster reshard 192.168.202.200:6381
# 4096 下面的是接收hash槽的redis容器ID,这里是6387对应的id
# source node :从哪些原来的主机上分配资源下来,all表示全部master

docker搭建redis三主三从集群的实现步骤插图10

docker搭建redis三主三从集群的实现步骤插图11

4.7 检查集群情况第2次

redis-cli –cluster check 真实ip地址:6381

# 槽号分派说明
为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

docker搭建redis三主三从集群的实现步骤插图12

4.8 为主节点6387分配从节点6388

命令:redis-cli –cluster add-node ip:新slave端口 ip:新master端口 –cluster-slave –cluster-master-id 新主机节点ID

redis-cli –cluster add-node 192.168.202.200:6388 192.168.202.200:6387 –cluster-slave –cluster-master-id e4781f644d4a4e4d4b4d107157b9ba8144631451——-这个是6387的编号,按照自己实际情况

docker搭建redis三主三从集群的实现步骤插图13

4.9 第三次查看集群情况

redis-cli –cluster check 192.168.202.200:6382

docker搭建redis三主三从集群的实现步骤插图14

五 主从缩容案例

5.1 检查集群情况并获得6388的节点ID

redis-cli –cluster check 192.168.202.200:6382

5.2 将6388删除(从集群中将4号从节点6388删除)

# 命令:redis-cli –cluster del-node ip:从机端口 从机6388节点ID
redis-cli –cluster del-node 192.168.202.200:6388 6388节点redis容器ID

docker搭建redis三主三从集群的实现步骤插图15

5.3 将6387的槽号清空,重新分配,本例将清出来的槽号都给6381

redis-cli –cluster reshard 192.168.202.200:6381

docker搭建redis三主三从集群的实现步骤插图16

5.4 检查集群情况第二次

# 4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了
# 如果想平均分配的话可以多次分配,每次分配指定hash槽数
redis-cli –cluster check 192.168.202.200:6381

docker搭建redis三主三从集群的实现步骤插图17

5.5 将6387删除

# 命令:redis-cli –cluster del-node ip:端口 6387节点ID
redis-cli –cluster del-node 192.168.202.200:6387 ce1263dbe9e034e99fea8359f0177dde57ea6367

docker搭建redis三主三从集群的实现步骤插图18

5.6 检查集群情况第三次

# 又变回了三主三从,6384hash槽是8192
redis-cli –cluster check 192.168.202.200:6381

docker搭建redis三主三从集群的实现步骤插图19

附: redis出厂配置文件

# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k =


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容