zoukankan      html  css  js  c++  java
  • redis cluster 部署过程

    一, 特点

    高性能:

      1、在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
      2、存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16383之间)
      3、根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上
      4、如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储

    高可用:
      在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动failover的功能。


      1、redis会有多组分片构成(3组)
      2、redis cluster 使用固定个数的slot存储数据(一共16384slot)
      3、每组分片分得1/3 slot个数(0-5500  5501-11000  11001-16383)
      4、基于CRC16(key) % 16384 ====》值 (槽位号)。

    规划、搭建过程:

      6个redis实例,一般会放到3台硬件服务器
      注:在企业规划中,一个分片的两个分到不同的物理机,防止硬件主机宕机造成的整个分片数据丢失。

    二, 配置

    端口号:7000-7005

    1、安装集群插件


      EPEL源安装ruby支持
      yum install ruby rubygems -y

    使用国内源
      gem sources -l
      gem sources -a http://mirrors.aliyun.com/rubygems/
      gem sources  --remove https://rubygems.org/
      gem sources -l
      gem install redis -v 3.3.3

    或者:
      gem sources -a http://mirrors.aliyun.com/rubygems/  --remove https://rubygems.org/

    2、集群节点准备

      1 mkdir /data/700{0..7}
      2 
      3 vim /data/7000/redis.conf
      4 port 7000
      5 daemonize yes
      6 pidfile /data/7000/redis.pid
      7 loglevel notice
      8 logfile "/data/7000/redis.log"
      9 dbfilename dump.rdb
     10 dir /data/7000
     11 protected-mode no
     12 cluster-enabled yes
     13 cluster-config-file nodes.conf
     14 cluster-node-timeout 5000
     15 appendonly yes
     16 
     17 
     18 vim /data/7001/redis.conf
     19 port 7001
     20 daemonize yes
     21 pidfile /data/7001/redis.pid
     22 loglevel notice
     23 logfile "/data/7001/redis.log"
     24 dbfilename dump.rdb
     25 dir /data/7001
     26 protected-mode no
     27 cluster-enabled yes
     28 cluster-config-file nodes.conf
     29 cluster-node-timeout 5000
     30 appendonly yes
     31 
     32 
     33 vim /data/7002/redis.conf
     34 port 7002
     35 daemonize yes
     36 pidfile /data/7002/redis.pid
     37 loglevel notice
     38 logfile "/data/7002/redis.log"
     39 dbfilename dump.rdb
     40 dir /data/7002
     41 protected-mode no
     42 cluster-enabled yes
     43 cluster-config-file nodes.conf
     44 cluster-node-timeout 5000
     45 appendonly yes
     46 
     47 
     48 
     49 vim /data/7003/redis.conf
     50 port 7003
     51 daemonize yes
     52 pidfile /data/7003/redis.pid
     53 loglevel notice
     54 logfile "/data/7003/redis.log"
     55 dbfilename dump.rdb
     56 dir /data/7003
     57 protected-mode no
     58 cluster-enabled yes
     59 cluster-config-file nodes.conf
     60 cluster-node-timeout 5000
     61 appendonly yes
     62 
     63 
     64 
     65 vim /data/7004/redis.conf
     66 port 7004
     67 daemonize yes
     68 pidfile /data/7004/redis.pid
     69 loglevel notice
     70 logfile "/data/7004/redis.log"
     71 dbfilename dump.rdb
     72 dir /data/7004
     73 protected-mode no
     74 cluster-enabled yes
     75 cluster-config-file nodes.conf
     76 cluster-node-timeout 5000
     77 appendonly yes
     78 
     79 
     80 vim /data/7005/redis.conf
     81 port 7005
     82 daemonize yes
     83 pidfile /data/7005/redis.pid
     84 loglevel notice
     85 logfile "/data/7005/redis.log"
     86 dbfilename dump.rdb
     87 dir /data/7005
     88 protected-mode no
     89 cluster-enabled yes
     90 cluster-config-file nodes.conf
     91 cluster-node-timeout 5000
     92 appendonly yes
     93 
     94 
     95 
     96 vim /data/7006/redis.conf
     97 port 7006
     98 daemonize yes
     99 pidfile /data/7006/redis.pid
    100 loglevel notice
    101 logfile "/data/7006/redis.log"
    102 dbfilename dump.rdb
    103 dir /data/7006
    104 protected-mode no
    105 cluster-enabled yes
    106 cluster-config-file nodes.conf
    107 cluster-node-timeout 5000
    108 appendonly yes
    109 
    110 
    111 vim /data/7007/redis.conf
    112 port 7007
    113 daemonize yes
    114 pidfile /data/7007/redis.pid
    115 loglevel notice
    116 logfile "/data/7007/redis.log"
    117 dbfilename dump.rdb
    118 dir /data/7007
    119 protected-mode no
    120 cluster-enabled yes
    121 cluster-config-file nodes.conf
    122 cluster-node-timeout 5000
    123 appendonly yes


    启动节点:

    1 redis-server /data/7000/redis.conf
    2 redis-server /data/7001/redis.conf
    3 redis-server /data/7002/redis.conf
    4 redis-server /data/7003/redis.conf
    5 redis-server /data/7004/redis.conf
    6 redis-server /data/7005/redis.conf
    7 redis-server /data/7006/redis.conf
    8 redis-server /data/7007/redis.conf

     1 [root@db01 ~]# ps -ef |grep redis 



    3、将节点加入集群管理

    1 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



    4、集群状态查看

    集群主节点状态

    redis-cli -p 7000 cluster nodes | grep master


    集群从节点状态


     1 redis-cli -p 7000 cluster nodes | grep slave 

    三, 添加节点

    集群节点管理

      添加主节点:

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

        add-node 后面写的地址为需要添加的地址

           最后的地址为管理的地址

      

      添加一个从节点

         -----------------------------注意---------------------------

    redis-trib.rb add-node --slave --master-id 691dbaf500ffe5a60213a5f8681637ea7868e9c5 127.0.0.1:7007 127.0.0.1:7000

      --master-id 后面的是对应的主节点id值

      后面跟的是从节点地址

      最后的是管理节点地址


        转移slot(重新分片)

        ----------------------------重点-----------------------

    每次添加都必须向新添加的节点增加slot,不然没有性能的提升

    redis-cli -p 7000 cluster nodes | grep master

      

      添加节点后默认是没有slot的

    运行

    redis-trib.rb reshard 127.0.0.1:7000

          

       后面的数字填写的是需要挪动的slot数 一般是16384除以主节点数得出的结果

       我这里节点数有4个 所以 16384/4 = 4096 

      

        这个id值为需要接收的id 就是哪个新添加需要接收slot的id值

        

                   这个是选择从哪里拿slot值,   选择all就是再所有节点上拿一点 每个节点平均分给需要收益的节点

        选择yes 表示开始配置!!!!!

    四, 删除节点

      将需要删除节点的slot先移动走
        redis-trib.rb reshard 127.0.0.1:7000

       进入内容后

      归还第一个空间
        

        因为节点一开始分配了4096的slot ,所以要把4096均匀的还给其余三个节点

        第一个节点归还

        第一个值是归还的大小

        第二个值为归还的目标,我这里第一个归还目标为7000节点

        选择确定

        

        第一个为选择从哪里拿去slot值,因为要删除7006, 所以也是从7006拿区值

        第二个空位done 及结束,表示只在这里拿

        确定

        

        选择yes

      第二次归还

         发现7006空间少了,7000空间添加进去了   

         剩下的开始归还

        

        确定到底,

        第一个值位从7006要删除的节点抽取的slot值

        第二个位抽取的值接收的节点ID

        第三个值为抽取slot值的节点是哪个

        第四个为结束

        确定------>后面的为yes

      第三次归还

        发现slot又少了, 受益者为7001

        

        

        确定到底,

        第一个值位从7006要删除的节点抽取的slot值

        第二个位抽取的值接收的节点ID

        第三个值为抽取slot值的节点是哪个

        第四个为结束

        确定------>后面的为yes

      

       

     最后发现没了

      现在删除他们一主一从 7006 7007

      

    1 [root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840
    2 >>> Removing node d3d67f8fd1680caba870a8b5a167c365088f6840 from cluster 127.0.0.1:7006
    3 >>> Sending CLUSTER FORGET messages to the cluster...
    4 >>> SHUTDOWN the node.
    5 [root@db01 ~]# redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd
    6 >>> Removing node 64701ac2c0cf563cb6160c6948e97d2fdf602bfd from cluster 127.0.0.1:7007
    7 >>> Sending CLUSTER FORGET messages to the cluster...
    8 >>> SHUTDOWN the node.
    View Code

      redis-trib.rb del-node 127.0.0.1:7006 d3d67f8fd1680caba870a8b5a167c365088f6840

      redis-trib.rb del-node 127.0.0.1:7007 64701ac2c0cf563cb6160c6948e97d2fdf602bfd

      后面的值为地址和对应的id

      

      要重新添加节点的话需要重新启动节点信息并且删除节点里面的信息

     

  • 相关阅读:
    python学习笔记(二)-字符串方法
    python学习笔记(一)-基础知识
    Charles抓包工具断点修改返回内容
    Charles抓包工具过滤网络请求
    Jmeter通过正则表达式提取器提取响应结果数据
    【PHP】什么时候使用Try Catch(转)
    【tp5.1】七牛云上传图片
    【PHP】统计问卷调查结果的选项票数和百分比
    【tp5.1】composer安装PHPExcel以及导入导出Excel
    【tp5.1】微信公众号授权登录及获取信息录入数据库
  • 原文地址:https://www.cnblogs.com/kingle-study/p/10044775.html
Copyright © 2011-2022 走看看