Twemproxy

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
Twemproxy_第1张图片

8 测试

Twemproxy_第2张图片

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


你可能感兴趣的:(twemproxy)