1. 程式人生 > >redis cluster 部署過程

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 [[email protected] ~]# 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 

 

三, 新增節點

 

叢集節點管理

  新增主節點:


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

    add-node 後面寫的地址為需要新增的地址

       最後的地址為管理的地址

  

  新增一個從節點

 

   1 redis-trib.rb add-node --slave --master-id d3d67f8fd1680caba870a8b5a167c365088f6840 127.0.0.1:7007 127.0.0.1:7000

  --master-id 後面的是對應的主節點id值

  後面跟的是從節點地址

  最後的是管理節點地址

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

  

 


轉移slot(重新分片)----------------------------重點-----------------------每次新增都必須slot

  

  新增節點後預設是沒有slot的

執行

redis-trib.rb reshard 127.0.0.1:7000

   後面的數字填寫的是需要挪動的slot數 一般是16384除以主節點數得出的結果 

    這個id值為需要接收的id 就是哪個新新增需要接收slot的id值

               這個是選擇從哪裡拿slot值,   選擇all就是再所有節點上拿一點, 輸入id值為選擇從這個節點拿這麼多

    選擇yes 表示開始配置!!!!!