成功安装和配置TwemProxy(nutcracker)

成功安装和配置TwemProxy(nutcracker)事件:开发的用于提供redis服务的程序需要访问redis,搭建redis集群后,需要用Twemproxy来分发对redis数据库的操作,所以经过5个小时的折腾,在测试环境安装Twemproxy的时候,也踩过一些坑,好在最终成功安装了,特此记录!一、Twemproxy简介Twemproxy又称nutcracker,是一个memcache、Redis协议的轻量级代理,简单来说,Twempro...

序言

事件:开发的用于提供redis服务的程序需要访问redis,搭建redis集群后,需要用Twemproxy来分发对redis数据库的操作,所以经过5个小时的折腾,在测试环境安装Twemproxy的时候,也踩过一些坑,好在最终成功安装了,并且springboot配置Twemproxy的IP地址和端口后可以,访问Twemproxy后,Twemproxy可以将get和set分配到redis节点中,特此记录!

一、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集群,可以参考我昨天写的博客:原文链接

这里之所以要画删除线是由于在我按照我下面的配置步骤配置完,确实可以分配redis操作给redis集群的成员,由于这篇博客写于一周前,昨天开始在测试环境部署springboot应用时,发现springboot服务访问Twemproxy时,始终无法获取,如下图:
在这里插入图片描述
红框的日志是我打的,而正常的如下图:
在这里插入图片描述
在无法连接的时候,各种问题我都想了,都试了,但无论我如何修改配置文件,测试网络是否正常等等,只要我能想到的都去尝试了,但都一无所获,下午重新搜索Twemproxy的配置,看到这篇文章我发现人家并没有搭建redis集群,而是安装了redis后,直接配置,于是我也尝试了一下,终于得解了,喜不自禁吖~~

重点:在整合java程序和Twemproxy时,Twemproxy里配置的redis不能是已经搭建完成的redis集群,此结论是我自己的实战经验得来的,也欢迎大家交流指正。如果不整合java,可以配置已经搭建好的redis集群,如果还没有搭建redis集群,就可以不用配置集群模式,可以配置多个单例redis安装启动好后,直接配置即可,另外,后面经过尝试,搭建了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目录下,然后解压:

此代码由Java架构师必看网-架构君整理
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

此代码由Java架构师必看网-架构君整理
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就可以。
我配置了3个单例的redis,端口是7000-7002,这里配置了3个redis,在最后一行加入这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我就不放在这里了~
在这里插入图片描述
在这里插入图片描述

说明

本文中的后面这2张截图有的是用QQ截图的,有的是用微信截图的,所以箭头不太一样,我还是比较喜欢微信的箭头~~

终于写完了,一不小心又写了2个多小时,如果对你有帮助或者有疑问,记得留下足迹,欢迎评论和点赞后再走,哈哈哈~~

与君共勉!!!

架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/209890
0
   

发表评论