Docker配置redis三主三从扩容缩容全流程

138 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

启动六台redis

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
 
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
 
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
 
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
 
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
 
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

image.png

docker exec -it redis-node-1 bash 进入容器

构建主从关系

redis-cli --cluster create 192.168.15.100:6381 192.168.15.100:6382 192.168.15.100:6383 192.168.15.100:6384 192.168.15.100:6385 192.168.15.100:6386 --cluster-replicas 1

--cluster-replicas 1 表示集群关联是1:1,一主一丛

image.png

哈希槽划分,主从分布

输入yes

image.png 进入redis1

redis-cli -p 6381

查看集群信息

cluster info

image.png

查看所有节点

cluster nodes

image.png

数据存储失败

image.png

所需要的哈希槽不在该服务器,应该连接集群存储而不是单个服务器

连接redis改为redis-cli -p 6381 -c 优化路由

重定向去对应哈希槽的服务器

image.png

检查集群信息

redis-cli --cluster check 192.168.15.100:6381

image.png

主从容错切换迁移

image.png

主机宕机后从机会自动变为主机,且主机恢复正常后会变为从机

主从扩容

image.png

image.png 新增两个节点

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
​
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

进入redis-node-7,添加节点到集群

redis-cli --cluster add-node 192.168.15.100:6387 192.168.15.100:6381

image.png

image.png

重新分配槽号

redis-cli --cluster reshard IP地址:端口号

redis-cli --cluster reshard 192.168.15.100:6381

分配出4096个槽位(16384/4≈4096)给redis-node-7

image.png

检查一下已经分配成功 redis-cli --cluster check 192.168.15.100:6381

image.png

前三个主机每个匀出4096/3个槽给redis-note-7,并不是从0开始分配,不是连续的,这样所带的数据也跟着到了redis-node-7

设置7-8主从关系

redis-cli --cluster add-node 192.168.15.100:6388 192.168.15.100:6387 --cluster-slave --cluster-master-id 537d5e09b555505ebf34d2f5bef141662ab19330

主从缩容

image.png

删除节点6388

redis-cli --cluster del-node 192.168.15.100:6388 5d149074b7e57b802287d1797a874ed7a1a284a8

image.png

重新分配哈希槽

redis-cli --cluster reshard 192.168.15.100:6381

将6387的槽分配给6381

image.png

image.png

删除6387

redis-cli --cluster del-node 192.168.15.100:6387 537d5e09b555505ebf34d2f5bef141662ab19330