Twemproxy安装配置与使用

引言

Twemproxy是一个由twitter开源的一个服务于redis和memcache的代理服务器,其减少了和缓存服务器直接连接的用户数量,其基本思想就是对用户的key进行哈希以后放入不同的redis集群,这样可以在一定程度上增加写的性能,解决了主从复制中写瓶颈的问题,但这也带来了一些问题,比如数据在多个集群之间是互相不可见的,那么如果一个集群挂了,数据虽然没有丢失(取决于redis中AOF的级别),但是只能再重新启动后才能再得到这些数据.而且集群中也没办法换master,因为Twemproxy在启动时以及在配置文件中写了用户的请求要往哪些服务器发,没办法在运行时更改.就算重新启动加一些集群进去,也有丢失key值的危险.所以从容错上来说其实也是有问题的.详细可看这里

安装

automake-1.16.tar.gz 包下载地址:http://ftp.gnu.org/gnu/automake/

autoconf-2.69.tar.gz 包下载地址:http://ftp.gnu.org/gnu/autoconf

libtool-2.4.5.tar.gz 包下载地址:http://ftp.gnu.org/gnu/libtool/

twemproxy-master.zip 包下载地址:https://github.com/twitter/twemproxy/tree/master

因为我们在解压了twemproxy-master.zip包以后其中的configure和makefile并不是直接可以使用的,其带.ac和.am后缀,我们得下载一些工具才可以使用,命令如下:

当然版本看自己了,上面的版本经测试(deepin 15.7),没有问题,automake-1.15我在install的时候出现了编译问题,可能是我机器的问题吧.

tar xf autoconf-2.69.tar.gz
进入解压目录
./configure --prefix=/usr
make && make install

tar xf automake-1.16.tar.gz
进入解压目录
./configure --prefix=/usr
make && make install

tar xf libtool-2.4.5.tar.gz
进入解压目录
./configure --prefix=/usr
make && make install

unzip twemproxy-master.zip
进入解压目录
aclocal //生成aclocal.m4
autoconf //生成configure
mkdir config //会把配置放进去
autoheader
libtoolize
automake -a
./configure
make && make install

这个时候我们就算是安装上了Twemproxy.

配置

我们直接在当前目录,也就是解压的那个目录中创建.yml文件

vim nutcracker.随便一个名字.yml

然后我们就可以在其中写配置了

sxt:                                                                                                                                 
         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以后要使用的服务
         servers:
                 - 127.0.0.1:6379:1     //这些当然就是Twemproxy所代理的服务器结点啦 
                 - 127.0.0.1:6380:1		//端口后面的数字代表这个服务器的权重,为什么要权重呢,当然是为了负载均衡使用了
                 - 127.0.0.1:6381:1     

当然这只是简单的配置,更多的配置参数见这里->传送门

使用

在使用Twemproxy时我们必须要保证所代理的结点已经启动.我们可以启动三个终端分别启动redis.
我们可以执行如下命令

/在三个终端分别执行
redis-server --port 6379
redis-server --port 6380
redis-server --port 6381

此时我们可以使用如下命令看看以上服务是否已经开启

ss -tanl

在这里插入图片描述
我们可以看到三个服务器已经启动,我们此时最好在用客户端分别连接这三个服务器一次,简单测试是否是slave节点,有可能前面使用这些端口进行过主从复制.只需要在客户端执行写操作就可以了,因为slave中数据是只读的.

如下

lizhaolong@lizhaolong-PC~/Desktop: redis-cli -p 6379       
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> exit
lizhaolong@lizhaolong-PC~/Desktop: redis-cli -p 6380
127.0.0.1:6380> set key hello
(error) READONLY You can't write against a read only slave.
127.0.0.1:6380> SLAVEOF NO ONE //将服务器恢复至master
OK
127.0.0.1:6380> exit
lizhaolong@lizhaolong-PC~/Desktop: redis-cli -p 6381
127.0.0.1:6381> set key hello
OK
127.0.0.1:6381> exit

准备工作完毕,这下我们就可以进入到正题,启动Twemproxy了.

cd /usr/local/sbin //就是nutcracker默认安装的路径 在安装Twemproxy的信息中可以找到
sudo su //注意权限为root staff 需要使用root执行
nutcracker -c /home/lizhaolong/Downloads/twemproxy-master/nutcracker.lizhaolong.yml //刚刚写的.yml的路径

在这里插入图片描述
我们看到已经启动

再执行ss -tanl 看看端口情况,我们指定的Twemproxy的端口22121已经处于监听状态了.

在这里插入图片描述

这个时候我们要做的就是启动一个redis客户端尝试使用
在这里插入图片描述

大功告成!

这里值得一提的是有一些命令其实是不支持的,会报如下错误

Error: Server closed the connection

同时在执行nutcracker的终端也会发现报错的日志信息
在这里插入图片描述

那么哪些命令不支持呢?原来早有先人为我们铺好了路,这里列举的很详细.

参考
https://blog.csdn.net/luckyzhoustar/article/details/52051969?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158435011319725219923301%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158435011319725219923301&biz_id=0&utm_source=distribute.pc_search_result.none-task
https://blog.csdn.net/aspnet_lyc/article/details/66973093

发布了157 篇原创文章 · 获赞 85 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43705457/article/details/104905951