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"
posted @ 2019-04-07 15:50  dzp123456  阅读(460)  评论(0)    收藏  举报