twemproxy(又称 nutcracker)是 Twtter 贡献的一个 轻量级 高性能 的 redis/memcached 代理
client --> twemproxy --> redis/memcached ...
twemproxy 的主要目的是减少与后端缓存服务器的连接数,并通过流水线化的协议与分片功能,方便我们构建可水平扩展的分布式缓存架构
下面就把 twemproxy 安装运行起来,用 twemproxy 代理 2个 Redis
(1)Redis
下载
http://redis.io
解压安装
tar xvf redis-3.2.7.tar.gz
cd redis-3.2.7
make && make install
(2)autoconf
下载
ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
解压安装
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install
(3)twemproxy
git clone https://github.com/twitter/twemproxy.git
cd twemproxy
autoreconf -fvi
./configure
make && make install
src/nutcracker -h
(1)运行2个 redis 实例
进入redis安装目录,复制出2份配置文件
cp redis.conf redis1.conf
cp redis.conf redis2.conf
redis1.conf 不用修改,使用默认的 6379 端口
修改 redis2.conf 中的端口号为 6380
port 6380
pidfile /var/run/redis_6380.pid
启动2个实例
src/redis-server redis1.conf &
src/redis-server redis2.conf &
(2)配置 twemproxy
进入 twemproxy 安装目录,新建配置文件 conf/my.yml
alpha:
listen: 127.0.0.1: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:6379:1 server1
- 127.0.0.1:6380:1 server2
主要参数含义
listen
twemproxy 的地址端口hash
hash 方法名distribution
分布式模式redis
代理的是否为 redisservers
redis 实例列表启动
src/nutcracker -d -c conf/my.yml
查看启动状态
ps -ef | grep nutcracker | grep -v grep
netstat -nltp | grep nutcracker
通过redis客户端连接 twemproxy 执行命令
redis-cli -p 22121
127.0.0.1:22121> set test 'hi'
OK
127.0.0.1:22121> get test
"hi"
127.0.0.1:22121> set hello 'world'
OK
127.0.0.1:22121> get hello
"world"
到2个 redis 实例中查看效果
redis1
redis-cli -p 6379
127.0.0.1:6379> keys *
1) "test"
redis2
redis-cli -p 6380
127.0.0.1:6380> keys *
1) "hello"
可以看到添加的2个key(test、hello)分别保存到了 redis1 和 redis2 上,实现了分片
在分布式环境中,高可用是必须要考虑的
上面这个结构中,高可用方面至少要考虑两个问题:
对于 twemproxy 单点问题,可以增加多个 twemproxy,然后使用 HAProxy 进行负载均衡
对于 redis 单点问题,可以添加多个 slave,然后用 sentinel(相关文章:Redis 高可用性解决方案)进行故障转移
通过 sentinel 对 redis 进行监控,出现故障后,就自动把 slave 升级为 master
故障转以后,redis 地址发生变化,处理方法: