3主3从redis集群搭建
天上飞的理念必有落地的实现
上一篇已提到2亿缓存设计方案中哈希槽分区方案,现就此方案进行实际落地动手吧!
一、快速搭建3主3从redis集群服务
1、快速启动 6 docker容器实例
docker run -d --net host --name redis-node-1 --privileged=true -v /var/lib/redis/data/redis-node-1:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --net host --name redis-node-2 --privileged=true -v /var/lib/redis/data/redis-node-2:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --net host --name redis-node-3 --privileged=true -v /var/lib/redis/data/redis-node-3:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --net host --name redis-node-4 --privileged=true -v /var/lib/redis/data/redis-node-4:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --net host --name redis-node-5 --privileged=true -v /var/lib/redis/data/redis-node-5:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --net host --name redis-node-6 --privileged=true -v /var/lib/redis/data/redis-node-6:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6386
进入容器内 docker exec -it redis-node-2 /bin/bash
创建集群
-- cluster 集群 、--cluster-replicas 集群副本数 、ip 为第一步host的真实IP
输入yes 确认 即可。集群对应关系 截止目前三主三从集群搭建完成,且对应关系如下:
查看集群信息,连接redis:redis-cli -p 6382 cluster nodes 查看集群节点,查看主从关系。
cluster nodes 查看集群节点, cluster info 查看集群信息 ,redis-cli --cluster check ip:port 集群检测
添加缓存节点 set tx value,失败原因 现在是hash槽集群环境,key tx槽位值15106,而redis-node-2只管5461~10922导致失败,故需要使用集群连接,redis-cli -c -p 6382 如下所示,缓存写入了redis-node-3节点
查看一下redis-node-3节点是否存在值
容错
1、停止redis-node-3节点,node-3主库失败,node-6由从库升级为主库
2、启用redis-node-3节点,node-3会变成 node-6的从库
主从伸缩
1、伸,添加redis-node-7 ,redis-node-8两个节点
docker run -d --net host --name redis-node-7 --privileged=true -v /var/lib/redis/data/redis-node-7:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --net host --name redis-node-8 --privileged=true -v /var/lib/redis/data/redis-node-8:/data redis:6.2.7 --cluster-enabled yes --appendonly yes --port 6388
进入redis-node-7节点实例,将新增的6387节点(空槽号)作为master节点加入集群
redis-cli --cluster add-node <新节点ip:端口> <领路人ip:端口>
redis-cli --cluster add-node 192.168.0.105:6387 192.168.0.105:6381
四主集群已创建成功
检查集群,可以新加入的node-7 是没有发配槽位的
2、以redis-node-1节点重新分配hash槽 redis-cli --cluster reshard 192.168.0.105:6381
第一次输入4096 所有主节点 均衡分配,第二次输入需要接受的节点id,第三次输入all 重新洗牌即可
检查集群节点,槽位重新分配成功,总结:所有槽位并非重新分配,而是其主节点每人拿出点槽位给到新进来的节点。
3、给redis-node-7节点添加从节点 ,redis-cli --cluster add-node <从节点ip:端口> <主节点ip:端口> --cluster-slave --cluster-master-id <主节点id>
redis-cli --cluster add-node 192.168.0.105:6388 192.168.0.105:6387 --cluster-slave --cluster-master-id 97ec68064422c764848df6388b94021de26740ea
截止4主4从已构建完成,即扩容完成
1、缩(redis-node-7 主节点)
a、先删除从库 重置槽位 再删除主库
redis-cli --cluster del-node <从库ip:端口> <从库集群id>
重置槽位
redis-cli --cluster reshard 192.168.0.105:6381
删除主节点redis-node-7(redis-cli --cluster del-node 192.168.0.105:6387 id)
缩容完成,回到三主三从