Redis 代理服務Twemproxy

1、twemproxy explore

      當我們有大量 Redis 或 Memcached 的時候,通常只能通過客戶端的一些數據分配算法(比如一致性哈希),來實現集群存儲的特性。雖然Redis 2.6版本已經發布Redis Cluster,但還不是很成熟適用正式生產環境。 Redis 的 Cluster 方案還沒有正式推出之前,我們通過 Proxy 的方式來實現集群存儲。

       Twitter,世界最大的Redis集群之一部署在Twitter用于為用戶提供時間軸數據。Twitter Open Source部門提供了Twemproxy。

     Twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcache代理服務器。 redis作為一個高效的緩存服務器,非常具有應用價值。但是當使用比較多的時候,就希望可以通過某種方式 統一進行管理。避免每個應用每個客戶端管理連接的松散性。同時在一定程度上變得可以控制。

      Twemproxy是一個快速的單線程代理程序,支持Memcached ASCII協議和更新的Redis協議:

     它全部用C寫成,使用Apache 2.0 License授權。項目在Linux上可以工作,而在OSX上無法編譯,因為它依賴了epoll API.

      Twemproxy 通過引入一個代理層,可以將其后端的多臺 Redis 或 Memcached 實例進行統一管理與分配,使應用程序只需要在 Twemproxy 上進行操作,而不用關心后面具體有多少個真實的 Redis 或 Memcached 存儲。 

2、twemproxy特性:

    • 支持失敗節點自動刪除

      • 可以設置重新連接該節點的時間

      • 可以設置連接多少次之后刪除該節點

      • 該方式適合作為cache存儲

    • 支持設置HashTag

      • 通過HashTag可以自己設定將兩個KEYhash到同一個實例上去。

    • 減少與redis的直接連接數

      • 保持與redis的長連接

      • 可設置代理與后臺每個redis連接的數目

    • 自動分片到后端多個redis實例上

      • 多種hash算法:能夠使用不同的策略和散列函數支持一致性hash。

      • 可以設置后端實例的權重

    • 避免單點問題

      • 可以平行部署多個代理層.client自動選擇可用的一個

    • 支持redis pipelining request

           支持請求的流式與批處理,降低來回的消耗

    • 支持狀態監控

      • 可設置狀態監控ip和端口,訪問ip和端口可以得到一個json格式的狀態信息串

      • 可設置監控信息刷新間隔時間

    • 高吞吐量

      • 連接復用,內存復用。

      • 將多個連接請求,組成reids pipelining統一向redis請求。

     另外可以修改redis的源代碼,抽取出redis中的前半部分,作為一個中間代理層。最終都是通過linux下的epoll 事件機制提高并發效率,其中nutcraker本身也是使用epoll的事件機制。并且在性能測試上的表現非常出色。

3、twemproxy問題與不足

Twemproxy 由于其自身原理限制,有一些不足之處,如: 

  • 不支持針對多個值的操作,比如取sets的子交并補等(MGET 和 DEL 除外)

  • 不支持Redis的事務操作

  • 出錯提示還不夠完善

  • 也不支持select操作

4、安裝與配置 

具體的安裝步驟可用查看github:https://github.com/twitter/twemproxy

Twemproxy 的安裝,主要命令如下:

apt-get install automake  
apt-get install libtool  
git clone git://github.com/twitter/twemproxy.git  
cd twemproxy  
autoreconf -fvi  
./configure --enable-debug=log  
make  
src/nutcracker -h

通過上面的命令就算安裝好了,然后是具體的配置,下面是一個典型的配置 

redis1:  
  listen: 127.0.0.1:6379 #使用哪個端口啟動Twemproxy  
  redis: true #是否是Redis的proxy  
  hash: fnv1a_64 #指定具體的hash函數  
  distribution: ketama #具體的hash算法  
  auto_eject_hosts: true #是否在結點無法響應的時候臨時摘除結點  
  timeout: 400 #超時時間(毫秒)  
  server_retry_timeout: 2000 #重試的時間(毫秒)  
  server_failure_limit: 1 #結點故障多少次就算摘除掉  
  servers: #下面表示所有的Redis節點(IP:端口號:權重)  
   - 127.0.0.1:6380:1  
   - 127.0.0.1:6381:1  
   - 127.0.0.1:6382:1  
  
redis2:  
  listen: 0.0.0.0:10000  
  redis: true  
  hash: fnv1a_64  
  distribution: ketama  
  auto_eject_hosts: false  
  timeout: 400  
  servers:  
   - 127.0.0.1:6379:1  
   - 127.0.0.1:6380:1  
   - 127.0.0.1:6381:1  
   - 127.0.0.1:6382:1

你可以同時開啟多個 Twemproxy 實例,它們都可以進行讀寫,這樣你的應用程序就可以完全避免所謂的單點故障。 

轉自:http://blog.csdn.net/hguisu/article/details/9174459

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2636

(1)
s19930811s19930811
上一篇 2015-04-04 22:09
下一篇 2015-04-04 22:14

相關推薦

  • 網絡總結

    linux 網絡配置 linux的網絡服務是由內核提供。 網卡在內核看來就是個設備,各種網絡配置不在網卡上。各種配置都是針相應網絡管理程序使用的。 不同發行版的網絡管理工具也是不一樣(net-tools/iproute)。網絡服務的管理程序(守護進程)也是不一樣(腳本/程序)。 網絡管理工具是將用戶的設定直接傳遞給內核的網絡服務,及時有效。 很多管理工具可以…

    Linux干貨 2016-09-09
  • Linux發展史

    獨白:    先來說說我對Linux的認識吧,用一個成語形容:狗屁不通,想了一下,文明社會還是和諧點比較好,算是聞所未聞吧。15年初從朋友那得知Linxu,沖著他那十幾K的工資還是挺心動的,說實在很仰慕他,有點計算機基礎,自學兩個月出山,當時月薪8k;而我還是拿著3,4k的工資,也沒什么本領,于是找他要了些有關視頻資料,也開始了自學之路,…

    Linux干貨 2017-04-08
  • 01day-計算機與操作系統基礎

    第1章 計算機基礎 1.1 什么是計算機 計算機是個籠統的概念,泛指一切計算功能的機器。這樣扯的話,以前的算盤也是計算機了。我們現在的計算機應該稱作電子計算機,我天朝人民稱為電腦。聽說谷歌在研究量子計算機,完全不懂是什么玩意。 一不小心在百度百科看到還有光子計算機,生物計算機,嚇我一跳,趕緊復制鏈接過來,自己慢慢看《百度百科—-計算機》 &nbs…

    Linux干貨 2016-06-29
  • Linux基礎命令與詳解(2017后續更新)

    后續陸續更新 命令基礎

    Linux干貨 2017-11-14
  • Linux的發行版及哲學思想

    Linux是一套免費使用和自由傳播的類Unix系統,是一個基于Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的工具軟件、應用程序和網絡協議。它支持32位和64位硬件,是一個性能穩定的多用戶網絡操作系統。嚴格來講,Linux這個詞本身只表示Linux內核,聯合GNU 組織里的各種強大的應用軟件而組成的操作系統。 從Linux的誕生至今,…

    Linux干貨 2016-10-30
  • Linux高級文件系統管理

                                          &n…

    系統運維 2016-09-06
欧美性久久久久