Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII协议和更新的Redis协议。可以通过它减少Memcached或Redis服务器所打开的连接数,twemproxy的特性如下:
支持失败节点自动删除 可以设置重新连接该节点的时间 可以设置连接多少次之后删除该节点 该方式适合作为cache存储 支持设置HashTag 通过HashTag可以自己设定将两个KEYhash到同一个实例上去。 减少与redis的直接连接数 保持与redis的长连接 可设置代理与后台每个redis连接的数目 自动分片到后端多个redis实例上 多种hash算法(部分还没有研究明白) 可以设置后端实例的权重 避免单点问题 可以平行部署多个代理层.client自动选择可用的一个 支持redis pipelining request 支持状态监控 可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串 可设置监控信息刷新间隔时间 高吞吐量 连接复用,内存复用。 将多个连接请求,组成reids pipelining统一向redis请求。
下面就看看这个神器的安装过程及用法:
1 下载
git clone https://github.com/twitter/twemproxy.git
2 安装其他依赖
apt-get install libtool libsysfs-dev autoreconf
3 编译安装
cd twemproxy ./configure --prefix=/opt/twemproxy make make install
4 配置
mkdir /opt/twemproxy/conf/ cp conf/nutcracker.yml /opt/twemproxy/conf/
5 修改nutcracker.yml配置文件
alpha: listen: 127.0.0.1:22121 hash: fnv1a_64 distribution: ketama auto_eject_hosts: true redis: true server_retry_timeout: 3000 server_failure_limit: 2 servers: - 127.0.0.1:9000:1 - 127.0.0.1:9001:1
6 启动redis实例
/opt/redis-cluster/bin/redis-server /opt/twemproxy/conf/redis-9000.conf /opt/redis-cluster/bin/redis-server /opt/twemproxy/conf/redis-9001.conf
7 启动twemproxy
/opt/twemproxy/sbin/nutcracker -c /opt/twemproxy/conf/nutcracker.yml
8 测试
9 看看twemproxy的配置文件选项
listen: twemproxy监听的地址和端口(ip:port)或者是一个绝对路径sock文件 (/var/run/nutcracker.sock) client_connections: 允许多少redis client连接上来,默认是没有限制的 hash: 数据分片的hash算法,可以是以下值: one_at_a_time md5 crc16 crc32 (crc32 implementation compatible with libmemcached) crc32a (correct crc32 implementation as per the spec) fnv1_64 fnv1a_64 fnv1_32 fnv1a_32 hsieh murmur jenkins hash_tag: 一个由两个字符组成的字符串,在key进行hash的时候是key的一部分。例如 "{}" or "$$"。 Hash tag enable mapping different keys to the same server as long as the part of the key within the tag is the same. distribution: 可以的分发模式,值可以是以下: ketama modula random timeout: 连接后端服务或者等待后端服务响应的超时时间 backlog: TCP backlog(连接队列的大小),默认是512。 backlog队列总和=未完成三次握手队列+已经完成三次握手队列 preconnect: 一个boolen值,用来控制twemproxy是否在redis池中的服务启动前进行连接,默认是false redis: 一个boolen值,用来控制一个服务器池是传输redis协议还是memcache协议,默认是false。 redis_auth: 连接时需要认证 redis_db: 在这个redis服务器池中使用哪个DB,Twemproxy默认连接DB 0 server_connections: 每个服务器的最大连接数,默认我们打开 1个连接 auto_eject_hosts: 一个boolean值,控制一个server达到server_failure_limit故障次数时的动作。默认是false。 server_retry_timeout: 尝试重连后端服务器的超时时间, 默认是 30000 msec. server_failure_limit: 尝试连接后端服务器的次数,默认是2. servers: 一个服务器地址列表,由port和权重构成(ip:port:weight)
10 nutcracker命令的用法
Options: -h, –help : 查看帮助文档,显示命令选项 -V, –version : 查看nutcracker版本 -t, –test-conf : 测试配置脚本的正确性 -d, –daemonize : 以守护进程运行 -D, –describe-stats : 打印状态描述 -v, –verbosity=N : 设置日志级别 (default: 5, min: 0, max: 11) -o, –output=S : 设置日志输出路径,默认为标准错误输出 (default: stderr) -c, –conf-file=S : 指定配置文件路径 (default: conf/nutcracker.yml) -s, –stats-port=N : 设置状态监控端口,默认22222 (default: 22222) -a, –stats-addr=S : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0) -i, –stats-interval=N : 设置状态聚合间隔 (default: 30000 msec) -p, –pid-file=S : 指定进程pid文件路径,默认关闭 (default: off) -m, –mbuf-size=N : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)
果然简单易用,目前来看是比原生的cluster好用一些,不过被反超只是时间问题......