[LNMP]twemproxy缓存代理在memcached 缓存环境应用

twemproxy是Twitter开源的一个轻量级的缓存代理,支持memcached和redis,官网:https://github.com/twitter/twemproxy,以下主要介绍是在memcached环境下的应用:

应用需求


  1. memcached 部署分散,主要以本地缓存为主,在性能压力不大情况下,做统一集中的缓存池;
  2. 提高memcached 的可用性,避免单台memcached崩溃导致缓存失效;
  3. memcache服务的负载均衡;

另:nutcracker 的目的是 减少客户端对memcached的连接,但目前应用规模,连接数没达到瓶颈,对这个优化效果不大

安装


安装过程比较简单,依赖包比较少,编译安装,去官网下载源码包,解压,进入根目录:(debug模式)


./configure --bindir=/usr/bin/--sbindir=/usr/sbin/ --sysconfdir=/etc/nutcracker/ --enable-debug=full
make
make install

配置


默认配置文件在 /安装目录/conf/nutcracker.yml,配置字段说明可看官网
配置demo(可多个实例,下面为其中一个实例):


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、端口、权重)

运行


  1. 启动

    /安装目录/src/nutcracker -d -c /安装目录/conf/nutcracker.yml
  2. 用netstat 查看运行状态


    状态
  3. 应用通过 memcache 客户端连接(demo中端口为 12000)
  4. 终止

    ps -ef|grep nutcracker |grep -v grep |cut -c 9-15|xargs kill -9

监控



默认监控端口是 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"

缺点和不足


  1. 管理命令实在是少,连基本的start、restart、reload 都没有,目前要重载配置,先kill,再运行启动命令
  2. memcache缓存性能有些损耗,官方介绍说在 20%左右
  3. 高并发下,nutcracker 代理机的cpu占用高,估计一致性hash计算有关
  4. 代理本身变成单点故障,虽然nutcracker 可以启动多个实例,需引入keepalived的双机热备机制避免单点的问题;

整理于2014/07

你可能感兴趣的:([LNMP]twemproxy缓存代理在memcached 缓存环境应用)