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

     创建集群redis-cli --cluster create 192.168.0.105:6381 192.168.0.105:6382 192.168.0.105:6383 192.168.0.105:6384 192.168.0.105:6385192.168.0.105:6386 --cluster-replicas 1

      注:-- 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)

    

   缩容完成,回到三主三从

   

posted @ 2022-09-12 11:55  Crazier  阅读(1102)  评论(0编辑  收藏  举报