Redis 叢集cluster

來源:互聯網
上載者:User

標籤:redis 叢集   redis-cluster

在網上尋找 redis叢集的相關文檔,很多都是以主從或者主從容錯移轉而說是叢集,前幾天玩了下叢集,今天終於寫出來一部分內容,可以分享出來了。

 一、       Redis叢集基礎介紹 

1、Redis叢集簡介:
Redis叢集是一個可以在多個 Redis 節點之間進行資料共用的設施。
Redis 叢集通過分區來提供一定程度的可用性:即使叢集中有一部分節點失效或者無法進行通訊, 叢集也可以繼續處理命令請求。
Redis 叢集提供了以下兩個好處:
(1、)將資料自動切分(split)到多個節點的能力。
(2、)當叢集中的一部分節點失效或者無法進行通訊時, 仍然可以繼續處理命令請求的能力。
2、叢集的資料分區功能:
Redis 叢集沒有使用一致性hash, 而是引入了雜湊槽的概念。
Redis 叢集有16384個雜湊槽,每個key通過CRC16校正後對16384模數來決定放置哪個槽.叢集的每個節點負責一部分hash槽。這種結構很容易添加或者刪除節點,並且無論是添加刪除或者修改某一個節點,都不會造成叢集停用狀態。
3、Redis叢集的主從架構:
為了使在部分節點失敗或者大部分節點無法通訊的情況下叢集仍然可用,所以叢集使用了主從複製模型,每個節點都會有N-1個複製品。
eg:如有A,B,C三個節點的叢集,在沒有複製模型的情況下,如果節點B失敗了,那麼整個叢集就會以為缺少B節點所承擔的雜湊槽這個範圍的槽而不可用。

然而如果在叢集建立的時候(或者過一段時間)我們為每個節點添加一個從節點A1,B1,C1,那麼整個叢集便有三個master節點和三個slave節點群組成,這樣在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務,整個叢集便不會因為槽找不到而不可用了。當然如果B和B1都down了,那叢集還是停用。

二、      搭建並使用Redis叢集
1、架構剖析:

IP                                                       Port

192.168.1.223                                 6379、6380、6381、6382 6383

192.168.1.226                                  6379、6380、6381、6382 6383

2、安裝redis:
redis的安裝方法不再闡述,看參考前面的文檔:
http://www.minunix.com/2014/07/redis-install/
3、修改redis設定檔:
其它設定檔和上文中的配置一樣,只需要將設定檔中的cluster 部分中開啟以下三項:
cluster-enabled yes

cluster-config-file "nodes.conf"

cluster-node-timeout 1500

其它配置同Redis基礎及部署文檔 ;

檔案中的 cluster-enabled 選項用於開執行個體的叢集模式, 而 cluster-conf-file 選項則設定了儲存節點設定檔的路徑, 預設值為 nodes.conf.節點設定檔無須人為修改, 它由 Redis 叢集在啟動時建立, 並在有需要時自動進行更新。
要讓叢集正常運作至少需要三個主節點,不過在剛開始試用叢集功能時, 強烈建議使用六個節點: 其中三個為主節點, 而其餘三個則是各個主節點的從節點。本例中使用10個節點,5個主節點,5個從節點。

4、搭建叢集:

通過使用 Redis 叢集命令列工具 redis-trib , 編寫節點設定檔的工作可以非常容易地完成: redis-trib位於Redis源碼的src檔案夾中, 它是一個Ruby程式, 這個程式通過向執行個體發送特殊命令來完成建立新叢集, 檢查叢集, 或者對叢集進行重新分區(reshared)等工作。
# ./redis-trib create --replicas 1 192.168.1.223:6379 192.168.1.223:6380 192.168.1.223:6381 192.168.1.223:6382 192.168.1.223:6383 192.168.1.226:6379

192.168.1.226:6380 192.168.1.226:6381 192.168.1.226:6382 192.168.1.226:6383

此語句是建立一個叢集的命令,其中“--replicas 1”意思是為叢集中的每個節點建立一個從節點,後面的是節點的實體ip:port;
redis-trib 會列印出一份預想中的配置給你看, 如果你覺得沒問題的話, 就可以輸入 yes , redis-trib 就會將這份配置應用到叢集當中,各個節點互相通訊,得到如下結果:

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

這表示叢集中的 16384 個槽都有至少一個主節點在處理, 叢集運作正常。

5、測試叢集:

測試 Redis 叢集比較簡單的辦法就是使用 redis-rb-cluster 或者 redis-cli , 我們將使用 redis-cli 為例來進行示範:

# ./redis-cli -h 192.168.1.223 -p 6379 -c

192.168.1.223:6379> set aa bb

OK

192.168.1.223:6379> set 33 dd

-> Redirected to slot [5878] located at 192.168.1.226:6379

OK

192.168.1.226:6379>get aa

-> Redirected to slot [1180] located at 192.168.1.223:6379

"bb"

192.168.1.223:6379> get 33

-> Redirected to slot [5878] located at 192.168.1.226:6379

"dd"

由此可以看到,redis叢集已經搭建完成。

redis-cli 對叢集的支援是非常基本的, 所以它總是依靠 Redis 叢集節點來將它轉向(redirect)至正確的節點。一個真正的(serious)叢集用戶端應該做得比這更好: 它應該用緩衝記錄起雜湊槽與節點地址之間的映射(map), 從而直接將命令發送到正確的節點上面。這種映射只會在叢集的配置出現某些修改時變化, 比如說, 在一次容錯移轉(failover)之後, 或者系統管理員通過添加節點或移除節點來修改了叢集的布局(layout)之後, 諸如此類。



本文出自 “夢想照進現實” 部落格,請務必保留此出處http://lookingdream.blog.51cto.com/5177800/1828497

Redis 叢集cluster

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.