twemproxy是Twitter开源的一个轻量级的缓存代理,支持memcached和redis,官网:https://github.com/twitter/twemproxy,以下主要介绍是在memcached环境下的应用:
应用需求
- memcached 部署分散,主要以本地缓存为主,在性能压力不大情况下,做统一集中的缓存池;
- 提高memcached 的可用性,避免单台memcached崩溃导致缓存失效;
- memcache服务的负载均衡;
另:nutcracker 的目的是 减少客户端对memcached的连接,但目前应用规模,连接数没达到瓶颈,对这个优化效果不大
安装
安装过程比较简单,依赖包比较少,编译安装,去官网下载源码包,解压,进入根目录:(debug模式)
<pre>
./configure --bindir=/usr/bin/--sbindir=/usr/sbin/ --sysconfdir=/etc/nutcracker/ --enable-debug=full
make
make install
</pre>
配置
默认配置文件在 /安装目录/conf/nutcracker.yml,配置字段说明可看官网
配置demo(可多个实例,下面为其中一个实例):
<pre>
MemcachedProxy01:
listen:0.0.0.0:12000 #监听ip、端口
hash:fnv1a_64 #hash 算法
distribution:ketama #分布算法
auto_eject_hosts:true #是否自动剔除down掉的节点
redis: false #是否redis,如果是memcache 为false
preconnect: true#长连接
timeout: 400 #超时
server_retry_timeout: 10000 #失败节点重连间隔
server_failure_limit: 2 #失败n次剔除
servers:
-192.168.94.101:11211:1 #后端缓存服务1(ip、端口、权重)
-192.168.94.102:11211:1 #后端缓存服务2(ip、端口、权重)
</pre>
运行
- 启动
<pre>
/安装目录/src/nutcracker -d -c /安装目录/conf/nutcracker.yml
</pre> -
用netstat 查看运行状态
- 应用通过 memcache 客户端连接(demo中端口为 12000)
- 终止
<pre>
ps -ef|grep nutcracker |grep -v grep |cut -c 9-15|xargs kill -9
</pre>
监控
<pre>
默认监控端口是 ip:22222 指标如下,
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>
缺点和不足
- 管理命令实在是少,连基本的start、restart、reload 都没有,目前要重载配置,先kill,再运行启动命令
- memcache缓存性能有些损耗,官方介绍说在 20%左右
- 高并发下,nutcracker 代理机的cpu占用高,估计一致性hash计算有关
- 代理本身变成单点故障,虽然nutcracker 可以启动多个实例,需引入keepalived的双机热备机制避免单点的问题;
整理于2014/07