申明:本文为学习过程中的笔记,在现有的资料基础之上做了学习和整理,非完全原创的。
Redis集群-主从
1 搭建3主3从
(1) 安装6台redis
注:实际生产中需要挂载数据卷
//--net host 使用宿主机ip和端口
//--privileged=true 获得宿主机root用户权限
//--cluster-enabled 开启redis集群
//--appendonly yes开启持久化
docker run -d --name redis-node-1 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
如图所示:
(2)进入任意一个节点容器内部构建集群关系(以6381为切入点)
命令如下:
(1)docker exec -it redis-node-1 bash
(2)redis-cli --cluster create 192.168.xxx.115:6381 192.168.xxx.115:6382 192.168.xxx.115:6383 192.168.xxx.115:6384 192.168.xxx.115:6385 192.168.xxx.115:6386 --cluster-replicas 1
如图所示:
(3)查看集群的状态(以6381为切入点查看集群状态)
1 cluster info
2 cluster nodes
命令如下:
先执行如下命令,在执行cluster nodes和cluster info
(1)docker exec -it redis-node-1 bash
(2)redis-cli -p 6381
3 数据读写存储
由于是集群所以在进入redis时,需要加-c参数优化路由,否则key放入不到对应的哈希槽中
redis-cli -p 6381 -c
如图:
查看集群信息
redis-cli --cluster check 192.168.xxx.115:6381
如图:
2 容错切换迁移
停止6381主节点,会发现6381的从节点此时上位
命令如下:
docker stop redis-node-1
3 集群扩容
(1) 新建2个节点
docker run -d --name redis-node-7 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
如图:
(2) 节点入集群
将6387作为master加入集群
命令如下:
//6387 就是将要作为master新增节点
//6381 就是原来集群节点里面的领路人,相当于6387通过6381找到集群并加入
(1)docker exec -it redis-node-7 bash
(2)redis-cli --cluster add-node 192.168.xxx.115:6387 192.168.xxx.115:6381
检查集群情况如下:
如图:
(3) 重新分配槽号
如图:
(1)
(2)
再次检查集群
redis-cli --cluster check 192.168.xxx.115:6381
如图:
(4) 为主节点6387分配从节点6388
redis-cli --cluster add-node 192.168.xxx.115:6388 192.168.xxx.115:6387 --cluster-slave --cluster-master-id 73c0efebc89e6b2b6d4b9bdf66335facf05a0cd4-------这个是6387的编号,按照实际情况
再次检查集群
如图:
4 集群缩容
实现要求:6387节点和6388节点下线,哈希槽全部分配给6381
(1) 将6388从节点从集群中删除
redis-cli --cluster del-node 192.168.xxx.115:6388 19b86141674922b0c31dcbb5cd14709e2dccdadd
如图:
(2)将6387槽位清空全部分给6381
redis-cli --cluster reshard 192.168.xxx.115:6381
如图:
(1)
(2)
检查集群情况
redis-cli --cluster check 192.168.xxx.115:6381
如图:
(3) 将6387删除
redis-cli --cluster del-node 192.168.xxx.115:6387 73c0efebc89e6b2b6d4b9bdf66335facf05a0cd4
检查集群情况
redis-cli --cluster check 192.168.xxx.115:6381
如图: