Redis 高可用: twemproxy实现缓存服务器分片集群

Posted 薛定谔的DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 高可用: twemproxy实现缓存服务器分片集群相关的知识,希望对你有一定的参考价值。

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多集群方案


以上是关于Redis 高可用: twemproxy实现缓存服务器分片集群的主要内容,如果未能解决你的问题,请参考以下文章

redis高可用集群

Redis集群方案之Twemproxy+HAProxy+Keepalived+Sentinel+主从复制(待实践)

redis集群

[转]Twemproxy 介绍与使用

电商平台 lnmp 架构之 mysql 高速缓存--redis

电商平台 lnmp 架构之 mysql 高速缓存--redis