引言
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