redis分佈式及HA部署文檔

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

  • 下載redis版本
    官方下載地址:http://download.redis.io/releases/redis-3.2.4.tar.gz

  • 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即可
具體操作如下:
這裏寫圖片描述
再次查看集羣,集羣恢復正常!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章