1. 程式人生 > >redis分散式及HA部署文件

redis分散式及HA部署文件

本文就官方redis分散式的部署進行總結說明,redis分散式中集成了高可用HA功能,依次進行說明,現對redis的分散式部署做以下總結。

  • redis編譯
    解壓redis-3.2.4.tar.gz包,進入到redis-3.2.4
    我一般新增快捷方式:ln -s redis-3.2.4 redis
    進入redis目錄的src下,執行:.configure完成編譯即可

  • 部署環境說明
    參照官方說明,支援redis主備,最少部署六個節點,三主三備

mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

拷貝編譯好的redis分別拷貝到7000,7001,7002,7003,7004,7005下面,見下圖所示

這裡寫圖片描述

分別進入到7000,7001,7002,7003,7004,7005的redis-3.2.4目錄中,新建redis_cluster_7000.conf redis_cluster_7001.conf等檔案,新增以下內容

redis_cluster_7000.conf配置檔案如下所示
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

redis_cluster_7001.conf配置檔案如下所示
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

   依次類推即可。
  • 分別啟動以上六個redis例項
    進入到7000/redis-3.2.4的src目錄下,執行

../redis-server ./redis_cluster_7000.conf
../redis-server ./redis_cluster_7001.conf
../redis-server ./redis_cluster_7002.conf
../redis-server ./redis_cluster_7003.conf
../redis-server ./redis_cluster_7004.conf
../redis-server ./redis_cluster_7005.conf

備註:以上啟動的六個redis之間沒有任何的關係,都是獨立的,下文介紹如何將六個redis例項變成3主三備。

  • 安裝gem

yum install gem
線上安裝失敗後,可考慮離線安裝

  • 建立redis叢集
    進入到任意redis的src目錄下,執行如下命令

gem install redis
#建立叢集,replicas 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

  • 檢視叢集狀態

使用如下命令:./redis-trib.rb check 127.0.0.1:7000
如下圖所示
這裡寫圖片描述
備註:3個master將16384個槽分配了,後續介紹redis如何將key儲存到這些槽中。

  • 新增叢集節點
  1. 開啟兩個redis例項,本文基於同一臺機器部署,跨機器部署只需要修改ip就行,如下所示:
    ./redis-server ../redis_cluster_7006.conf &
    ./redis-server ../redis_cluster_7007.conf &
    啟動後的redis程序如下圖所示:
    這裡寫圖片描述

2.將7006加入到叢集中作為主節點:
src目錄下執行:./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
這裡寫圖片描述
檢視叢集狀態:./redis-trib.rb check 127.0.0.1:7006
這裡寫圖片描述
發現此時:7006已經成為了叢集中一個主,但是沒有分配一個槽,故此時連線7006操作的話,所有的請求都會轉發到其他的solt槽去處理。
3.接下來我們給7006redis新增一個備
redis的src目錄下執行:./redis-trib.rb add-node –slave –master-id e6aee83e740d7dc44afd563e4aa160378f5a4cdf 127.0.0.1:7007 127.0.0.1:7000
這裡寫圖片描述
檢查叢集狀態:
這裡寫圖片描述
此時我們發現7007已經變成7006一個備了,但是7006還是沒有被分配槽號,接下來我們操作如何進行solt的重分配。
以下命令solt槽的分配交由系統自動完成
./redis-trib.rb reshard 127.0.0.1:7000
這裡寫圖片描述
配置部分截圖:

# redis-trib.rb reshard 127.0.0.1:7000 
#下面是主要過程
How many slots do you want to move (from 1 to 16384)? 2000 
#設定slot數2000
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
#表示全部節點重新洗牌
Do you want to proceed with the proposed reshard plan (yes/no)? yes 
#確認重新分

再次檢視叢集狀態
這裡寫圖片描述
備註:分配成功

  • 異常總結
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608

出現這種情況:某個槽位號被打開了,解決方法
redis-trib.rb fix 127.0.0.1:7000

 #執行部分結果如下:
 [ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608
>>> Fixing open slot 5608
Set as migrating in: 
Set as importing in: 127.0.0.1:7006
>>> Moving all the 5608 slot keys to its owner 127.0.0.1:7001
Moving slot 5608 from 127.0.0.1:7006 to 127.0.0.1:7001: 
>>> ****Setting 5608 as STABLE in 127.0.0.1:7006****
>>> Check slots coverage...

由上可以,設定7006的5608槽為stable即可
具體操作如下:
這裡寫圖片描述
再次檢視叢集,叢集恢復正常!