1、twemproxy explore
當(dāng)我們有大量 Redis 或 Memcached 的時候,通常只能通過客戶端的一些數(shù)據(jù)分配算法(比如一致性哈希),來實現(xiàn)集群存儲的特性。雖然Redis 2.6版本已經(jīng)發(fā)布Redis Cluster,但還不是很成熟適用正式生產(chǎn)環(huán)境。 Redis 的 Cluster 方案還沒有正式推出之前,我們通過 Proxy 的方式來實現(xiàn)集群存儲。
Twitter,世界最大的Redis集群之一部署在Twitter用于為用戶提供時間軸數(shù)據(jù)。Twitter Open Source部門提供了Twemproxy。
Twemproxy,也叫nutcraker。是一個twtter開源的一個redis和memcache代理服務(wù)器。 redis作為一個高效的緩存服務(wù)器,非常具有應(yīng)用價值。但是當(dāng)使用比較多的時候,就希望可以通過某種方式 統(tǒng)一進行管理。避免每個應(yīng)用每個客戶端管理連接的松散性。同時在一定程度上變得可以控制。
Twemproxy是一個快速的單線程代理程序,支持Memcached ASCII協(xié)議和更新的Redis協(xié)議:
它全部用C寫成,使用Apache 2.0 License授權(quán)。項目在Linux上可以工作,而在OSX上無法編譯,因為它依賴了epoll API.
Twemproxy 通過引入一個代理層,可以將其后端的多臺 Redis 或 Memcached 實例進行統(tǒng)一管理與分配,使應(yīng)用程序只需要在 Twemproxy 上進行操作,而不用關(guān)心后面具體有多少個真實的 Redis 或 Memcached 存儲。
2、twemproxy特性:
另外可以修改redis的源代碼,抽取出redis中的前半部分,作為一個中間代理層。最終都是通過linux下的epoll 事件機制提高并發(fā)效率,其中nutcraker本身也是使用epoll的事件機制。并且在性能測試上的表現(xiàn)非常出色。
3、twemproxy問題與不足
Twemproxy 由于其自身原理限制,有一些不足之處,如: - 不支持針對多個值的操作,比如取sets的子交并補等(MGET 和 DEL 除外)
- 不支持Redis的事務(wù)操作
- 出錯提示還不夠完善
- 也不支持select操作
4、安裝與配置
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函數(shù)
distribution: ketama #具體的hash算法
auto_eject_hosts: true #是否在結(jié)點無法響應(yīng)的時候臨時摘除結(jié)點
timeout: 400 #超時時間(毫秒)
server_retry_timeout: 2000 #重試的時間(毫秒)
server_failure_limit: 1 #結(jié)點故障多少次就算摘除掉
servers: #下面表示所有的Redis節(jié)點(IP:端口號:權(quán)重)
- 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 實例,它們都可以進行讀寫,這樣你的應(yīng)用程序就可以完全避免所謂的單點故障。
http://blog.csdn.net/hguisu/article/details/9174459/