twemproxy 环境搭建

[size=medium] 首先介绍下twemproxy,是一个轻量级的管理cache集群的,主要服务对象是memcached集群和redis集群。策略,主流是以几台节点间的数据备份,防止单点挂掉。笔者公司主要用于memcached的集群管理,防止单点挂机。

经过笔者两天的摸索,终于把twemproxy搭建起来了。可谓饱经风霜。
首先我想说的是,本来是想在自己的mac上搭的,但是经过一天的各种失败,google,百度,各大论坛等等。最后的结论是,目前mac暂时无法搭建该环境(或者说本人的能力暂时无法搞定)。安装twemproxy的时候,需要呦ranlib,libtool等依赖,但是,坑爹的是,mac本身有自带的libtool,和linux上的,有语法上很多的差异。而安装编译的文件内部充斥着linux的libtool的命令,笔者表示相当郁闷。

于是在ubuntu上进行了安装,安装也出奇的顺利。(shit~~~)

基本安装步骤如下:

1.从git上将最新的code clone下来。[/size]

$ git clone https://github.com/twitter/twemproxy.git


[size=medium]2.开始编译,安装[/size]
$ cd  twemproxy/

$ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --enable-debug=log && make && sudo make install


[size=medium]3.上一步的,可能会有一些依赖包要先安装,安装后再执行下编译安装即可。

4.开启twemproxy
虽然,安装编译会在/usr/bin里有nutcracker的快捷,但是切记不能这样开启。需要:
[/size]

$ cd twemproxy/

$ /src/nutcracker -t ##先测试下配置文件是否正确


[size=medium]配置文件是conf/nutcracker.yml ,如果 -t 测试通过,则可以进行启动,配置好自己的环境。[/size]

$  /src/nutcracker


[size=medium]环境[/size]
[list]
[*]ubuntu10.2
[*]macos 10.8.2
[*]twemproxy 2.2.0
[/list]

[size=medium]后期有时间需要深入理解,针对业务也会有相应的代码修改。

编译过程中,会有m4或者autoconf的参数错误。如果你是手动编译这些lib的话,可能需要编译到twemproxy的指定目录下,记忆中好像是/usr/local/share目录下。具体可以参看编译的错误信息。


=================== 分隔线 ===================


参数篇


src/nutcracker.yml

clstuer1:
listen: 0.0.0.0:9999 #使用哪个端口启动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:端口号:权重 别名)
- 192.168.0.22:6379:1 node1
- 192.168.0.22:6380:1 node2
- 192.168.0.22:6381:1 node3
- 192.168.0.23:6381:2 node4


=================== 分隔线 ===================
启动篇

#查看命令信息
./src/nutcracker -h
Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help #帮助
-V, --version : show version and exit #版本
-t, --test-conf : test configuration for syntax errors and exit #测试配置文件是否有语法错误
-d, --daemonize : run as a daemon #是否守护进程启动
-D, --describe-stats : print stats description and exit #描述
-v, --verbosity=N : set logging level (default: 5, min: 0, max: 11)
-o, --output=S : set logging file (default: stderr)
-c, --conf-file=S : set configuration file (default: conf/nutcracker.yml) #指定配置文件
-s, --stats-port=N : set stats monitoring port (default: 22222) #端口
-a, --stats-addr=S : set stats monitoring ip (default: 0.0.0.0) #设置地址
-i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
-p, --pid-file=S : set pid file (default: off)
-m, --mbuf-size=N : set size of mbuf chunk in bytes (default: 16384 bytes)
#查看命令信息
#启动命令
1. 为了方便调试启动
./src/nutcracker -c /opt/module/twenproxy/conf/nutcracker.xrk.yml
2.守护进程启动
./src/nutcracker -d -c /opt/module/twenproxy/conf/nutcracker.xrk.yml


=================== 分隔线 ===================

现实篇


twemproxy 有无数的优点,数据节点间的自动备份等等,都是优点。显著的缺点文章里也有提到,比如
1. 虽然可以动态移除节点,但该移除节点的数据就丢失了。
2. redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现
3. 性能上的损耗(其实作为代理 必定会有损耗, twemproxy损耗属于很小的级别了)
4. 不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
5. 不支持Redis的事务操作
6. 出错提示还不够完善


以上是各大站包括github上一些人提出的,下面回到自我现实。发现问题,解决问题。

Q1:
各种语言的memcached,redis的客户端针对twemproxy,都会有一些不兼容。举个jedis的例子:
发送数据时候,会接受到jedis发送的一些其他的command,贴一下log

[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 9 '192.168.10.195:52175' on event 00FF eof 0 done 0 rb 23202 sb 1452: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 35 '192.168.10.195:52473' on event 00FF eof 0 done 0 rb 7107 sb 444: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 14 '192.168.10.195:51867' on event 00FF eof 0 done 0 rb 46743 sb 2924: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 31 '192.168.10.195:52348' on event 00FF eof 0 done 0 rb 11309 sb 708: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 24 '192.168.10.195:52202' on event 00FF eof 0 done 0 rb 21346 sb 1336: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 27 '192.168.10.195:52458' on event 00FF eof 0 done 0 rb 12483 sb 780: Invalid argument
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 9 on p 6 from '192.168.10.195:52602'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 14 on p 6 from '192.168.10.195:52603'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 15 on p 6 from '192.168.10.195:52604'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 23 on p 6 from '192.168.10.195:52606'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 24 on p 6 from '192.168.10.195:52605'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 27 on p 6 from '192.168.10.195:52607'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 29 on p 6 from '192.168.10.195:52608'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 31 on p 6 from '192.168.10.195:52609'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 35 on p 6 from '192.168.10.195:52610'
[Thu Aug 29 17:09:26 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:26 2013] nc_core.c:205 close c 39 '192.168.10.195:52314' on event 00FF eof 0 done 0 rb 30008 sb 1876: Invalid argument



以前用的一些memcached的client也会出现version的command错误等等。虽然异常无伤大雅,但是对于有洁癖的人来说。。。。还是无法忍受。

解决方案:
自己fork出一个客户端的版本吧。


Q2:
虽然twemproxy是缓存集群代理,可以对单点出现问题进行剔除和重试链接。但是。。。 要是这个proxy的管理节点挂了。。那岂不是。。惨淡了。。。

解决方案:
目前我的测试环境里3格redis节点,用3个proxy来管理,每个proxy都管理3个节点。连接3个proxy都可以。 (待明天测试各种挂点的情况,会贴出详细的分析报告!)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值