快速的单线程代理程序:Twemproxy

jopen 9年前

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/推ter/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
快速的单线程代理程序:Twemproxy

8 测试

快速的单线程代理程序:Twemproxy

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好用一些,不过被反超只是时间问题......

来自:http://my.oschina.net/guol/blog/507399