目录
  1. 1. 基础环境
  2. 2. 安装Twemproxy
  3. 3. 配置Twemproxy
  4. 4. 启动Twemproxy
  5. 5. 测试Twemproxy

 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
    8
    tar -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
13
web_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
2
3
4
5
# 测试配置文件
/usr/local/twemproxy/sbin/nutcracker -t /usr/local/twemproxy/conf/nutcracker.yml

# 启动Twemproxy
/usr/local/twemproxy/sbin/nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/twemproxy.pid -o /usr/local/twemproxy/run/twemproxy.log

测试Twemproxy

1
2
3
4
5
6
7
$> /usr/local/redis/bin/redis-cli -p 22122 -a redis_password

127.0.0.1:22122> set name mogl
OK
127.0.0.1:22122> get name
"mogl"
127.0.0.1:22122>

Powered: Hexo, Theme: Nadya remastered from NadyMain