1. 程式人生 > >在windows上搭建redis叢集(Redis-Cluster)

在windows上搭建redis叢集(Redis-Cluster)

Redis叢集策略主要有:


本文主要講解如何搭建分散式叢集。

所需軟體:

Redis 3.2

Ruby語言執行環境

RedisRuby驅動redis-xxxx.gem

建立Redis叢集的工具redis-trib.rb


安裝配置redis 

redis下載地址

1) 下載Redis-x64-3.2.100.zip

**********************************************************************************************************************************************

要讓叢集正常運作至少需要3個主節點,建議配置3個主節點,其餘3個作為各個主節點的從節點(也是官網推薦的模式)

所以需要6臺虛擬機器。

主節點崩潰,從節點的Redis就會提升為主節點,代替原來的主節點工作,崩潰的主Redis恢復工作後,會再成為從節點。

**********************************************************************************************************************************************

2) 建立Redis叢集目錄

redis

解壓後,再複製出 5 份,配置 三主三從叢集。 由於 redis 預設埠號為 6379,那麼其它5份的埠可以為63806381638263836384 並且把目錄使用埠號命名

3) 修改配置檔案

開啟每個Redis目錄下的檔案 redis.windows.conf,修改裡面的埠號分別對應相對應的資料夾名:637963806381638263836384

再修改叢集支援配置,將以下配置前面的#去掉。

cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes


cluster-config-file nodes-6379.conf 是為該節點的配置資訊,這裡使用 nodes-.conf命名方法。服務啟動後會在目錄生成該檔案。

4) 編寫啟動指令碼,或者進入每個埠命名的資料夾下啟動服務

編寫一個 bat 來啟動 redis,在每個節點目錄下建立 startup.bat,內容如下:
title redis-6379
redis-server.exe redis.windows.conf

title命名規則 redis-相對應的埠。

安裝Ruby

redis的叢集使用  ruby指令碼編寫,所以系統需要有 Ruby 環境 ,下載地址 

安裝時3個選項都勾選。

安裝RedisRuby驅動redis-xxxx.gem

下載後解壓,當前目錄切換到解壓目錄中,如 D:\Program Files\Redis_cluster\rubygems-2.7.7 然後命令列執行  ruby setup.rb
 

再用 GEM 安裝 Redis :切換到redis安裝目錄,需要在命令列中,執行 gem install redis

安裝叢集指令碼redis-trib

 開啟該連結把裡面的指令碼儲存為redis-trib.rb,建議儲存到一個Redis的目錄下(不用每個都放),例如放到6379目錄下。

注意:現在開啟這個連結中的程式碼已不支援redis 5.0以下的版本了,需要下載老版本的

指令碼,連結

redis-trib.rb叢集的命令為

redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
 

--replicas 1 表示每個主資料庫擁有從資料庫個數為1master節點不能少於3個,所以我們用了6redis
 

啟動每個節點並且執行叢集構建指令碼

把每個節點下的 start.bat雙擊啟動, 在切換到redis目錄在命令列中執行  

redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
這個命令只需輸入一次就好了,之後節點關閉,重啟就不需要再執行了

注意:如果出現 redis-trib.rb is not longer available!  如果redis版本是5.0以上,則使用如下命令:

redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 12

1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1

原因是redis5.0以上不再需要了,而是使用自帶的redis-cli作為建立叢集的命令了。

在出現 Can I set the above configuration? (type 'yes' to accept):   請確定並輸入 yes 。成功後的結果如下:

 連線叢集進行測試

使用Redis客戶端Redis-cli.exe來檢視資料記錄數,以及叢集相關資訊

命令 redis-cli –c –h ”地址” –p "埠號" ;  c 表示叢集
 


 

檢視叢集的資訊,命令:cluster info

檢視主從關係,命令: info replication

主庫顯示資訊:

從庫顯示資訊:

檢視各個節點分配slot,命令 cluster nodes

005c72fcbd96681520ed866e4d8b9d155e9da197 127.0.0.1:6383 slave 70e30d41c93a648043
14798cc756e2fc513eb8cc 0 1541145105902 5 connected
70e30d41c93a64804314798cc756e2fc513eb8cc 127.0.0.1:6380 master - 0 1541145103879
 2 connected
5461-10922
521b02ed92b7fd3da92c00686f5b004fd1697cf6 127.0.0.1:6381 master - 0 1541145104878
 3 connected
10923-16383
083402d0f0efa9f556da6e2f04b0dfecc014350c 127.0.0.1:6382 slave 5461e1d8f0d880f34b
51e548141d09b12cd8fdd6 0 1541145106902 4 connected
d0386b9f1b7f6c5a3a2687d3e454ad5a2999be7e 127.0.0.1:6384 slave 521b02ed92b7fd3da9
2c00686f5b004fd1697cf6 0 1541145102869 6 connected
5461e1d8f0d880f34b51e548141d09b12cd8fdd6 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5460

可以看到有3個master,3個slave
以及可以看到master各自的slot分佈情況

存幾個值,看下值的分佈

以6380節點為例,管理的slots為5461-10922,key為test的slot為6918,顯然命中6380管理的卡槽6918,所以客戶端也跳轉到了6380。key為test1的slot為4768,在6379的卡槽範圍0-5460,所以客戶端又跳轉到了6379。

Redis叢集資料分配策略:

採用一種叫做雜湊槽 (hash slot)的方式來分配資料,redis cluster 預設分配了 16384 個slot,當我們set一個key 時,會用CRC16演算法來取模得到所屬的slot,然後將這個key分到雜湊槽區間的節點上,具體演算法就是:CRC16(key) % 16384

注意的是:必須要3個以上的主節點,否則在建立叢集時會失敗,三個節點分別承擔的slot 區間是:

節點A覆蓋0-5460;
節點B覆蓋5461-10922;
節點C覆蓋10923-16383.

至此,Redis Cluster在Windows上的配置就完成了