Redis之Twemproxy 介绍与使用-yellowcong

Redis集群后的高可用性,Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。不熟悉twemproxy的同学,如果玩过nginx反向代理或者mysql proxy,那么你肯定也懂twemproxy了。其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光可以代理redis,还可以代理memcached。

Twemproxy最大的痛点在于,无法平滑地扩容/缩容
这里写图片描述

但是从上面我们可以看到这样以来Twemproxy就成了单点,所以通常会结合keepalived来实现Twemproxy的高可用。架构图如下:
这里写图片描述

1 wemproxy 安装

1.1 autoconf 安装

wemproxy的安装要求autoconf的版本在2.64以上,否则提示”error: Autoconf version 2.64 or higher is required”。

这里写图片描述

查看自己电脑 上是否安装了autoconf,如果版本高,就不需要重新安装了

#查看当前版本信息
rpm -qf /usr/bin/autoconf  

#卸载2.69 版本,当然你版本高,就不需要卸载重新安装了
rpm -e --nodeps autoconf-2.69  

查看暗黄的autoconf的版本信息
这里写图片描述

如果没有,下载最新的版本进行安装

#获取压缩包
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

#解压
tar -zxvf autoconf-2.69.tar.gz

#进入根目录
cd autoconf-2.69

#安装autoconf
./configure --prefix=/usr 

#编译并安装
make && make install 

#查看当前版本信息 ,V是大写
/usr/bin/autoconf -V

#不带路径,直接这么写也可以
autoconf -V

这里写图片描述

编译并安装完成
这里写图片描述

/usr/bin/autoconf -V,注意‘V’是大写,查看当前版本
这里写图片描述

1.2twemproxy 安装

项目地址:https://github.com/twitter/twemproxy

#下载安装包(通过github的zip来安装)
wget https://codeload.github.com/twitter/twemproxy/zip/master

#解压文件,这个master是zip文件, 如果没有unzip, 需要安装unzip 
#yum install -y unzip
unzip master -d twemproxy

#到根目录
cd twemproxy/twemproxy-master

#安装工具包(有可能系统 没有安装,执行 autoreconf -fvi时,会报错)
yum install libtool   

#配置
autoreconf -fvi

#配置安装环境,一般都是安装到/usr/local目录下
./configure --prefix=/usr/local/twemproxy

#编译
make -j 8

#安装
make install

#配置环境变量
vim /etc/profile

export TWEM_PROXY_BIN=/usr/local/twemproxy/sbin
export PATH=$PATH:$TWEM_PROXY_BIN

#环境变量生效
source /etc/profile

#查看nutcracker 是否安装成功
nutcracker --help

安装完成后,会生成工具nutcrack
这里写图片描述

查看nutcracker 是否安装成功

这里写图片描述

Options:
-h, –help                        : 查看帮助文档,显示命令选项
-V, –version                     : 查看nutcracker版本
-t, –test-conf                   : 测试配置脚本的正确性
-d, –daemonize                   : 以守护进程运行
-D, –describe-stats              : 打印状态描述
-v, –verbosity=N                 : 设置日志级别 (default: 5, min: 0, max: 11)
-o, –output=S                    : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, –conf-file=S                 : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, –stats-port=N                : 设置状态监控端口,默认22222 (default: 22222)
-a, –stats-addr=S                : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N            : 设置状态聚合间隔 (default: 30000 msec)
-p, –pid-file=S                  : 指定进程pid文件路径,默认关闭 (default: off)
-m, –mbuf-size=N                 : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)

2 启动Twemproxy服务

拷贝配文件/twemproxy-master/conf/ nutcracker.yml 到/usr/local/twemproxy/sbin/目录下

#拷贝配置文件
cp nutcracker.yml /usr/local/twemproxy/sbin/

#编辑配置文件
vim /usr/local/twemproxy/sbin/conf/nutcracker.yml

#我的配置,6个节点,三主三从
alpha:
  listen: 192.168.66.100:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 172.17.97.2:7001:1
   - 172.17.97.2:7002:1
   - 172.17.97.2:7003:1
   - 172.17.97.2:7004:1
   - 172.17.97.2:7005:1
   - 172.17.97.2:7006:1

#测试配置文件是否语法没有错误
nutcracker -t 

twemproxy/sbin目录下,有nutcracker 命令 和nutcracker.yml配置文件
这里写图片描述

配置文件目录结构,需要注意,nutracker.yml配置文件,是在nutracker执行名利,同级目录下的conf文件夹下
这里写图片描述

配置文件
这里写图片描述

测试语法是否正确
这里写图片描述

3 启动服务

#创建日志文件
touch /usr/local/twemproxy/run/redisproxy.log

#-d 后台启动
#-c 指定配置文件路径,默认是conf/nutcracker.yml
#-p pid文件 这个会自动生成
#-o 日志文件,这个需要先创建好空文件
nutcracker -d -c /usr/local/twemproxy/sbin/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log

#查看环境
ps -ef  |grep nutcracke

#查看端口
netstat -nltp | grep nutcracker

查看启动的配置
这里写图片描述

查看端口监听,查看到监听到的是22121端口

这里写图片描述

4 测试连接

#连接服务 
# -h 服务器地址
# -p 端口 
# -c 表示连接集群
redis-cli -h 192.168.66.100 -p 22121 -c

这里写图片描述

Twemproxy还是非常的靠谱,虽然性能有损失(20%),但是相对来说还是很值得的,而且久经考验,使用非常广泛。后面再进行性能测试。关于更多更加详细的资料请参考官方文档。

问题合集

1 possibly undefined macro: AC_PROG_LIBTOOL

执行 autoreconf -fvi 后,报错,原来缺少一个工具,需要安装依赖 libtool:

yum install libtool   

这里写图片描述

安装完成后,正常编译,不抱错
这里写图片描述

2 nutcracker: configuration file ‘conf/nutcracker.yml’ syntax is invalid

配置文件存在语法错误,还有可能的问题是配置文件没有找到

这里写图片描述

配置文件目录结构,需要注意,nutracker.yml配置文件,是在nutracker执行名利,同级目录下的conf文件夹下
这里写图片描述

3 bind on p 13 to addr ‘172.17.97.2:22121’ failed: Cannot assign requested address

ip绑定失败,这个问题的原因是由于ip绑定有问题,由于虚拟机 的ip是192.168.66.1/24网段的,所以绑定失败了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值