引用:
集群要實現的目的是要將不同的 key 分散放置到不同的 redis 節點,這裡我們需要乙個規則或者演算法,通常的做法是獲取 key 的雜湊值,然後根據節點數來求模,但這種做法有其明顯的弊端,當我們需要增加或減少乙個節點時,會造成大量的 key 無法命中,這種比例是相當高的,所以就有人提出了一致性雜湊的概念。
一致性雜湊有四個重要特徵:
均衡性:也有人把它定義為平衡性,是指雜湊的結果能夠盡可能分布到所有的節點中去,這樣可以有效的利用每個節點上的資源。
單調性:對於單調性有很多翻譯讓我非常的不解,而我想要的是當節點數量變化時雜湊的結果應盡可能的保護已分配的內容不會被重新分派到新的節點。
分散性和負載:這兩個其實是差不多的意思,就是要求一致性雜湊演算法對 key 雜湊應盡可能的避免重複。
但一致性雜湊不是我們今天要介紹的重點,因為 redis 引入另一種雜湊槽(hash slot)的概念。
redis 集群中內建了 16384 個雜湊槽,當需要在 redis 集群中放置乙個 key-value 時,redis 先對 key 使用 crc16 演算法算出乙個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應乙個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點。
使用雜湊槽的好處就在於可以方便的新增或移除節點。
當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;
當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了。
下面開始搭建環境,
1、先建立3個目錄:9001、9002、9003,目錄名即是redis例項的埠號:
2、然後把 redis-server、redis.conf這兩個檔案分別拷貝到這三個目錄裡面:
3、開啟redis.conf檔案,檔案中只配置一下內容:
其餘兩個redis例項的埠分別修改為9002、9003。daemonize yes
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
4、分別進入這3個目錄並啟動這3個例項:
5、接下來使用下列命令建立集群:
./redis-trib.rb create --replicas 0 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:90035.1 報以下錯誤:
因為是執行的ruby的指令碼,需要ruby的環境,安裝命令:
yum install ruby
5.2 再執行第6步的建立集群命令,還會報錯,提示缺少rubygems元件,使用yum安裝:
安裝rubygems:
yum install rubygems
5.3 再執行第
6步的建立集群命令,還會報錯,
提示不能載入
redis
,是因為缺少
redis
和ruby
的介面,使用
gem
安裝:
安裝redis:
gem install redis --version 3.0.0
注意:gem install redis --version 3.0.0 失敗的話,需要修改一下gem的源
gem sources --remove
gem sources -a
5.4
再次執行第
6步的命令,正常執行:
redis集群環境搭建成功。
搭建redis集群
sudo apt get install git python python pip sudo pip install redis sudo pip install e git sudo pip install e git git clone ll binaries total 19m 173582...
redis集群搭建
redis集群搭建持久化保證了即使redis服務重啟不會丟失資料,因為redis服務重啟後會將硬碟上持久化的資料恢復到記憶體中,但是當redis伺服器的硬碟損壞了可能會導致資料丟失,如果通過redis的主從複製機制就可以避免這種單點故障。接下來開始redis集群的搭建。1 ruby環境2 建立集群 ...
redis集群搭建
redis集群部署文件 centos6系統 要讓集群正常工作至少需要3 個主節點,在這裡我們要建立6個 redis 節點,其中三個為主節點,三個為從節點,對應的 redis 節點的ip 和埠對應關係如下 127.0.0.1 7000 127.0.0.1 7001 127.0.0.1 7002 127...