docker实现redis集群部署
一、docker实现redis集群部署
1、下载redis
docker pull redis:6.0.8
运行6台机器,实现3主3从,端口分别为6381,6382,6383,6384,6385,6386
#redis-node-1
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
#redis-node-2
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
#redis-node-3
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
#redis-node-4
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
#redis-node-5
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
#redis-node-6
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
2、启动后查看docker ps
3、进入redis-node-1进行配置主机信息
docker exec -it redis-node-1 /bin/bash
4、进行配置集群
#配置集群信息,进行槽位分配
redis-cli --cluster create 192.168.31.79:6381 192.168.31.79:6382 192.168.31.79:6383 192.168.31.79:6384 --cluster-replicas 1
5、查看集群信息
#连接redis
redis-cli -p 6381
#查看集群信息
cluster info
#查看节点信息
cluster nodes
图片显示主从关系
主机 | 从机 |
---|---|
6381 | 6384 |
6382 | 6385 |
6383 | 6386 |
二、测试集群
1、进入单机进行set值
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381
2、设值,set key value有可能报错,要对应的槽位才可以存储数据
3、进入集群进行set值
#【c】代表进入集群环境,set key value都可以存储
redis-cli -p 6381 -c
4、查看集群信息
redis-cli --cluster check 192.168.31.79:6381
三、模拟master宕机
1、停掉redis-node-1
docker stop redis-node-1
2、进入其他主机master查看情况,例如:redis-node-2
docker exec -it redis-node-2 /bin/bash
redis-cli --cluster check 192.168.31.79:6382
4、模拟master宕机后重启后,会变成slave
docker start redis-node-1
5、进入其他主机master查看情况,例如:redis-node-2
docker exec -it redis-node-2 /bin/bash
redis-cli --cluster check 192.168.31.79:6382
四、主从扩容
1、扩容两台主机
新增两台一主一从6387,6388,启动6387,6388
#redis-node-7
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
#redis-node-8
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
2、配置redis-node-7
#进入redis-node-7
docker exec -it redis-node-7 /bin/bash
#加入集群
redis-cli --cluster add-node 192.168.31.79:6387 192.168.31.79:6381
#检查集群信息
redis-cli --cluster check 192.168.31.79:6381
执行结果,成功加入到集群中
4、重新分配槽号
#按照提示输入
redis-cli --cluster reshard 192.168.31.79:6381
#16384/4=4096
4096
接受id:6387的id
槽位来源:all
yes
分配结果
5、6388加入集群到6387master下面
redis-cli --cluster add-node 192.168.31.79:6388 192.168.31.79:6387 --cluster-slave --cluster-master-id 261a0698556d6b927d5134b31f9d254d5dd209e5
五、主从缩容
缩容6387,6388,先删除从机再删除主机
1、删除从机6388
#进入其他master
docker exec -it redis-node-2 /bin/bash
#删除6388
redis-cli --cluster del-node 192.168.31.79:6388 77d2ef93da14aaddf8666b9f8c8e3d6bd73dc2b5
2、重新分配6387
#进入其他master
docker exec -it redis-node-2 /bin/bash
redis-cli --cluster reshard 192.168.31.79:6381
4096
接收master-id:6381的id
槽位来源-id:6387的id
done
yes
结果
3、删除6387主节点
redis-cli --cluster del-node 192.168.31.79:6387 261a0698556d6b927d5134b31f9d254d5dd209e5
祝你好运