twemproxy是Twitter開(kāi)源的一個(gè)輕量級(jí)的緩存代理,支持memcached和redis,官網(wǎng):https://github.com/twitter/twemproxy,以下主要介紹是在memcached環(huán)境下的應(yīng)用:
應(yīng)用需求
- memcached 部署分散,主要以本地緩存為主,在性能壓力不大情況下,做統(tǒng)一集中的緩存池;
- 提高memcached 的可用性,避免單臺(tái)memcached崩潰導(dǎo)致緩存失效;
- memcache服務(wù)的負(fù)載均衡;
另:nutcracker 的目的是 減少客戶(hù)端對(duì)memcached的連接,但目前應(yīng)用規(guī)模,連接數(shù)沒(méi)達(dá)到瓶頸,對(duì)這個(gè)優(yōu)化效果不大
安裝
安裝過(guò)程比較簡(jiǎn)單,依賴(lài)包比較少,編譯安裝,去官網(wǎng)下載源碼包,解壓,進(jìn)入根目錄:(debug模式)
<pre>
./configure --bindir=/usr/bin/--sbindir=/usr/sbin/ --sysconfdir=/etc/nutcracker/ --enable-debug=full
make
make install
</pre>
配置
默認(rèn)配置文件在 /安裝目錄/conf/nutcracker.yml,配置字段說(shuō)明可看官網(wǎng)
配置demo(可多個(gè)實(shí)例,下面為其中一個(gè)實(shí)例):
<pre>
MemcachedProxy01:
listen:0.0.0.0:12000 #監(jiān)聽(tīng)ip、端口
hash:fnv1a_64 #hash 算法
distribution:ketama #分布算法
auto_eject_hosts:true #是否自動(dòng)剔除down掉的節(jié)點(diǎn)
redis: false #是否redis,如果是memcache 為false
preconnect: true#長(zhǎng)連接
timeout: 400 #超時(shí)
server_retry_timeout: 10000 #失敗節(jié)點(diǎn)重連間隔
server_failure_limit: 2 #失敗n次剔除
servers:
-192.168.94.101:11211:1 #后端緩存服務(wù)1(ip、端口、權(quán)重)
-192.168.94.102:11211:1 #后端緩存服務(wù)2(ip、端口、權(quán)重)
</pre>
運(yùn)行
- 啟動(dòng)
<pre>
/安裝目錄/src/nutcracker -d -c /安裝目錄/conf/nutcracker.yml
</pre> -
用netstat 查看運(yùn)行狀態(tài)
狀態(tài) - 應(yīng)用通過(guò) memcache 客戶(hù)端連接(demo中端口為 12000)
- 終止
<pre>
ps -ef|grep nutcracker |grep -v grep |cut -c 9-15|xargs kill -9
</pre>
監(jiān)控
<pre>
默認(rèn)監(jiān)控端口是 ip:22222 指標(biāo)如下,
server_eof "# eof on serverconnections"
server_err "# errors on serverconnections"
server_timedout "# timeouts on serverconnections"
server_connections "# active server connections"
requests "# requests"
request_bytes "total request bytes"
responses "# responses"
response_bytes "total response bytes"
in_queue "# requests in incomingqueue"
in_queue_bytes "current request bytes in incomingqueue"
out_queue "# requests in outgoingqueue"
out_queue_bytes "current request bytes in outgoing queue"
</pre>
缺點(diǎn)和不足
- 管理命令實(shí)在是少,連基本的start、restart、reload 都沒(méi)有,目前要重載配置,先kill,再運(yùn)行啟動(dòng)命令
- memcache緩存性能有些損耗,官方介紹說(shuō)在 20%左右
- 高并發(fā)下,nutcracker 代理機(jī)的cpu占用高,估計(jì)一致性hash計(jì)算有關(guān)
- 代理本身變成單點(diǎn)故障,雖然nutcracker 可以啟動(dòng)多個(gè)實(shí)例,需引入keepalived的雙機(jī)熱備機(jī)制避免單點(diǎn)的問(wèn)題;
整理于2014/07
