1. 程式人生 > >windows下快速搭建redis叢集

windows下快速搭建redis叢集

1.下載安裝redis

(1)Redis官方不支援Windows,但是Microsoft Open Tech group在 GitHub上開發了一個Win64的版本,下載地址為:

解壓後拷貝到自己的目錄下:

例如我的path:G:\Tool\redis-windows-master

此時開啟cmd命令視窗,換到Redis目錄下,執行

redis-server redis.windows.conf

這時候預設的開啟的redis是6379埠

(2)視窗不要關閉,再重新開啟一個cmd視窗,連線Redis執行

redis-cli.exe -h 127.0.0.1 -p 6379

可以操作redis

這裡寫圖片描述

  1. 安裝Ruby並配置環境

(1)安裝ruby的原因:

redis-cluster安裝前需要安裝ruby環境,搭建叢集需要使用到官方提供的ruby指令碼。

(2)安裝Ruby,Windows可以安裝RubyInstaller,下載地址:

一直下一步安裝完成會自動彈出一個cmd的黑色視窗,需要對Ruby進行配置。安裝目錄必須是英文的不能含有中文否則執行gem命令報錯

(3)執行命令:

gem sources -l 檢視現有的源

gem install redis 安裝redis依賴

這裡寫圖片描述

執行 gem install redis 出現 SSL Connect error時,是因為ruby 沒有包含 SSL 證書,所以 https 的連結被伺服器拒絕。

解決方法很簡單,首先在這裡下載證書http://curl.haxx.se/ca/cacert.pem, 然後再環境變數裡設定 SSL_CERT_FILE 這個環境變數,並指向 cacert.pem 檔案。

這裡寫圖片描述

要讓叢集正常運作至少需要三個主節點,因此我們建立6個節點,三個主節點三個從節點,

這裡寫圖片描述

將安裝的redis資料夾中的redis.windows.conf以及redis-server,分別拷貝到新建的六個資料夾中

2). 更改配置

將六個資料夾下的redis.windows.conf檔案中以下屬性進行修改:

port 7001(對應資料夾的埠號)

cluster-enabled yes

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

3). 啟動6個redis服務

這裡寫圖片描述

其他幾個啟動方法如上圖。

注意:

使用批處理檔案時,可以用下面方法打打多個CMD視窗,並且每個視窗中執行多條命令。

start 用來啟動一個應用

cmd /k 表示cmd後面的命令執行完後不關閉視窗。如果要在執行完成後關閉視窗可以用/c 。詳細請使用cmd/?檢視

“命令1&&命令2&&..” 將要執行的多條命令使用引號全部包起來,並且在命令間用&&分隔。如果只有一條命令則不用引號也可以。

4). 建立啟動叢集

由於建立啟動叢集需要redis-trib.rb檔案,它是一個 Ruby 程式, 這個程式通過向例項傳送特殊命令來完成建立新叢集,檢查叢集或者對叢集進行重新分片(reshared)等工作。

Windows的redis安裝檔案中是沒有這個檔案的,我們需要去官網下載Redis,官網的Redis是Linux版本,在其原始碼src資料夾下,將redis-trib.rb拷貝到本機中Redis的安裝目錄中

最後進入redis-trib.rb檔案所在目錄執行:

ruby 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叢集的bat檔案:

@echo off

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7001&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7002&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7003&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7004&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7005&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master\7006&&redis-server.exe redis.windows.conf"

start cmd /k "G:&&cd G:\Tool\redis-windows-master&&ruby redis-trib.rb create --replicas 1 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 127.0.0.1:7006"

exit

這裡寫圖片描述

這個命令在這裡用於建立一個新的叢集, 選項–replicas 1 表示我們希望為叢集中的每個主節點建立一個從節點。之後跟著的其他引數則是這個叢集例項的地址列表,3個master3個slave

redis-trib 會打印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes ,redis-trib 就會將這份配置應用到叢集當中,讓各個節點開始互相通訊。

5). 連線叢集進行測試

連線叢集的指令:

redis-cli.exe -c -p 7000

這裡寫圖片描述

ava測試:

@Test

public voidtestRedis(){

JedisPoolConfig poolConfig =newJedisPoolConfig();

poolConfig.setMaxIdle(8);

Set nodes =newHashSet();

HostAndPort hostAndPort =newHostAndPort("127.0.0.1",7001);

HostAndPort hostAndPort1 =newHostAndPort("127.0.0.1",7002);

HostAndPort hostAndPort2 =newHostAndPort("127.0.0.1",7003);

HostAndPort hostAndPort3 =newHostAndPort("127.0.0.1",7004);

HostAndPort hostAndPort4 =newHostAndPort("127.0.0.1",7005);

HostAndPort hostAndPort5 =newHostAndPort("127.0.0.1",7006);

nodes.add(hostAndPort);

nodes.add(hostAndPort1);

nodes.add(hostAndPort2);

nodes.add(hostAndPort3);

nodes.add(hostAndPort4);

nodes.add(hostAndPort5);

JedisCluster jedisCluster =newJedisCluster(nodes,100000,poolConfig);//JedisCluster中預設分裝好了連線池.

Map map =  jedisCluster.getClusterNodes();

jedisCluster.set("test","test");

System.out.println(jedisCluster.get("test"));

}

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的雜湊槽演算法:CRC16(‘name’)%16384

被分配到了7001埠的redis服務上。

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