基于Twemproxy的Redis集群方案

标签: twemproxy redis 集群 | 发表时间:2016-12-18 16:20 | 作者:lixuguang
出处:http://www.iteye.com

概述

由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务。为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需求。因redis 3.0 beta支持的集群功能不适合生产环境的使用,所以我们采用twitter正在使用的twemproxy来搭建redis缓存服务器集群,目前用户包括Pinterest、Tumblr、Twitter、Vine、Kiip、Wuaki.tv、Wanelo、Kontera、Wikimedia、Bright、56.com、Snapchat、Digg、Gawkermedia、3scale.net等。

Twemproxy是memcached和redis协议的代理服务器,并能有效减少大量连接对redis服务器的性能影响,它提供的主要特性如下:

image

 

 

集群架构

image

 

安装Redis

有三台服务器,一台COS1安装twemproxy,另外两台COS2,COS3安装redis。

 

  1. 下载最新安装包:redis-2.8.9.tar.gz , tcl-8.5.7-6.el6.x86_64.rpm ,nutcracker-0.3.0.tar.gz
  2. image
  3. 安装必要组件rpm:
    [root@COS2 redis-2.8.9]# yum install gcc
    [root@COS2 src]# rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm
  4. 安装Redis:
    [root@COS2 src]# tar xvf redis-2.8.9.tar.gz
    [root@COS2 src]# cd redis-2.8.9
    [root@COS2 redis-2.8.9]# make
    …
    Hint: To run 'make test' is a good idea ;)
    make[1]: Leaving directory `/usr/local/src/redis-2.8.9/src'
    
    [root@COS2 redis-2.8.9]# make test
    All tests passed without errors!
    
    Cleanup: may take some time... OK
    make[1]: Leaving directory `/usr/local/src/redis-2.8.9/src'
    [root@COS2 redis-2.8.9]# make install
    [root@COS2 redis-2.8.9]# cd /usr/local/bin/
    [root@COS2 bin]# ll
    total 13908
    -rwxr-xr-x. 1 root root 4170264 Apr 26 11:51 redis-benchmark
    -rwxr-xr-x. 1 root root   22185 Apr 26 11:51 redis-check-aof
    -rwxr-xr-x. 1 root root   45419 Apr 26 11:51 redis-check-dump
    -rwxr-xr-x. 1 root root 4263471 Apr 26 11:51 redis-cli
    -rwxr-xr-x. 1 root root 5726791 Apr 26 11:51 redis-server
  5. 编辑redis配置文件:
    [root@COS2 redis-2.8.9]# cp redis.conf /etc/
    [root@COS2 redis-2.8.9]# vim /etc/red
    redhat-release  redis.conf      
    [root@COS2 redis-2.8.9]# vim /etc/redis.conf
    
    把里面的
    daemonize no  修改成 daemonize yes
  6. 启动redis服务:
    [root@COS2 redis-2.8.9]# redis-server /etc/redis.conf
  7. 测试redis服务:
    [root@COS2 redis-2.8.9]# redis-cli 
    127.0.0.1:6379> set kin kin
    OK
    127.0.0.1:6379> get kin
  8. 同样的步骤安装其他redis服务器。

 

 

安装twemproxy

  1. 安装twemproxy:
    [root@COS1 src]# tar xvf nutcracker-0.3.0.tar.gz
    [root@COS1 nutcracker-0.3.0]# cd nutcracker-0.3.0
    [root@COS1 src]#./configure 
    [root@COS1 nutcracker-0.3.0]# make && make install
  2. 编辑配置文件:
    [root@COS1 conf]# cd /usr/local/src/nutcracker-0.3.0/conf
    [root@COS1 conf]# cp nutcracker.yml /etc/
    [root@COS1 conf]# vim /etc/nutcracker.yml
    alpha:
      listen: 0.0.0.0:22121
      hash: fnv1a_64
      distribution: ketama
      auto_eject_hosts: true
      redis: true
      server_retry_timeout: 2000
      server_failure_limit: 1
      servers: --两台redis服务器的地址和端口
       - 10.23.22.240:6379:1   
       - 10.23.22.241:6379:1
  3. 测试配置文件:
    [root@COS1 nutcracker-0.3.0]# nutcracker -t /etc/nutcracker.yml 
    nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok
  4. 启动twemproxy:
    [root@COS1 nutcracker-0.3.0]# nutcracker  --help
    This is nutcracker-0.3.0
    
    Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
                      [-c conf file] [-s stats port] [-a stats addr]
                      [-i stats interval] [-p pid file] [-m mbuf size]
    
    Options:
      -h, --help             : this help                           
      -V, --version          : show version and exit                 
      -t, --test-conf        : test configuration for syntax errors and exit 
      -d, --daemonize      : run as a daemon                    
      -D, --describe-stats   : print stats description and exit
      -v, --verbosity=N      : set logging level (default: 5, min: 0, max: 11)
      -o, --output=S         : set logging file (default: stderr)
      -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml) #配置
      -s, --stats-port=N     : set stats monitoring port (default: 22222)
      -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0)
      -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
      -p, --pid-file=S       : set pid file (default: off)
      -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)
    [root@COS1 nutcracker-0.3.0]# nutcracker -d -c /etc/nutcracker.yml
    [root@COS1 nutcracker-0.3.0]# ps -ef|grep nutcracker
    root     15358     1  0 02:40 ?        00:00:00 nutcracker -d -c /etc/nutcracker.yml
  5. 测试twemproxy:
    [root@COS1 ~]# redis-cli -p 22121
    127.0.0.1:22121> get kin
    "kin"
    127.0.0.1:22121> set kin king
    OK
    127.0.0.1:22121> get kin
    "king"

 

 

 

 

性能测试

这里使用redis自带的redis-benchmark进行简单的性能测试,测试结果如下:

  1. Set测试:
    1. 通过twemproxy测试:
      [root@COS1 src]# redis-benchmark -h 10.23.22.240 -p 22121 -c 100 -t set -d 100 -l –q
      
             
      SET: 38167.94 requests per second
    2. 直接对后端redis测试:
      [root@COS2 ~]# redis-benchmark -h 10.23.22.241 -p 6379 -c 100 -t set -d 100 -l –q
      
             
      SET: 53191.49 requests per second
  2. Get测试:
    1. 通过twemproxy测试:
      [root@COS1 src]# redis-benchmark -h 10.23.22.240 -p 22121 -c 100 -t get -d 100 -l -q
      GET: 37453.18 requests per second
    2. 直接对后端redis测试:
      [root@COS2 ~]# redis-benchmark -h 10.23.22.241 -p 6379 -c 100 -t get -d 100 -l -q
      GET: 62111.80 requests per second
  3. 查看键值分布:
    [root@COS2 ~]# redis-cli info|grep db0
    db0:keys=51483,expires=0,avg_ttl=0
    
    [root@COS3 ~]# redis-cli info|grep db0
    db0:keys=48525,expires=0,avg_ttl=0

测试结果:以基本的set get命令通过twemproxy性能有所下降;通过twemproxy分布基本平均。测试数据以业务测试为准。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [twemproxy redis 集群] 推荐:

基于Twemproxy的Redis集群方案

- - 互联网 - ITeye博客
由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务. 为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需求. Twemproxy是memcached和redis协议的代理服务器,并能有效减少大量连接对redis服务器的性能影响,它提供的主要特性如下:.

Redis 代理服务Twemproxy

- - CSDN博客云计算推荐文章
      当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性. 虽然Redis 2.6版本已经发布Redis Cluster,但还不是很成熟适用正式生产环境.  Redis 的 Cluster 方案还没有正式推出之前,我们通过 Proxy 的方式来实现集群存储.

Twemproxy – Twitter 开源的 Redis proxy

- - NoSQLFan
在去年的QCon London2012 大会上,Twitter 发表了题为 《 Timelines @ Twitter》的演讲,里面提到以 Redis作为其timeline的主要存储,目前目测全球范围内,Twitter可能是Redis的最大用户了(或者是新浪微博. 而今天我们要说的这个 Twemproxy,是 Twitter 开源出来的 Redis 和 Memcached 代理.

Twemproxy——针对MemCached与Redis的代理

- - InfoQ cn
Twemproxy是一个代理服务器,可以通过它减少 Memcached或 Redis服务器所打开的连接数. Twemproxy有何用途呢. 通过代理的方式减少缓存服务器的连接数. 自动在多台缓存服务器间共享数据. 通过不同的策略与散列函数支持一致性散列. 运行在多个实例上,客户端可以连接到首个可用的代理服务器.

Redis分布式中间件TwemProxy

- - 企业架构 - ITeye博客
twemproxy,也叫nutcraker. 是一个twtter开源的一个redis和memcache代理服务器. redis作为一个高效的缓存服务器,非常具有应用价值. 但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理. 避免每个应用每个客户端管理连接的松散性. 搜索了不少的开源代理项目,知乎实现的python分片客户端.

基于twemproxy的redis分布式应用

- - 数据库 - ITeye博客
根据以往的测试结论,单个redis的实例的内存总量最好控制在8G以内(最大不能超过20G),而实际上应用对redis的内存的需求可能会远远大于8G,因此需要一个保持redis server性能不下降,但可以有效扩充redis server的容量的方案. twemproxy是一个恰当的选择. twemproxy,也叫nutcraker.

[转][转]Twemproxy——针对MemCached与Redis的代理

- - heiyeluren的blog(黑夜路人的开源世界)
Twemproxy是一个代理服务器,可以通过它减少 Memcached或 Redis服务器所打开的连接数. Twemproxy有何用途呢. 通过代理的方式减少缓存服务器的连接数. 自动在多台缓存服务器间共享数据. 通过不同的策略与散列函数支持一致性散列. 通过配置的方式禁用失败的结点. 运行在多个实例上,客户端可以连接到首个可用的代理服务器.

Redis集群功能说明

- gOODiDEA - NoSQLFan
虽然目前可以通过在客户端做hash的方法来构建Redis集群,但Redis原生的集群支持还是颇受期待. 本文是对Redis集群功能官方描述文档的一个翻译,译者是@PPS萝卜同学,也感谢他的投稿分享. 这篇文档主要是为了说明正在进展中的Redis集群功能. 文档主要分为两个部分,前一部分主要介绍我在非稳定分支已完成的代码,后一部分主要介绍还有哪些功能待实现.

redis集群(主从配置)

- - 操作系统 - ITeye博客
市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实. 今天主要内容便是redis主从实现简单的集群,实际上redis的安装配置砸门ttlsa之前就有个文章,废话少说,进入正题吧.

Redis集群明细文档

- - CSDN博客架构设计推荐文章
  Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式). 目前根据文档已经看到Redis正在开发集群功能,其中一部分已经开发完成,但是具体什么时候可以用上,还不得而知. 文档来源: http://redis.io/topics/cluster-spec.