Redis Cluster集羣搭建

Redis Cluster集羣搭建

搭建一個redis Cluster至少須要兩個redis實例,我使用的是 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 六個redis實例
node

修改配置項

打開全部實例的redis.conf,修改如下配置項並啓動全部的實例。redis

port 7001
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes

集羣環境構建

1、使用客戶端命令

1.命令

  • //集羣(cluster)shell

  • CLUSTER INFO 打印集羣的信息ruby

  • CLUSTER NODES 列出集羣當前已知的全部節點(node),以及這些節點的相關信息。app

  • //節點(node)命令行

  • CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。3d

  • CLUSTER FORGET <node_id> 從集羣中移除 node_id 指定的節點。code

  • CLUSTER REPLICATE <node_id> 將當前節點設置爲 node_id 指定的節點的從節點。ip

  • CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤裏面。hash

  • //槽(slot)

  • CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。

  • CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。

  • CLUSTER FLUSHSLOTS 移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。

  • CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽>,而後再進行指派。

  • CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。

  • CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。

  • CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。

  • //鍵 (key)

  • CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪一個槽上。

  • CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。

  • CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。

2. 添加節點到集羣中去

鏈接到其中的一個redis實例(127.0.0.1:7000),執行如下命令

127.0.0.1:7000>cluster meet 127.0.0.1:7001
    127.0.0.1:7000>cluster meet 127.0.0.1:7002
    127.0.0.1:7000>cluster meet 127.0.0.1:7003
    127.0.0.1:7000>cluster meet 127.0.0.1:7004
    127.0.0.1:7000>cluster meet 127.0.0.1:7005

再執行如下語句,查看當前的節點數目

127.0.0.1:7000> cluster nodes
8eff8fd6273daa6c030a4239f7d5cffb025b720c 127.0.0.1:7000 myself,master - 0 0 3 connected
cbbc8039fed4eb699fa60d4205b463cabc15d95c 127.0.0.1:7001 master - 0 1461222806314 5 connected
aab79155d3b4f12346bd64f0f24c954d62f75a55 127.0.0.1:7002 master - 0 1461222805312 4 connected
9bffed9df65bb085af540d907cc35e2bf6b313a6 127.0.0.1:7003 master - 0 1461222807316 1 connected
f21c7d98f3858c0528e93f998a3ba4c19c0db280 127.0.0.1:7004 master - 0 1461222804308 0 connected
a4616441a6f54fdd82971e9b109f02db4522b165 127.0.0.1:7005 master - 0 1461222806815 2 connected

有myselef master標示的是當前節點

3. 槽分配

127.0.0.1:7000>cluster addsolts 0 1 2...

採用命令行的方法進行槽分配時,有一點不太友好,就是你如須要一一指出分配給改節點的全部槽,這一點太麻煩了,要是改節點分配的槽過多,有好幾百的話,就會很麻煩。可是還有一種簡便的方法,就是修改nodes.conf的槽區間。

2、使用redis-trib.rb

1.安裝redis-trib

redis-trib運行在ruby環境中,須要安裝ruby。安裝的過程以下。依次執行以下命令,便可完成安裝。

[root@redis1 src]# yum install ruby
  [root@redis1 src]# yum install rubygems
  [root@redis1 src]# gem install redis

2.構建集羣

[root@redis1 src]#./src/redis-trilb.rdb 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
  • 選項–replicas 1 表示咱們但願爲集羣中的每一個主節點建立一個從節點

3.新增節點

[root@redis1 redis-3.0.0]# ./src/redis-trilb.rdb add-node 127.0.0.1:7006 127.0.0.1:7000
  • 127.0.0.1:7006是新增的節點

  • 127.0.0.1:7000是集羣中的任意一個節點。

經過查看cluster nodes list 能夠發現此時新增的節點(192.168.6.4:7000)尚未分配槽。

4.分配槽

[root@redis1 src]#./src/redis-trib.rb reshard 127.0.0.1:7006

輸入以上內容後,在客戶端會出現如下信息

How many slots do you want to move (from 1 to 16384)? 1000 //設置slot數1000
What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新節點node id
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all // all 表示所有節點從新洗牌,也能夠輸入你須要從新分配的節點id 再輸入 done 
Do you want to proceed with the proposed reshard plan (yes/no)? yes //確認從新分

完成以上操做後,一個新的並能夠正常使用的節點就添加到集羣中去了。

5. 給新增的節點添加從節點

[root@redis1 redis-3.0.0]#./src/redis-trib.rb add-node --slave --master-id 711e17d3f8b0a107d9b4b88ce920c06e4e3a85cb 127.0.0.1:7007 127.0.0.1:7000
  • 711e17d3f8b0a107d9b4b88ce920c06e4e3a85cb 是前面添加的節點,能夠經過cluster nodes 查看

  • 127.0.0.1:7007 是新增的從節點

  • 127.0.0.1:7000爲集羣中任意一個節點便可

6. 刪除節點

6.1 刪除從節點
[root@redis1 redis-3.0.0]#./src/redis-trib.rb del-node 127.0.0.1:7007 '0f4c5f090f573d9465a7c0542e9632ecd831080b'
  • 127.0.0.1:7007 待刪除的節點

  • 0f4c5f090f573d9465a7c0542e9632ecd831080b 待刪除的節點id

6.2 刪除主節點
6.2.1 從新分配槽

刪除主節點以前,須要從新分配槽,把待刪除節點的槽移動到別的節點上去

[root@redis1 redis-3.0.0]#./src/redis-trib.rb reshard 127.0.0.1:7006 (待刪除節點的)

輸入以上命令後控制檯會出現如下內容

How many slots  you want to move (from 1 to 16384)? 1000 //被刪除master的全部slot數量
What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收6378節點slot的master
Please enter all the source node IDs.
Type 'all' all the nodes  source nodes  the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被刪除master的node-id
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot後,reshard
6.2.2 刪除節點
[root@redis1 redis-3.0.0]# ./src/redis-trib.rb del-node 127.0.0.1:7006 '711e17d3f8b0a107d9b4b88ce920c06e4e3a85cb'
  • 127.0.0.1:7006 待刪除的主節點

  • 711e17d3f8b0a107d9b4b88ce920c06e4e3a85cb 待刪除的節點id

7.檢測狀態

經過如下命令能夠檢測當前集羣的分佈狀態

[root@redis1 redis-3.0.0]# ./src/redis-trib.rb check 127.0.0.1:7000
  • 127.0.0.1:7000集羣中的任意節點

相關文章
相關標籤/搜索