搭建Redis集群

2021-07-29 20:57:16 字數 2713 閱讀 6101

要搭建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...