• Redis(四)-集群搭建


    基本架构

    节点

    与普通模式下节点的区别是它有一个配置是cluster-enabled:yes,即以集群模式启动

    meet

    节点之间通过meet实现通信

    指派槽

    复制

    每个主节点都有从节点,主从复制。

    搭建步骤(原生安装)

    redis-cli -p 7000 cluster nodes/info查看节点信息(不开启客户端)

    1.开启节点

    redis-server redis-7000.conf 
    redis-server redis-7001.conf 
    redis-server redis-7002.conf 
    redis-server redis-7003.conf 
    redis-server redis-7004.conf 
    redis-server redis-7005.conf
    

    2.节点握手(meet)

    redis-cli -p 7000 cluster meet 127.0.0.1 7001
    redis-cli -p 7000 cluster meet 127.0.0.1 7002
    redis-cli -p 7000 cluster meet 127.0.0.1 7003
    redis-cli -p 7000 cluster meet 127.0.0.1 7004
    redis-cli -p 7000 cluster meet 127.0.0.1 7005
    

    此时通过redis-cli -p 7000 cluster info查看任意一个节点得到的信息中,cluster_known_nodes的值都为6,即集群中6个节点都能互通。

    3.分配槽

    由于分配槽的命令很多且重复,编写脚本如下:

    start=$1
    end=$2
    port=$3
    for slot in `seq ${start} ${end}`
    do
            redis-cli -p ${port} cluster addslots ${slot}
    done
    

    运行脚本为7000、7001、7002分配槽:

    sh addslots.sh 0 5461 7000
    sh addslots.sh 5462 10922 7001
    sh addslots.sh 10923 16383 7002
    

    4.主从分配

    通过redis-cli -p 7000 cluster nodes查看节点ID(第一列)。

    然后

    redis-cli -p 从节点端口 cluster replicate 主节点ID

    redis-cli -p 7003 cluster replicate d378ca9057747ed4643e9604de048c72b1e37ebc
    
    redis-cli -p 7004 cluster replicate a41a11969445c1b34b1a7f450339be9dfea6dcd7
    
    redis-cli -p 7005 cluster replicate 6e745ee42dc19ea4259d16aa0837bbba483832a9
    

    Redis Cluster提供了Rubby的安装脚本,可以通过Rubby方便地搭建集群,而不需要通过Redis-cli的原生安装方式。

    集群伸缩

    集群伸缩:槽和数据在节点之间的移动

    扩容集群

    1. 准备新节点

      redis-server redis-7006.conf
      即开启一个新的redis-server

    2. 加入集群

      新节点和已创建的集群握手(meet)

    3. 迁移槽和数据


      通过redis-cli做会很麻烦,一般使用官方的redis-trib迁移。

    收缩集群

    1. 下线迁移槽

    2. 让其他节点忘记被除去的节点

    3. 关闭节点

    客户端路由

    move重定向

    被客户端访问的槽已经迁移到别的节点

    ask重定向

    被客户端访问的槽正在迁移中

    smart客户端

    如:JedisCluster

    1. 从集群中选一个可运行节点,使用cluster slots初始化槽和节点映射
    2. 将cluster slots的结果映射到本地
    3. 准备执行命令

    这样在客户端就有了槽和节点的对应信息,就能直接访问目标节点

    故障

    故障发现

    • 主观下线:某个节点认为另一个节点不可用
    • 客观下线:当半数以上持有槽的主节点都标记某节点主观下线

    尝试客观下线

    1. 通知集群内所有节点标记故障节点为客观下线
    2. 通知故障节点的从节点触发故障转移流程

    故障恢复

    1. 资格检查:检查哪些从节点有成为主节点的资格
    2. 准备选举时间
    3. 选举投票:主节点对参选的从节点投票
    4. 替换主节点:
      • 当前节点取消复制变为主节点
      • 撤销故障主节点负责的槽,并将这些槽分配给自己
      • 向集群广播自己的pong消息,表明已经替换了故障主节点
  • 相关阅读:
    nginx命令
    linux 命令
    js导出excel页面数据
    Linux上使用shell脚本查看内存情况(超实用)
    Gson解析json繁杂数据
    纯js制作遮罩层对话框
    简易树形菜单(可伸缩)
    一句实现jquery导航栏
    沁园春-雪
    python day3 int,str,list类型补充
  • 原文地址:https://www.cnblogs.com/cky-2907183182/p/13252043.html
Copyright © 2020-2023  润新知