twemproxy 简介、安装配置

官方地址:
https://github.com/twitter/twemproxy

一、Twemproxy简介及其特性、缺点:
1.Twemproxy简介:
Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII协议和更新的Redis协议。它全部用C写成,使用Apache 2.0 License授权。
项目在Linux上可以工作,而在OSX上无法编译,因为它依赖了epoll API.
twemproxy 主要用于Redis 和 Memcached 的集群代理

2.Twemproxy特性:
速度快
轻量级
维护持久的服务器连接
Keeps connection count on the backend caching servers low.
启用请求和响应的管道
支持代理到多个服务器
同时支持多个服务器池
多个服务器自动分享数据
实现了完整的 memcached ascii 和 redis 协议.
服务器池配置简单,通过一个 YAML 文件即可
Supports multiple hashing modes including consistent hashing and distribution.
可配置在失败时禁用某个节点
Observability through stats exposed on stats monitoring port.
支持 Linux, *BSD, OS X and Solaris (SmartOS)

3.Twemproxy不足之处:
不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
不支持Redis的事务操作
出错提示还不够完善
也不支持select操作
虽然可以动态移除节点,但该移除节点的数据就丢失了
redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布。maillist里面作者说这个需要自己写个脚本实现性能上的损耗

二、Twemproxy部署:
1.Twemproxy 编译安装:
autoconf下载地址: http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
twemproxy下载地址:https://codeload.github.com/twitter/twemproxy/zip/master
twemproxy的安装要求autoconf的版本在2.64以上,否则提示”error: Autoconf version 2.64 or higher is required“
twemproxy的安装方法与git上README.md里面的过程基本相同,只是configure过程中多了–prefix选项,将工具安装到指定目录
(1).autoconf的安装:
tar -xf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make
make install
# 测试是否安装成功:
autoconf –version

(2).twemproxy的安装:
unzip twemproxy-master.zip
cd twemproxy-master
autoreconf -fvi
./configure –prefix=/usr/local/twemproxy
make -j 2
make install

2.Twemproxy 配置文件:
cd /usr/local/twemproxy/
mkdir run conf
vim conf/nutcracker.yml
redis:
listen: 172.16.10.54:6666 # 使用哪个端口启动Twemproxy
redis: true # 是否是Redis的proxy
hash: fnv1a_64 # 指定具体的hash函数
distribution: ketama # 具体的hash算法
auto_eject_hosts: true # 是否在结点无法响应的时候临时摘除结点
timeout: 400 # 超时时间(毫秒)
server_retry_timeout: 3000 # 重试的时间(毫秒)
server_failure_limit: 1 # 结点故障多少次就算摘除掉
servers: # 下面表示所有的Redis节点(IP:端口号:权重)
– 172.16.10.55:6379:1
– 172.16.10.56:6379:1

3.Twemproxy 配置文件测试,命令生效,服务启动:
(1).命令生效:
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/keepalived/sbin:/usr/local/twemproxy/sbin
. ~/.bash_profile # 使命令生效
(2).配置文件测试:
nutcracker -t
nutcracker: configuration file ‘conf/nutcracker.yml’ syntax is ok # 显示此信息,说明配置文件正常
(3).Twemproxy服务启动:
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
(4).Twemproxy配置文件书写需要注意的问题:
A.yml配置文件中每个参数值对分隔符”:”后,需要有一个空格;
B.不同层次的参数需要缩进区分,最好使用tab键缩进,否则nutcracker进程不能启动;
C.在auto_eject_hosts: true的时候,关闭一个redis实例后,写入数据还是提示“(error) ERR Connection refused”
这个与server_retry_timeout参数设置太小有关,默认值30000msec是一个很好的选择。

4.Twemproxy 启动、停止脚本编写:
vim /etc/init.d/twemproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:twemproxy

function Stop()
{
/usr/bin/pkill nutcracker
}
function Start()
{
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
}
case $1 in
stop)
Stop
;;
start)
Start
;;
restart)
Stop
Start
;;
*)
echo “Usage: `basename $0` {stop|start}”
;;
esac
# 添加twemproxy 服务:
chkconfig –add twemproxy

三、Twemproxy测试:
redis-cli -h 172.16.10.54 -p 6666
172.16.10.54:6666> select 0 # 不支持select
Error: Server closed the connection
172.16.10.54:6666> get name
“Michael.xu”
172.16.10.54:6666> set names “wu.zhong”
OK
172.16.10.54:6666> get names
“wu.zhong”

# 性能测试:
redis-benchmark -h 172.16.10.54 -p 6666 -c 100 -t set -d 100 -l -q