Redis在3.0版正式引入了集群這個特性。Redis集群是一個分布式(distributed)、容錯(fault-tolerant)的 Redis內存K/V服務, 集群可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset),比如Redis集群並不支持處理多個keys的命令,因為這需要在不同的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的情況下可能會導致不可預料的錯誤。
Redis集群的幾個重要特征:
(1).Redis 集群的分片特征在於將鍵空間分拆了16384個槽位,每一個節點負責其中一些槽位。
(2).Redis提供一定程度的可用性,可以在某個節點宕機或者不可達的情況下繼續處理命令.
(3).Redis 集群中不存在中心(central)節點或者代理(proxy)節點, 集群的其中一個主要設計目標是達到線性可擴展性(linear scalability)。
安裝Redis
通過官網http://redis.io/獲取穩定版源碼包下載地址;
$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz $ tar xzf redis-3.2.3.tar.gz $ cd redis-3.2.3 $ make
注意:
1:可能新linux系統中未安裝gcc,通過如下命令安裝
apt-get install build-essential
2:在make時可能出現錯誤" error: jemalloc/jemalloc.h: No such file or directory",通過如下命令解決。
make MALLOC=libc
安裝Redis-Cluster
首先安裝Redis-Cluster依賴庫
安裝Ruby
apt-get install ruby
安裝Redis.gem
gem intall redis
注意:本步驟需要翻/牆,可以先下載到本地,然后再安裝,下載地址https://rubygems.org/gems/redis/versions/3.3.1
gem install /usr/downloads/redis-3.3.1.gem
創建Redis-Cluster,並分配Redis節點
按照端口號,依次創建對應文件夾,並配置redis.conf信息
啟動redis實例,查看redis進程
注意:若要讓集群正常運作至少需要三個主節點,我們的環境中,每個主節點附帶一個從節點,所以一共六個節點。
通過redis-trib.rb創建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
注意:表示1個salve。redis-trib.rb在redis解壓目錄src中可以找到。
若要讓集群正常運作至少需要三個主節點,我們的環境中,每個主節點附帶一個從節點,所以一共六個節點。
創建結果如下圖,會提示Can I set the above configuration? (type 'yes' to accept):
輸入yes ,然后出現如下圖 , [OK] All 16384 slots covered表示創建成功。
檢查集群狀態,選中其中一個節點即可。
連接Redis集群
注意:節點會對命令請求進行分析和key的slot計算,並且會查找這個命令所要處理的鍵所在的槽。如果要查找的哈希槽正好就由接收到命令的節點負責處理, 那么節點就直接執行這個命令。另一方面, 如果所查找的槽不是由該節點處理的話, 節點將查看自身內部所保存的哈希槽到節點 ID 的映射記錄, 並向客戶端回復一個 MOVED 錯誤。
cluster集群相關命令,更多redis相關命令見文檔:http://redis.readthedocs.org/en/latest/
集群 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 槽中的鍵。
本文鏈接: 文章作者:雨~桐 文章出處:http://www.cnblogs.com/piscesLoveCc/ 如果您覺得閱讀本文對您有幫助,請點一右下角的“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,但是未經作者本人同意,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。