twemproxy+redis 集群(ubuntu下安装)
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 安装
1.安装Twemproxy之前需要安装autoconf(2.65以上版本),而安装autoconf需要安装依赖文件如下:
sudo apt-get install automake sudo apt-get install libtool
sudo apt-get install autoconf
2 安装autoconf 可以通过autoconf --version 命令查看是否安装。
sudo autoconf --version
3 安装 Twemproxy
sudo wget https://github.com/twitter/twemproxy.git sudo cd twemproxy sudo autoreconf -fvi sudo ./configure --prefix=/usr/local/twemproxy sudo make -j 8 sudo make install
4 设置环境变量
echo "PATH=$PATH:/usr/local/twemproxy/sbin/" >> /etc/profile source /etc/profile
6 创建配置文件
sudo cd /usr/local/twemproxy
sudo mkdir run
sudo cd sbin
sudo mkdir conf
sudo cd conf
sudo touch nutcracker.yml
7 配置文件内容
alpha: listen: 192.168.17.128: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:6000:1 server1 - 127.0.0.1:6001:1 server2
这里配置了两台redis服务器
8 测试配置文件 nutcracker -t 测试前注意要把 nutcracker.yml 这个文件拷贝到sbin目录下
sudo ./nutcracker -t
9 启动Twemproxy
sudo nutcracker -d -c /usr/local/twemproxy/sbin/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
10 成功后查看进程
sudo ps -ef | grep nutcracker | grep -v grep
11 测试
sudo docker exec -it redis01 redis-cli -h 192.168.17.128 -p 22121
我这里是以docker的redis-cli 进行连接,当然也可以使用其它客户端连接。我这里为了达到效果,做到两台redis服务都存放数据,通过代码实现如下添加了10条数据
192.168.17.128:22121> get 1 "1" 192.168.17.128:22121> get 2 "2" 192.168.17.128:22121> get 3 "3" 192.168.17.128:22121> get 4 "4" 192.168.17.128:22121> get 5 "5" 192.168.17.128:22121> get 6 "6" 192.168.17.128:22121> get 7 "7" 192.168.17.128:22121> get 8 "8" 192.168.17.128:22121> get 9 "9" 192.168.17.128:22121> get 10 "10" 192.
12 然后通过 6000,6001 连接测试数据
192.168.17.128:6001> get 1 "1" 192.168.17.128:6001> get 2 "2" 192.168.17.128:6001> get 3 "3" 192.168.17.128:6001> get 4 "4" 192.168.17.128:6001> get 5 "5" 192.168.17.128:6001> get 6 "6" 192.168.17.128:6001> get 7 "7" 192.168.17.128:6001> 192.168.17.128:6001> get 8 "8" 192.168.17.128:6001> get 9 "9" 192.168.17.128:6001> get 10 (nil) 192.168.17.128:6001> 192.168.17.128:6000> get 10 "10"