要搭建redis集群,首先得考慮下面的幾個問題;
redis集群搭建的目的是什麼?或者說為什麼要搭建redis集群?
redis集群搭建的目的其實也就是集群搭建的目的,所有的集群主要都是為了解決乙個問題,橫向擴充套件。
在集群的概念出現之前,我們使用的硬體資源都是縱向擴充套件的,但是縱向擴充套件很快就會達到乙個極限,單台機器的cpu的處理速度,記憶體大小,硬碟大小沒辦法一直滿足需求,而且機器縱向擴充套件的成本是相當高的。集群的出現就是能夠讓多台機器像一台機器一樣工作,實現了資源的橫向擴充套件。
redis是記憶體型資料庫,當我們要儲存的資料達到一定程度時,單台機器的記憶體滿足不了我們的需求,搭建集群則是一種很好的解決方案。
那麼如何能夠讓多台機器上的redis能夠像一台機器上的redis一樣工作呢?
需要解決以下三個問題;
1.對外暴露乙個訪問節點
2.請求分片(sharding)
3.分片要合理(分片均勻,相同的請求要分配到同樣的redis節點)
首先,要對外暴露乙個訪問節點,後面可能有多台redis再工作;我們很容易想到的就是**(proxy),對於客戶端只需要知道**,通過**來和後台的多台redis互動。
第二個問題可以使用hash演算法解決,將請求的某個key取hash值,對redis個數取餘,來分配的不同的redis上;然而這麼做不能滿足第三點中的相同的請求要分配到同樣的redis中。在這種情況下一致性雜湊能夠完美的解決這個問題,一致性雜湊可以將redis的節點通過hash演算法分布再乙個2 32
個節點的圓環上,將請求的key用同樣的hash演算法對映到這個圓環上,然後在key值的節點順時針尋找最近的redis節點,這樣就保證了一致性;詳細介紹可以參考:
。 如果讓我來實現redis集群的話,我會採用zookeeper加上乙個redis守護程式加上一致性hash演算法來實現。不過twicer的大神們已經實現並開源了乙個redis集群方案,我就不重複製造輪子了;來看看這個全球最大的redis集群使用者之一的大神們實現的 twemproxy (nutcracker) 有哪些特性。
twemproxy除了可以作為redis的**,它同樣支援memerycached的ascii協議。我這裡主要了解twemproxy在redis集群上的解決方案。twemproxy除了完美的解決了上面的三個問題(同樣採用了一致性hash演算法),還有乙個重要的特點;它支援
node ejection,如果使用redis當快取,不是很注重資料的一致性的話,開啟node ejection可以在集群中某一台redis掛掉的時候將其送集群列表中移除,達到高可用性。如果redis集群做為資料儲存的話,或者很注重資料的一致性,則可以禁用node jection,但此時需要使用其他方法實現高可用性,比如redis sentiel。twemproxy的詳細介紹可以看看這篇文章:
廢話說了這麼多,來看看怎麼安裝twemproxy,搭建redis集群吧
首先按照github提示的步驟安裝twemproxy:
to build nutcracker from source with debug logs enabled
and
assertions disabled :
$ git clone [email protected]:twitter/twemproxy.git $
$ cd twemproxy $
$ autoreconf -fvi $
$ ./configure --enable-debug=log $
$ make
依次輸入上面的命令,然後輸入: $
$ src/nutcracker -h
如果顯示幫助資訊,則表示安裝成功;
alpha:
listen: 127.0.0.1:55555
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 30000
server_failure_limit: 1
servers:
- 192.168.1.10:6379:1
- 192.168.1.7:6379:1注意縮排,否則將無法啟動twenproxy。 �
其中listen:表示**的ip以及埠號,是暴露給客戶端使用的;hash: 表示使用哪種hash方法,twemproxy提供了多種方式,具體可以看github介紹;distribution表示分配模式,有三種選擇:ketama, modula,random;auto_reject_hosts: 就是上面所說的,自動移除失敗的節點;redis: 表示使用的是redis集群,剩下的配置很簡單就不一一介紹了...... �
通過如此簡單的配置之後,執行./src/nutcracker -c ./conf/nutcracker.test.yml(這裡使用自己的安裝路徑和配置檔案路徑) 就啟動了twemproxy, 客戶端只需要通過redis-cli就能連線上proxy,使用方法和redis完全一樣(但不是所有命令都支援)。 �
這樣redis的集群就搭好了,是不是簡單到爆?不過不要開心得太早,twemproxy也有它的不足之處。
1.不支援事務以及批量操作;
2.相較於直接訪問redis效能有所損耗; �
雖然twemproxy有上述缺點,單相較於起帶來的好處簡直不值一提!但也說明它不適用於所有情況。 r
redis集群還有很多種搭建方式,其官方的cluster一直處於beta狀態,相信了解了twemproxy後,大家會發現它是現在最好的選擇!
搭建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...