redis学习7--redis-Cluster

  1 redis 数据分区

    redis采用虚拟槽分区,将所有数据全部分散在16384个槽内 槽的范围是0-16383。假设集群有5个节点,那么他负责的槽数据如下,

  

   redis 集群有一下特点: 1 将数据和节点分开,简化了节点扩容和缩容的难度,2

  redis集群不一定不单机好,集群存在以下弱点,1 key批量操作支持有限。如mset、mget只有在同一个节点下才能使用批量操作,而CRC16算法很好的将数据散列在不同的槽里面,2  复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构 ,3  不支持多数据库空间。单机下的Redis可以支持16个数据库,集群模

式下只能使用一个数据库空间,即db0。等等问题。

  2搭建集群

    2.1 手动搭建集群,手动搭建集群有助于理解流程和细节,实际操作中可能会使用ruby快速搭建 。

      1 配置节点

        

        使用sed 命令快速生产7001  - 7005节点配置

        sed 's/7000/7001/g' redis-7000.conf  > redis-7001.conf       

         sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf
         sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf
         sed 's/7000/7004/g' redis-7000.conf > redis-7004.conf
         sed 's/7000/7005/g' redis-7000.conf > redis-7005.conf

        启动这些节点

        

        此时这些节点还不能添加数据进去,因为还没有分配槽

      2 meet

        

      3 指配槽

        1 写一个分配槽的shell脚本(推荐),注意shell语法的问题 和 `  符号

        

        这里是本机,所以未写host,执行槽的分配,分别将16384个节点 分配到 7000 7001 7002上

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

        2 也可以通过cluster addslots命令的bash特性批量设置槽,

          redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0...5461}

          redis-cli -h 127.0.0.1 -p 7000 cluster addslots {5462...10922}

          redis-cli -h 127.0.0.1 -p 7000 cluster addslots {10923...16383}

      4 分配主从关系

         

        最后一个参数是master的nodeID ,cluster node 可以通过客户端的 cluster nodes 命令查看

       

        到此,集群手动搭建完成

    2.2用redis-trib.rb快速搭建集群。

      下载  ruby

      wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
      tar xvf ruby-2.3.1.tar.gz -C /data/wwwroot/
        cd ruby-2.3.1/
       ./configure -prefix=/usr/local/ruby
        make && make install

      这中间安装会很慢
       cd /usr/local/ruby/
      cp bin/ruby /usr/local/bin/
      cp bin/gem /usr/local/bin/

    安装rubygem redis 依赖

      wget http://rubygems.org/downloads/redis-3.3.0.gem

      gem install -l redis-3.3.0.gem 

      这里可能会出现一个错误

      

      可以如下解决

      yum install zlib-devel

      cd /data/ruby-2.4.2
      cd ext/zlib
      ruby extconf.rb
      make && make install
      再次执行  gem install -l redis-3.3.0.gem  即可
      将之前的手动集群停下来,杀进程 并且重新启动
      

      复制redis-trib.rb      cp  /data/wwwroot/redis/src/redis-trib.rb /usr/local/bin/

      创建集群
        ./redis-trib.rb create --replicas 1 127.0.0.1:7000   127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
      

      到此 工具安装已经完成

 

  3 节点通信

    集群中的节点会通过基于实现Gossip协议的消息来实现通信,常见的课=可分为

    ping消息(节点之间使用最频繁的消息,用于检测彼此之间的状态)

    pong消息(回复消息)

    meet消息(一般用于新节点的加入)

    fail消息(下线消息)

  4 集群伸缩(扩容,缩容)

    redis上集群的伸缩节点之间迁移。

    扩容

    1 准备7006 7007节点,并且启动,配置和之前一致 ,互相meet

    sed 's/7000/7006/g' redis-7000.conf > redis-7006.conf
    sed 's/7000/7007/g' redis-7000.conf > redis-7007.conf

      redis-server redis-7006.conf
    redis-server redis-7007.conf

    redis-cli -p 7000 cluster meet 127.0.0.1 7006
    redis-cli -p 7000 cluster meet 127.0.0.1 7007

    将7007设置为7006的从节点

    redis-cli -p 7007 cluster replicate 7a228afc266cc44c25bcb7859fde4d9a55b439ad

    也可以通过redis-trib来加入节点 

    ./redis-trib.rb add-node 127.0.0.1:7006

    ./redis-trib.rb add-node 127.0.0.1:7007

    使用redis-trib分配槽信息

    cd /data/wwwroot/redis/src

    ./redis-trib.rb reshard 127.0.0.1:7000

    4096

    填写7006的nodesID

    all 

    yes

    查看一下槽结果

    这里可以看到 三段 槽,是7000 7001 7002 迁移过来的, 实现了扩容,

    缩容(这里下线7006 7007节点)

    迁移槽

    ./redis-trib.rb reshard --from 7a228afc266cc44c25bcb7859fde4d9a55b439ad --to 4c9f8211c1bc964cd905e7137a415a300bf7351d --slots 1365 127.0.0.1:7006

    ./redis-trib.rb reshard --from 7a228afc266cc44c25bcb7859fde4d9a55b439ad --to 3404eb10fd3220ccd49735701ee73e1eb6a33324  --slots 1365 127.0.0.1:7006

    ./redis-trib.rb reshard --from 7a228afc266cc44c25bcb7859fde4d9a55b439ad --to 4db1a893096fa03869ebb0c941948d312b41864e --slots 1365 127.0.0.1:7006

    删除节点(先下从节点 后下主节点)

    ./redis-trib.rb del-node 127.0.0.1:7000 7a228afc266cc44c25bcb7859fde4d9a55b439ad

    ./redis-trib.rb del-node 127.0.0.1:7000 f79ab01139845f48d0a64223cf40f69a3179d873

  5 请求路由

    move重定向

    

    

原文地址:https://www.cnblogs.com/tjqBlog/p/9645032.html