[轉載] Redis叢集搭建最佳實務

來源:互聯網
上載者:User

標籤:

轉載自http://blog.csdn.net/sweetvvck/article/details/38315149?utm_source=tuicool

要搭建Redis叢集,首先得考慮下面的幾個問題; Redis叢集搭建的目的是什嗎?或者說為什麼要搭建Redis叢集? Redis叢集搭建的目的其實也就是叢集搭建的目的,所有的叢集主要都是為瞭解決一個問題,橫向擴充。在叢集的概念出現之前,我們使用的硬體資源都是縱向擴充的,但是縱向擴充很快就會達到一個極限,單台機器的Cpu的處理速度,記憶體大小,硬碟大小沒辦法一直滿足需求,而且機器縱向擴充的成本是相當高的。叢集的出現就是能夠讓多台機器像一台機器一樣工作,實現了資源的橫向擴充。 Redis是記憶體型資料庫,當我們要儲存的資料達到一定程度時,單台機器的記憶體滿足不了我們的需求,搭建叢集則是一種很好的解決方案。 那麼如何能夠讓多台機器上的Redis能夠像一台機器上的Redis一樣工作呢? 需要解決以下三個問題;1.對外暴露一個訪問節點2.請求分區(sharding)3.分區要合理(分區均勻,相同的請求要分配到同樣的redis節點) 首先,要對外暴露一個訪問節點,後面可能有多台redis再工作;我們很容易想到的就是代理(Proxy),對於用戶端只需要知道代理,通過代理來和背景多台redis互動。 第二個問題可以使用hash演算法解決,將請求的某個key取hash值,對redis個數取餘,來分配的不同的redis上;然而這麼做不能滿足第三點中的相同的請求要分配到同樣的redis中。在這種情況下一致性雜湊能夠完美的解決這個問題,一致性雜湊可以將redis的節點通過hash演算法分布再一個232 個節點的圓環上,將請求的key用同樣的hash演算法映射到這個圓環上,然後在key值的節點順時針尋找最近的redis節點,這樣就保證了一致性;詳細介紹可以參考:http://blog.csdn.net/sparkliang/article/details/5279393 。 如果讓我來實現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的詳細介紹可以看看這篇文章:http://antirez.com/news/44 ;Twemproxy項目Github地址:https://github.com/twitter/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如果顯示協助資訊,則表示安裝成功;接下來編輯配置資訊,找一個自己喜歡的目錄,建立設定檔,尾碼為yml,如twemproxy.test.yml;填入如下資訊:
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有上述缺點,單相較於起帶來的好處簡直不值一提!但也說明它不適用於所有情況。Redis叢集還有很多種搭建方式,其官方的cluster一直處於beta狀態,相信瞭解了twemproxy後,大家會發現它是現在最好的選擇!

[轉載] Redis叢集搭建最佳實務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.