一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
1 简介
Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis或memcached服务器,再原路返回。
2 安装
可以直接从github下载到linux,我是下到windows再传到linux服务的,这里边还有一个坑。。。
2.1 安装automake和libtool
yum install automake libtool
2.2 执行autoreconf命令
autoreconf -fvi
note:因为我是在windows上下载好然后传入linux服务器的,所以在我的服务器上报错如下
[root@VM-0-9-centos twemproxy]# autoreconf -fvi autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: configure.ac: adding subdirectory contrib/yaml-0.2.5 to autoreconf
autoreconf: Entering directory `contrib/yaml-0.2.5'
autoreconf: configure.ac: not using Autoconf
autoreconf: Leaving directory `contrib/yaml-0.2.5'
autoreconf: running: libtoolize --copy --force
.ibtoolize: AC_CONFIG_MACRO_DIR([m4]) conflicts with ACLOCAL_AMFLAGS=-I m4
autoreconf: libtoolize failed with exit status: 1
此时执行以下命令可解决
find . -type f -print0 | xargs -0 dos2unix
具体原因是由于文件夹是在windows下下载的,需要把整个文件夹做一次dos2unix才能保证下面的配置步骤正常
2.3 执行configure文件
./configure
2.4 执行make命令
make
此时安装完成
3 配置
3.1 拷贝nutcracker.init 到/etc/init.d目录下
1、init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。
2、用service命令可执行init.d目录中相应服务的脚本。
cp nutcracker.init /etc/init.d/twemproxy
3.2 给twemproxy文件赋予可执行权限
cd /etc/init.d/
chmod +x twemproxy
3.3 将配置文件放入指定目录
mkdir /etc/nutcracker/
cd /usr/local/redis/twemproxy/conf
cp ./* /etc/nutcracker/
3.4 将可执行程序放入bin目录
/usr/local/redis/twemproxy/src
cp nutcracker /usr/bin/
3.5 修改配置文件
cp nutcracker.yml nutcracker.yml.bak
vi nutcracker.yml
配置如下:
alpha:
listen: 127.0.0.1:22121
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 2000
server_failure_limit: 1
servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1
这里配置两个redis server端口分别为6379和6380
127.0.0.1:6379:1这个1是权重的意思。负载均衡使用。
各个字段的意思:
| 字段 | 解释 |
|---|---|
| listen: 127.0.0.1:22121 | Twemproxy的IP与端口 |
| hash: fnv1a_64 | 使用的hash函数的名字 |
| distribution: ketama | 数据分配方式 |
| auto_eject_hosts: true | 当连接一个server失败次数超过server_failure_limit时是否放弃连接 |
| redis: true | 使用哪一个协议,也就是用户连接上Twemproxy以后要使用的服务 |
| server_retry_timeout: 2000 | 超时重试时间 |
| server_failure_limit: 1 | 与auto_eject_hosts配合 |
| servers: | Twemproxy所代理的服务器结点 |
4 使用
4.1 启动服务
service twemproxy start
4.2 连接
redis-cli -p 22121
4.3 测试
127.0.0.1:22121> set k1 aaa
OK
127.0.0.1:22121> set k2 bbb
OK
127.0.0.1:22121> set 1 ccc
OK
尝试在两台redis服务上查看结果。
127.0.0.1:6379> keys *
1) "1"
127.0.0.1:6380> keys *
1) "k1"
2) "k2"