redis cluster 部署過程

一, 特色

高性能:

  一、在多分片節點中,將16384個槽位,均勻分佈到多個分片節點中
  二、存數據時,將key作crc16(key),而後和16384進行取模,得出槽位值(0-16383之間)
  三、根據計算得出的槽位值,找到相對應的分片節點的主節點,存儲到相應槽位上
  四、若是客戶端當時鏈接的節點不是未來要存儲的分片節點,分片集羣會將客戶端鏈接切換至真正存儲節點進行數據存儲

高可用:
  在搭建集羣時,會爲每個分片的主節點,對應一個從節點,實現slaveof的功能,同時當主節點down,實現相似於sentinel的自動failover的功能。


  一、redis會有多組分片構成(3組)
  二、redis cluster 使用固定個數的slot存儲數據(一共16384slot)
  三、每組分片分得1/3 slot個數(0-5500  5501-11000  11001-16383)
  四、基於CRC16(key) % 16384 ====》值 (槽位號)。

規劃、搭建過程:

  6個redis實例,通常會放到3臺硬件服務器
  注:在企業規劃中,一個分片的兩個分到不一樣的物理機,防止硬件主機宕機形成的整個分片數據丟失。node

 

二, 配置

 

端口號:7000-7005

一、安裝集羣插件redis


  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/

二、集羣節點準備

vim

  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


啓動節點:

ruby

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 服務器

 



三、將節點加入集羣管理

app

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



四、集羣狀態查看

集羣主節點狀態ide

redis-cli -p 7000 cluster nodes | grep master


集羣從節點狀態性能


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

 

三, 添加節點

 

集羣節點管理

  添加主節點:插件

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

  

  要從新添加節點的話須要從新啓動節點信息而且刪除節點裏面的信息

相關文章
相關標籤/搜索