前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker搭建Redis3主3从集群并扩缩容

docker搭建Redis3主3从集群并扩缩容

原创
作者头像
buiu
修改2022-02-09 09:43:56
2720
修改2022-02-09 09:43:56
举报
文章被收录于专栏:用户9090604的专栏
3主3从Redis集群扩缩容

使用主从时需要避免主与从在同一物理机, 否则当一对主从挂机后, 对应数据不可使用

一. 构建

代码语言:shell
复制
1. 创建6个Redis容器实例
docker run -d --name redis-node-1 --net host --privileged=true -v /opt/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /opt/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /opt/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /opt/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /opt/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /opt/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386
	# 参数详解 --net host = 使用宿主机的ip和端口, 是默认选项

2. 构建集群
redis-cli --cluster create 10.122.1.86:6381 10.122.1.86:6382 10.122.1.86:6383 10.122.1.86:6384 10.122.1.86:6385 10.122.1.86:6386 --cluster-replicas 1		# 一一分配
yes
3. 查看集群状态(redis内执行)
cluster info		
cluster nodes	# 可以确定主从的对应关系
M		S
1		6
2		4
3		5
redis-cli --cluster check 10.122.1.86:6381	(容器内执行)

4.连接至集群中
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381 -c

5. 容错迁移, 假使某个master宕, 是否有slave上位
 docker stop redis-node-2		# 宿主机执行
 # check状态
cluster nodes 
 # 发现master,fail, 短暂等待再次check
cluster nodes
# 会发现原先属于master2的slave4上位, 变成master

二. 扩容

需求: 新增主从, master6387, 其slave为6388

代码语言:shell
复制
1. 启动实例
docker run -d --name redis-node-7 --net host --privileged=true -v /opt/redis/share/redis-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /opt/redis/share/redis-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388
2. 将6387节点作为master加入集群
docker exec -it redis-node-7  /bin/bash
redis-cli  --cluster add-node 10.122.1.86:6387 10.122.1.86:6381
redis-cli  --cluster check 10.122.1.86:6381发现6387已经作为新的master
3. 重新分配槽号

   How many slots do you want to move (from 1 to 16384)? 4096

   What is the receiving node ID?	c6822e309e97b70122ec8219334b28457bbd6845

   Source node #1: all

   Do you want to proceed with the proposed reshard plan (yes/no)? yes

   redis-cli  --cluster check 10.122.1.86:6381

# 发现6387节点具有4096个槽位(原本的3个节点各均匀分配一些出来)

1. 将6388作为6387的slave新增至集群
redis-cli --cluster add-node 10.122.1.86:6388 10.122.1.86:6387 --cluster-slave --cluster-master-id c6822e309e97b70122ec8219334b28457bbd6845
redis-cli -p 6381 -c
cluster nodes 	# 确认集群状态

三. 缩容

需求: 删除主从6387和6388

代码语言:shell
复制
1. 删除从机6388
redis-cli --cluster del-node 10.122.1.86:6388 1da4941694c45812027fc74e687d7de17ad798eb
2. 重分配槽位
2.1 方案1: 将6387的槽位分配给6382
	 redis-cli  --cluster reshard 10.122.1.86:6382
	 How many slots do you want to move (from 1 to 16384)? 4096
	 What is the receiving node ID? 4314fd868093beea918b8aabacca74f3800855e4
	 Source node #1: c6822e309e97b70122ec8219334b28457bbd6845
	 Source node #2: done
	 Do you want to proceed with the proposed reshard plan (yes/no)? yes
	 

   		 redis-cli  --cluster check 10.122.1.86:6381

# 发现6387已经没有槽位, 而6382有8192个槽位

1. 删除主机6387
redis-cli --cluster del-node 10.122.1.86:6387 c6822e309e97b70122ec8219334b28457bbd6845
2. 确认
redis-cli  --cluster check 10.122.1.86:6381

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3主3从Redis集群扩缩容
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档