1. 程式人生 > >Windows下搭建Redis叢集,增刪節點以及一些常用命令

Windows下搭建Redis叢集,增刪節點以及一些常用命令

Windows 配置Reids叢集 Redis Cluster

前言:本人菜鳥一枚,之前專案要求搭建redis叢集,就研究了一下,總結如下,後續Linux版本的搭建會繼續傳上來,敬請關注,謝謝~~

1. 下載安裝Redis

Redis官方不支援Windows,但是Microsoft Open Tech group在 GitHub上開發了一個Win64的版本,下載地址為: https://github.com/MSOpenTech/redis/releases

解壓之後,拷貝到自定義的Redis目錄下,例如D:\Redis\Redis-x64-3.0.504

開啟cmd,切換到Redis目錄下,執行

redis-server redis.windows.conf

出現下圖即為OK

 

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

redis-cli.exe -h 192.168.1.100 -p 6379

2. 安裝Ruby並配置環境

勾選下面選項不用配置環境變數

 

一直下一步安裝完成會自動彈出一個cmd的黑色視窗,需要對Ruby進行配置

執行gem install redis

 

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

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

3. 搭建Redis叢集

要讓叢集正常運作至少需要三個主節點,不過在剛開始試用叢集功能時,強烈建議使用六個節點:其中三個為主節點,而其餘三個則是各個主節點的從節點。

主節點崩潰,從節點的Redis就會提升為主節點,代替原來的主節點工作,崩潰的主Redis回覆工作後,會成為從節點

1). 建立Redis叢集目錄

redis安裝的根目錄下通過命令列建立6個以埠命名的資料夾

mkdir 7000 7001 7002 7003 7004 7005

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

2). 更改配置

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

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

cluster-enabled yes(例項的叢集模式)

cluster-config-file nodes.conf(儲存節點配置檔案,預設值為nodes.conf)

cluster-node-timeout 5000(是叢集中各節點相互通訊時,允許"失聯"的最大毫秒數,上面的配置為5秒,如果超過5秒某個節點沒向其它節點彙報成功,認為該節點掛了。)

appendonly yes(啟用AOF持久化方式)

3). 啟動6個redis服務

進入每個埠命名的資料夾下逐個啟動服務

redis-server.exe redis.conf

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 192.168.1.100:7000192.168.1.100:7001192.168.1.100:7002192.168.1.100:7003192.168.1.100:7004192.168.1.100:7005

說明:

redis-trib.rbcreate, 這表示我們希望建立一個新的叢集。

--replicas 1 表示我們希望為叢集中的每個主節點建立一個從節點。

之後引數則是例項的地址列表,程式使用這些地址所指示的例項建立新叢集。

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


 

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

5). 連線叢集進行測試

連線叢集的指令:

redis-cli.exe -c -p 7000

 

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上的配置就完成了!

Redis動態增加節點的相關測試

1:首先把需要新增的節點啟動

建立資料夾 mkdir 7007

redis.conf和redis-server.exe兩個檔案拷過來

並將redis.conf中的port等數值改為7007(參考搭建叢集)

然後啟動該節點(雙擊7007.bat) redis-server.exe redis.conf

2:執行以下命令,將這個新節點新增到叢集中

Ruby redis-trib.rb add-node 192.168.1.100:7007 192.168.1.100:7000(前為新節點,後為已存在的任一節點)

 

這就表明新增節點7007成功,此時可以開啟nodes-7007.conf檔案檢視叢集節點資訊

 

 

埠為7007redis已經成功的加入到叢集中,但是這個主節點沒有空間槽。

3:增加了新的節點之後,這個新的節點可以成為主節點或者是從節點.

3.1把這個節點變成主節點

1)使用redis-trib程式,將叢集中的某些雜湊槽移動到新節點裡面,這個新節點就成為真正的主節點了。

執行命令ruby redis-trib.rb reshard 192.168.1.100:7007

 

執行命令如上圖所示:問你是否從原有的1-16384個槽中分配多少到新的主節點我們這裡分配1000為例回車

2然後緊接著會詢問你給id為誰的主節點分配,我們這裡copy這個id就行

 

 

3詢問你是從所有的空間去給這個節點分配空間還是從某一個節點分配

輸入all  回車繼續

 

4然後會給你分配出一個分配計劃,輸入yes開始分配。完成ok

檢視nodes-7007.conf檔案

 

這就表示新新增的主節點分配槽點成功

3.2我們把埠為7008redis新增到叢集,把它作為7007的從節點

1)執行命令 ruby redis-trib.rb add-node 127.0.0.1:7008  127.0.0.1:7001

出現步驟2的結果證明新增節點OK

2)然後連線7008節點,執行命令redis-cli.exe -c -p 7008

3)連線成功後,執行命令

cluster replicate (後面跟主節點的ID,可從nodes-7007.conf中檢視)

檢視nodes-7008.conf可看到7008以成為7007的從節點

Redis叢集刪除節點

1:如果刪除的節點是主節點,這裡我們刪除127.0.0.1:7007節點,這個節點有1000個雜湊槽

首先要把節點中的雜湊槽轉移到其他節點中,執行下面的命令

ruby redis-trib.rb reshard 127.0.0.1:7007

 

系統會提示我們要移動多少雜湊槽 這個127.0.0.1:7007節點有1000個雜湊槽,

輸入 1000

然後系統提示我們輸入要接收這些雜湊槽的節點的ID

這裡輸入 127.0.0.1:7000的節點ID(即為接受這些槽點的節點的id)

然後要我們選擇從那些節點中轉出雜湊槽,

這裡一定要輸入 127.0.0.1:7007這個節點的ID(即為要刪除的節點的id)

然後輸入 yes

最後一步,使用下面的命令把這個節點刪除

ruby redis-trib.rb del-node 127.0.0.1:7007(後跟7007ID)

2:如果節點是從節點的,直接使用下面的命令刪除即可。

rubyredis-trib.rbdel-node  127.0.0.1:7008  (後跟7008ID)

 


3、叢集優缺點

 

4、叢集客戶端命令(redis-cli.exe -c -p 7000)

叢集cluster info :列印叢集的資訊cluster nodes :列出叢集當前已知的所有節點( node),以及這些節點的相關資訊。節點cluster meet <ip> <port> :將 ip 和 port 所指定的節點新增到叢集當中,讓它成為叢集的一份子。cluster forget <node_id> :從叢集中移除 node_id 指定的節點。cluster replicate <node_id> :將當前節點設定為 node_id 指定的節點的從節點。cluster saveconfig :將節點的配置檔案儲存到硬盤裡面。(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)。cluster keyslot <key> :計算鍵 key 應該被放置在哪個槽上。cluster countkeysinslot <slot> :返回槽 slot 目前包含的鍵值對數量。cluster getkeysinslot <slot> <count> :返回 count 個 slot 槽中的鍵  

桌面視覺化工具

https://redisdesktop.com/download

參考了挺多,有點亂,不過慢慢看都能看懂