Docker学习 - Redis集群-3主3从-扩容-缩容搭建

x33g5p2x  于2022-07-22 转载在 Docker  
字(4.6k)|赞(0)|评价(0)|浏览(574)

演示图

// 第一步:启动六台Redis机器
docker run -d --name=redis-node-1 --net host --privileged=true -v /www/server/redis_master_slave/master_slave1/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6381

docker run -d --name=redis-node-2 --net host --privileged=true -v /www/server/redis_master_slave/master_slave2/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name=redis-node-3 --net host --privileged=true -v /www/server/redis_master_slave/master_slave3/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name=redis-node-4 --net host --privileged=true -v /www/server/redis_master_slave/master_slave1/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6384

docker run -d --name=redis-node-5 --net host --privileged=true -v /www/server/redis_master_slave/master_slave2/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name=redis-node-6 --net host --privileged=true -v /www/server/redis_master_slave/master_slave3/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6386

//第二步:随便进一台redis主机容器内部:为每个master创建一个slave从节点
docker exec -it redis-node-1 /bin/bash

//输入yes
redis-cli --cluster create 192.168.19.107:6381 192.168.19.107:6382 192.168.19.107:6383 192.168.19.107:6384 192.168.19.107:6385 192.168.19.107:6386 --cluster-replicas 1

//第三步:通过一台Redis主机(非从机),查看整个Redis集群状态 == 我当前进入的容器即是主机
redis-cli -p 6381
cluster info 
cluster nodes

//根据上图的情况cluster nodes的信息,此时Redis系统分配的主从关系是:主6381-> 从6385、主6382-> 从6386、主6383-> 从6384

//第四步:测试reids存储:发现key1、key4设置时都发生错误,由于key1、key4的哈希值属于其他槽位,即其他的主机如主机6382、6383才可以存
//如果需要在当前主机不报错,自动将key1、key4存到其他机器,进入redis客户端使用集群模式:redis-cli -p 6381 -c
set key1 value1
set key2 value2
set key3 value3
set key4 value4
exit

//第五步:redis客户端 优化路由跳转 == 每运行一次set、注意看端口号的变化
redis-cli -c -p 6381
set key1 value1
set key2 value2
set key3 value3
set key4 value4
exit

//第六步:查看集群信息(另一个命令)cluster node 也可以看集群信息
//查看集群中所有key在各主机的分布情况,以及主从关系
redis-cli --cluster check 192.168.19.107:6381

//第七步:模拟其中一台主机宕机(我以6381主机宕机为测试),查看其想对应的从机6385是否可以自动变为主机,进行平替
exit
exit
docker stop redis-node-1
docker ps
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382

// 第八步:可观察到原主机6381的从机6385自动平替变为主机
cluster nodes

//第九步:重新将6381启起来,观察6381是否会变回主机,6385变为从机
exit
exit
docker start redis-node-1
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
//第十步:可观察到 6385不会因为老领导回来6381就降为从机
cluster nodes

//第十一步:调整架构,将6381变为主机 6385变为从机
exit
exit
docker stop redis-node-5
//等1分钟在启起来
docker start redis-node-5
docker exec -it redis-node-2 /bin/bash
redis-cli -c -p 6382
//第十二步:可观察到 6381变为主机,6385变为从机
cluster nodes

//====================扩容开始==============================================
//第十三步:准备扩容,添加两台机器,主机6387、从机6388进入集群
exit
exit

docker run -d --name=redis-node-7 --net host --privileged=true -v /www/server/redis_master_slave/master_slave4/master:/data redis:latest --cluster-enabled yes --appendonly yes --port 6387

docker run -d --name=redis-node-8 --net host --privileged=true -v /www/server/redis_master_slave/master_slave4/slave:/data redis:latest --cluster-enabled yes --appendonly yes --port 6388

docker ps

//第十四步:进入redis-node7容器
docker exec -it redis-node-7 /bin/bash

//第十五步:添加当前redis机进入master集群
redis-cli --cluster add-node 192.168.19.107:6387 192.168.19.107:6381

//检查集群情况 == 发现新6387主机没槽位
redis-cli --cluster check 192.168.19.107:6381

//第十六步:勒令整个集群重新分配槽位,使得新主机6387也有槽位
//怎么分:16384/4=4096   填4096进去
//分给谁:6387机器的Redis定义的ID标识符:填ad03db99f539b78b0b57c37c529f9eb2f612bb18
//全机:重新新配:填all
//开始分配:yes
redis-cli --cluster reshard 192.168.19.107:6381

//第十七步:检查集群情况 == 发现新6387主机有槽位了(原先的三个槽位,每个都允了一点过来) == 且将集群系统中所有key都重新分配了
redis-cli --cluster check 192.168.19.107:6381

//第十八步:将6388指派变为6387的从机
//删除节点命令:redis-cli --cluster del-node 节点IP:节点端口号 节点标识符
redis-cli --cluster add-node 192.168.19.107:6388 192.168.19.107:6387 --cluster-slave --cluster-master-id ad03db99f539b78b0b57c37c529f9eb2f612bb18

//第十九步:检查集群情况 == 查看6387、6388是否是主从关系
redis-cli --cluster check 192.168.19.107:6381

//====================扩容结束==============================================

//====================缩容开始-先删从节点6388,槽位重新分配,在删除主节点6387,恢复成3主3从====
//第二十步:删除从节点6388
redis-cli --cluster del-node  192.168.19.107:6388 dc89a64b98290f4164e4ba1b6e8841a8b9d8d763

//第二十一步:检查集群情况 == 查看从节点6388已从集群中移除
redis-cli --cluster check 192.168.19.107:6381

//第二十二步:开始重新分配槽位
//分配的槽位个数:4096
//谁接收分配来的槽位:6381节点的ID标识符  填入:2d8bb525e25ecb239dbe059f8545eda64182e514
//谁分配出去槽位:6387节点的ID标识符 填入:ad03db99f539b78b0b57c37c529f9eb2f612bb18
//done
redis-cli --cluster reshard 192.168.19.107:6381

//第二十三步:检查集群情况 = 可见6387的key都分配出去给6381
redis-cli --cluster check 192.168.19.107:6381

//第二十四步:删除从节点6388
redis-cli --cluster del-node  192.168.19.107:6387 ad03db99f539b78b0b57c37c529f9eb2f612bb18

//第二十五步:检查集群情况 == 查看主节点6387已从集群中移除
redis-cli --cluster check 192.168.19.107:6381

//====================缩容结束==============================================

整个搭建流程

相关文章