介绍:
twemproxy是twitter开发的一个代理程序,支持memcached和redis,本文将介绍如果使用twemproxy实现redis数据分片搭建一套强大的redis集群。具体twemproxy的特性就百度吧,这里就不介绍了。
背景:
本人在一家游戏公司工作,面对强大的玩家数据,单单的redis主从已经无法满足过大的数据,而且可扩展性不好,twemproxy代理redis服务器,可以把数据sharding到多台服务器的上,每台服务器存储着整个数据集的一部分。因而,当某一台redis服务器宕机了,那么也就失去了一部分数据。如果借助于redis的master-slave replication,能保证在任何一台redis不能工作情况下,仍然能够保证能够存在一个整个的数据集。
1,安装
twemproxy安装需要先安装autoconf
autoconf下载地址:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
twemproxy下载地址:https://codeload.github.com/twitter/twemproxy/zip/master
安装autoconf
tar xvf autoconf-2.69.tar.gz cd autoconf-2.69 ./configure make && make install
安装twemproxy
unzip twemproxy-master.zip cd twemproxy-master autoreconf -fvi ./configure make && make install
安装redis(源码包去官网下载就行,这里用的2.8.3版本)
tar xvf redis-2.8.3.tar.gz cd cd redis-2.8.3 make && make install
2,配置
配置redis(我们这里配置两个redis实例)
实例一:端口6379 实例二:端口6380
在redis源码包里有个redis.conf 文件就是redis的配置文件 我们手动拷贝到/etc/redis/下
cp /root/redis-2.8.3/redis.conf /etc/redis/6379.conf cp /root/redis-2.8.3/redis.conf /etc/redis/6380.conf
修改配置文件里相应的配置
port 6379 logfile "/var/lib/redis/6379/redis.log" dir /var/lib/redis/6379/
启动两个redis实例
redis-server /etc/redis/6379.conf & redis-server /etc/redis/6380.conf &
配置twemproxy
配置文件路径:/etc/nutcracker/nutcracker.yml
cat /etc/nutcracker/nutcracker.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
启动twemproxy
nutcracker -d -c /etc/nutcracker/nutcracker.yml
nutcracker 用法和命令选项
Options:
-h, �Chelp : 查看帮助文档,显示命令选项
-V, �Cversion : 查看nutcracker版本
-t, �Ctest-conf : 测试配置脚本的正确性
-d, �Cdaemonize : 以守护进程运行
-D, �Cdescribe-stats : 打印状态描述
-v, �Cverbosity=N : 设置日志级别 (default: 5, min: 0, max: 11)
-o, �Coutput=S : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, �Cconf-file=S : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, �Cstats-port=N : 设置状态监控端口,默认22222 (default: 22222)
-a, �Cstats-addr=S : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, �Cstats-interval=N : 设置状态聚合间隔 (default: 30000 msec)
-p, �Cpid-file=S : 指定进程pid文件路径,默认关闭 (default: off)
-m, �Cmbuf-size=N : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)
测试twemproxy
使用redis自带的测试工具 redis-benchmark
[root@test]# redis-benchmark -h 127.0.0.1 -q -t set,get,incr,lpush,lpop,sadd,spop,lpush,lrange -c 100 -p 22121 SET: 52631.58 requests per second GET: 54644.81 requests per second INCR: 53191.49 requests per second LPUSH: 52631.58 requests per second LPOP: 53475.93 requests per second SADD: 52083.33 requests per second SPOP: 52910.05 requests per second LPUSH (needed to benchmark LRANGE): 51282.05 requests per second LRANGE_100 (first 100 elements): 13037.81 requests per second LRANGE_300 (first 300 elements): 8116.88 requests per second LRANGE_500 (first 450 elements): 7042.25 requests per second LRANGE_600 (first 600 elements): 4149.38 requests per second
登录2个实例查看数据
[root@test]# redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> KEYS * 1) "counter:__rand_int__" 127.0.0.1:6379> [root@test]# redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> KEYS * 1) "mylist" 2) "key:__rand_int__" 127.0.0.1:6380>
发现我们的测试数据分片到了两个redis实例中。
本次实验是在一台机器上测试的,即twemproxy和两个redis实例都部署到了一起
而实际生产环境不是这样的
生产环境架构:
本文先到这里吧,欢迎各位拍砖~~~