Twemproxy是Twitter开源的Redis/Memcache代理软件。
基础环境
- CentOS 6.4 64bit
- Twemproxy 0.4.1
- Redis 2.8.24
安装Twemproxy
安装依赖
1
$> yum -y install libtool
安装autoconf
autoconf的版本必须在2.6.4
以上1
2
3
4
5
6
7
8$> wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
$> tar -zxf autoconf-2.68.tar.gz
$> cd autoconf-2.68
$> ./configure --prefix=/usr/local/
$> make && make install
$> autoconf -V
autoconf (GNU Autoconf) 2.68安装Twemproxy
如果需要twemproxy支持redis_auth
则要选择0.4.1
版本,若redis没有设置认证则并非必须使用0.4.1
。下载twemproxy.0.4.1.tar.gz (需要梯子)
configure时可以指定debug的log输出级别 “full、log、yes、no”,默认是no。1
2
3
4
5
6
7
8tar -zxf twemproxy.tar.gz
cd twemproxy-0.4.1/
autoreconf -fvi
./configure --prefix=/usr/local/twemproxy --enable-debug=log
make && make install
/usr/local/twemproxy/sbin/nutcracker --version
This is nutcracker-0.4.1
配置Twemproxy
/usr/local/twemproxy/conf/nutcracker.yml
1
2
3
4
5
6
7
8
9
10
11
12
13web_redis:
listen: 127.0.0.1:22122
hash: fnv1a_64
hash_tag: "{}"
distribution: ketama
auto_eject_hosts: true
redis: true
redis_auth: redis_password
server_retry_timeout: 3000
server_failure_limit: 1
servers:
- 10.0.6.5:6379:1
- 10.0.6.6:6379:1
- web_redis:实例别名
- listen:监听ip及端口
- 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的一部分作为键值,比如:”user:{user1}:ids”、”user:{user1}:tweets”使用
user1
作为hash会映射到同一台redis上 - distribution: 分片算法
- ketama:一致性Hash。据服务器构造出一个hash ring,并为ring上的节点分配hash范围。ketama的优势在于单个节点添加、删除之后,会最大程度上保持整个群集中缓存的key值可以被重用。
- modula:取模。据key值的hash值取模,根据取模的结果选择对应的服务器。
- random:随机。无论key值的hash是什么,都随机的选择一个服务器作为key值操作的目标。这种分片适合只读缓存。
- auto_eject_hosts: twemproxy是否应该根据server的连接状态重建群集。连接状态是由server_failure_limit阀值来控制。 默认是false。 (是否在节点故障无法响应时自动摘除该节点,如果作为存储需要设置为为false)
- redis: 是否是redis代理,如果是false则是memcached代理。
- redis_auth: 后端redis若需要认证则需此选项。
- server_retry_timeout:单位是毫秒,控制服务器连接的时间间隔(重新连接一个临时摘掉的故障节点的间隔),在auto_eject_host被设置为true的时候产生作用。默认是30000 毫秒。
- server_failure_limit: 控制连接服务器的次数(节点故障无法响应多少次从一致性Hash环临时摘掉它),在auto_eject_host被设置为true的时候产生作用。默认是2。
- servers: 代理的服务器列表,该列表会使用distribution配置的分片算法进行分片。
启动Twemproxy
1 | # 测试配置文件 |
测试Twemproxy
1 | $> /usr/local/redis/bin/redis-cli -p 22122 -a redis_password |