Twemproxy 又称 nutcracker ,是一个memcache、redis协议的轻量级代理,一个用于sharding 的中间件。有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。 twemproxy 为 twitter 开源产品(参考:https://github.com/twitter/twemproxy)
一个简单的 Twemproxy 分片测试:
本人测试在一台服务器上,启动3个redis实例。
本机已经安装了一个redis 实例(192.168.1.222 6379),现在再开启两个实例。
# 创建新的 redis 目录
- [root@centos222 ~]# mkdir -p /var/lib/redis/6380 /var/lib/redis/6381
# 复制2份新的配置文件- [root@centos222 ~]# cp /etc/redis/6379.conf /etc/redis/6380.conf
- [root@centos222 ~]# cp /etc/redis/6379.conf /etc/redis/6381.conf
#
分别修改配置端口及文件位置(或者批量替换修改 %s#6379#6380#g %s#6379#6381#g)- [root@centos222 ~]# vi /etc/redis/6380.conf
- port 6380
- pidfile "/var/run/redis_6380.pid"
- logfile "/var/log/redis_6380.log"
- dir "/var/lib/redis/6380"
- daemonize yes
- #requirepass
- #masterauth
-
- [root@centos222 ~]# vi /etc/redis/6381.conf
- port 6381
- pidfile "/var/run/redis_6381.pid"
- logfile "/var/log/redis_6381.log"
- dir "/var/lib/redis/6381"
- daemonize yes
- #requirepass
- #masterauth
# 启动服务(第一个为默认端口 6379)- [root@centos222 ~]# service redisd start
- [root@centos222 ~]# /usr/local/bin/redis-server /etc/redis/6380.conf
- [root@centos222 ~]# /usr/local/bin/redis-server /etc/redis/6381.conf
# 访问实例(正常)- [root@centos222 ~]# redis-cli -p 6379
- [root@centos222 ~]# redis-cli -p 6380
- [root@centos222 ~]# redis-cli -p 6381
# 安装 autoconf
- [root@centos222 ~]# mkdir -p /usr/local/autoconf
- [root@centos222 ~]# cd /usr/local/src
- [root@centos222 ~]# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
- [root@centos222 ~]# tar -zxvf autoconf-2.69.tar.gz
- [root@centos222 ~]# cd autoconf-2.69
- [root@centos222 ~]# ./configure --prefix=/usr/local/autoconf/
- [root@centos222 ~]# make && make install
# 更改新版本 autoconf 2.69 为默认程序- [root@centos222 ~]# autoconf -V
- [root@centos222 ~]# autoreconf -V
- [root@centos222 ~]# /usr/local/autoconf/bin/autoconf -V
- [root@centos222 ~]# /usr/local/autoconf/bin/autoreconf -V
- [root@centos222 ~]# mv /usr/bin/autoconf /usr/bin/autoconf_backup
- [root@centos222 ~]# mv /usr/bin/autoreconf /usr/bin/autoreconf_backup
- [root@centos222 ~]# ln -s /usr/local/autoconf/bin/autoconf /usr/bin/autoconf
- [root@centos222 ~]# ln -s /usr/local/autoconf/bin/autoreconf /usr/bin/autoreconf
# 安装 twemproxy- [root@centos222 ~]# mkdir -p /usr/local/twemproxy
- [root@centos222 ~]# cd /usr/local/src
- [root@centos222 ~]# wget https://github.com/twitter/twemproxy/archive/master.zip
- [root@centos222 ~]# unzip master
- [root@centos222 ~]# cd /usr/local/src/twemproxy-master
- [root@centos222 ~]# autoreconf -fvi
- [root@centos222 ~]# ./configure --prefix=/usr/local/twemproxy/
- [root@centos222 ~]# make && make install
# 配置环境变量- [root@centos222 ~]# echo "PATH=$PATH:/usr/local/twemproxy/sbin/" >> /etc/profile
- [root@centos222 ~]# source /etc/profile
# 配置文件 nutcracker.yml- [root@centos222 ~]# mkdir -p /etc/nutcracker
- [root@centos222 ~]# cp /usr/local/src/twemproxy-master/conf/nutcracker.yml /etc/nutcracker/
- [root@centos222 ~]# vi /etc/nutcracker/nutcracker.yml
-
- alpha:
- listen: 0.0.0.0:22121 #twemproxy监听的端口
- hash: fnv1a_64 #md5/crc16/crc32/crc32a/fnv1_64/fnv1a_64/fnv1_32/fnv1a_32/hsieh/murmur/jenkins
- distribution: ketama #ketama/modula/random
- auto_eject_hosts: true #自动临时剔除不可用节点
- redis: true #监控是否为redis
- server_retry_timeout: 10000 #剔除节点尝试恢复时间间隔(毫秒)
- server_failure_limit: 2 #节点访问失败N次则被自动剔除
- servers: #(IP:端口号:权重)
- - 192.168.1.222:6379:1
- - 192.168.1.222:6380:1
- - 192.168.1.222:6381:1
# 测试配置文件- [root@centos222 ~]# nutcracker -t -c /etc/nutcracker/nutcracker.yml
- nutcracker: configuration file '/etc/nutcracker/nutcracker.yml' syntax is ok
# 后台运行,配置完成!- [root@centos222 ~]# nutcracker -d -c /etc/nutcracker/nutcracker.yml
#访问 twemproxy 节点,并设置 3 个键值- [root@centos222 ~]# redis-cli -p 22121
- 127.0.0.1:22121>
- 127.0.0.1:22121> set name aaaaa
- OK
- 127.0.0.1:22121> set age 33
- OK
- 127.0.0.1:22121> set value 100000
- OK
# 此时分别连接3个实例,查看键值情况:- [root@centos222 ~]# redis-cli -p 6379
- 127.0.0.1:6379> keys *
- 1) "age"
-
- [root@centos222 ~]# redis-cli -p 6380
- 127.0.0.1:6380> keys *
- 1) "name"
-
- [root@centos222 ~]# redis-cli -p 6381
- 127.0.0.1:6381> keys *
- 1) "value"
可以看到,代理节点 22121 将数据水平划分到了每个节点。测试结果如下图:
参考:
基于Twemproxy的Redis集群方案
Redis代理twemproxy安装,配置,使用
Redis+twemproxy(nutcracker)实现Redis多集群方案
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。