事件:开发的用于提供redis服务的程序需要访问redis,搭建redis集群后,需要用Twemproxy来分发对redis数据库的操作,所以经过5个小时的折腾,在测试环境安装Twemproxy的时候,也踩过一些坑,好在最终成功安装了,特此记录!
一、Twemproxy简介
Twemproxy 又称nutcracker ,是一个memcache、Redis协议的轻量级代理,简单来说,Twemproxy是Twitter开发的一个redis代理proxy,类似于nginx的反向代理或者mysql的代理工具,如amoeba。
Twemproxy通过引入一个代理层,可以将其后端的多台Redis或Memcached实例进行统一管理与分配,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储,有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。
更详细的可以看官方介绍:官方地址链接
我在安装过程中参考的博客有:
1、twemproxy 简介、安装配置
2、twemproxy安装与配置
3、Twemproxy 介绍与使用
第3个帮我从掉的坑的拉出来了,感谢大神们的前车之鉴!!!
安装Twemproxy 之前我已经成功搭建了redis集群,可以参考我昨天写的博客:原文链接
二、安装和配置
1、下载
还是*惯,在win10下载后,传到测试环境的linux系统里,需要下载的包有:
automake-1.12.1.tar.gz 包下载地址:http://ftp.gnu.org/gnu/automake/
autoconf-2.69.tar.gz 包下载地址:http://ftp.gnu.org/gnu/autoconf
libtool-1.5.26.tar.gz 包下载地址:http://ftp.gnu.org/gnu/libtool/
twemproxy-master.zip 包下载地址:https://codeload.github.com/twitter/twemproxy/zip/master
可以选择4个包都下载最新版本的哦~
2、解压4个安装包
这些安装包下载完之后传到linux中,在linux新建的用户下的创建twemproxy 目录:
mkdir twemproxy
将下载好的4个安装包传到Twemproxy目录下,然后解压:
tar -zxvf autoconf-2.69.tar.gz
tar -zxvf automake-1.16.2.tar.gz
tar -zxvf libtool-1.5.26.tar.gz
unzip twemproxy-master.zip
解压之后:
3、安装
我在4个解压后的目录下都建了installs的目录作为安装的目录,而不是安装到/usr/local目录下,因为这个目录需要root权限。
注意:
1)这4个安装顺利不要乱,否则就会安装失败
2)安装的时候如果不是在root用户下安装的,建议和我一样新建安装目录,安装到指定的installs的目录下,如果是在非root用户下安装,就会出现如下错误:
①安装autoconf
cd /home/rdsclsr/twemproxy/autoconf-2.69
./configure --prefix=/home/rdsclsr/twemproxy/autoconf-2.69/installs
make && make install
②安装automake
cd /home/rdsclsr/twemproxy/automake-1.16.2
./configure --prefix=/home/rdsclsr/twemproxy/automake-1.16.2/installs
make && make install
③安装libtool
cd /home/rdsclsr/twemproxy/libtool-1.5.26/libtool-1.5.26.
./configure --prefix=/home/rdsclsr/twemproxy/libtool-1.5.26./installs
make && make install
④安装twemproxy
cd /home/rdsclsr/twemproxy/twemproxy-master
autoreconf -ivf
./configure --prefix=/home/rdsclsr/twemproxy/twemproxy-master/installs
make -j 2
make install
执行情况如下图:
到这里4个就安装完啦~
4、修改环境变量
这里需要root用户,登录到root用户之后
vim ~/.bash_profile
在最后一行添加:
#twemproxy
PATH=$PATH:/home/rdsclsr/twemproxy/twemproxy-master/installs/sbin
保存退出后使配置生效:
source ~/.bash_profile
其实还可以在/etc/profile里添加配置,也需要root权限,另外我用我前面提到的博客1、twemproxy 简介、安装配置里的配置:
#twemproxy
export PATH=$PATH:$HOME/bin:/usr/local/keepalived/sbin:/home/rdsclsr/twemproxy/twemproxy-master/installs/sbin
也是可以的,小伙伴可以自己试试,这种配置需要已经安装好keepalived了。
5、twemproxy的配置
cd /home/rdsclsr/twemproxy/twemproxy-master/installs
mkdir run conf
复制配置文件到新建的conf目录
cd /home/rdsclsr/twemproxy/twemproxy-master/installs/conf
cp -r /home/rdsclsr/twemproxy/twemproxy-master/conf/* .
这里面只需要修改nutcracker.yml就可以,其他的两个不需要修改,所以就先复制一下nutcracker.yml然后修改
cp nutcracker.yml nutcracker.yml.bak.fanhf.202004101917
vim nutcracker.yml
原文件里的配置还是挺多的,我们除了一个alpha留下以外,其他的都删掉就可以
这个文件里的格式很重要,只要格式错了,就会报语法错,所以除了需要修改的地方,其他都不要动~
里面的各个字段的意思可自行百度了解,我这里就不做过多的解释了,“alpha”也是可以修改的~
我们可以看到,这里面除了最后的端口号需要修改,其他都不需要修改,所以就直接修改端口6379就可以。
我的redis集群里的端口是7000-7008,我配置了3个redis:
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:7000:1
- 127.0.0.1:7001:1
- 127.0.0.1:7002:1
如图:
其中22121是twemproxy的默认端口,配置完之后就可以测试配置是否正常,执行:
cd /home/rdsclsr/twemproxy/twemproxy-master/installs/sbin
nutcracker -t
如果出现:
nutcracker: configuration file ‘conf/nutcracker.yml’ syntax is ok
就说明配置文件是正常,然而我的坑就是在这里,无论怎么尝试,执行测试后始终是:
我踩的坑折腾了将近2个小时,又正好是周五,大家都走了,我还在苦逼的找原因,最终无果,就先回家了,已经饿过头了,回到家吃了饭,吃饭的时候也在想,配置文件各种配置我都试了,都不行,到底是什么原因,不死心接着找找有没有前车之鉴,果然功夫不负有心人,我找到了这篇博客遇到的同样的情况原文链接,也按照这个方法尝试了一下,果然解决了,开森开森~~
这里需要做的就是;
cd /home/rdsclsr/twemproxy/twemproxy-master/installs
cp -r ./conf/ ./sbin
cd sbin
./nutcracker -t
这就出现了我期待已久的Ok啦~~
6、启动twemproxy
我看到的博客里有2种启动命令,我试了一下都是可以拉起的twemproxy的进程的,命令如下:
cd /home/rdsclsr/twemproxy/twemproxy-master/installs/sbin
nutcracker -d -c /home/rdsclsr/twemproxy/twemproxy-master/installs/conf/nutcracker.yml -p /home/rdsclsr/twemproxy/twemproxy-master/installs/run/redisproxy.pid -o /home/rdsclsr/twemproxy/twemproxy-master/installs/run/redisproxy.log
或者执行
kill 6448
cd /home/rdsclsr/twemproxy/twemproxy-master/installs/sbin
nohup /home/rdsclsr/twemproxy/twemproxy-master/installs/sbin/nutcracker -c /home/rdsclsr/twemproxy/twemproxy-master/installs/conf/nutcracker.yml &
查看日志和进程:、
可以用:
netstat -nltp | grep nutcracker
来查看情况
7、测试twemproxy
需要回到redis的安装目录的bin目录下:
cd /home/rdsclsr/redis/redis-5.0.8/installs/bin
我的twemproxy和redis集群在一个主机下,执行:
redis-cli -p 22121
奇迹发生了,又卡壳了
于是我就去查了一下,参考了:解决办法 和最后面讲了分析 里面说需要加一个参数:
由redis-cli -p 22121
改为redis-cli -c -p 22121
中间加了-c ,表明是访问redis集群,于是再次尝试
里面有个Redirected是重定向到了7001的redis。
多次尝试:
进入到两另外3个redis节点上查看,发现已经有分片了,7001我就不放在这里了~