Twemproxy安装和使用

717 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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:22121Twemproxy的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"