基于 twemproxy 搭建 redis 集群

概述

由于单台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服务器的性能影响,它提供的主要特性如下:

集群架构

安装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. 安装必要组件rpm:

    [[email protected] redis-2.8.9]# yum install gcc
    [[email protected] src]# rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm
  3. 安装Redis:

    [[email protected] src]# tar xvf redis-2.8.9.tar.gz
    [[email protected] src]# cd redis-2.8.9
    [[email protected] 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‘
    
    [[email protected] 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‘
    [[email protected] redis-2.8.9]# make install
    [[email protected] redis-2.8.9]# cd /usr/local/bin/
    [[email protected] 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

  4. 编辑redis配置文件:

    [[email protected] redis-2.8.9]# cp redis.conf /etc/
    [[email protected] redis-2.8.9]# vim /etc/red
    redhat-release  redis.conf
    [[email protected] redis-2.8.9]# vim /etc/redis.conf
    
    把里面的
    daemonize no  修改成 daemonize yes

  5. 启动redis服务:

    [[email protected] redis-2.8.9]# redis-server /etc/redis.conf
  6. 测试redis服务:

    [[email protected] redis-2.8.9]# redis-cli
    127.0.0.1:6379> set kin kin
    OK
    127.0.0.1:6379> get kin
  7. 同样的步骤安装其他redis服务器。

安装twemproxy

  1. 安装twemproxy:

    [[email protected] src]# tar xvf nutcracker-0.3.0.tar.gz
    [[email protected] nutcracker-0.3.0]# cd nutcracker-0.3.0
    [[email protected] src]#./configure
    [[email protected] nutcracker-0.3.0]# make && make install
  2. 编辑配置文件:

    [[email protected] conf]# cd /usr/local/src/nutcracker-0.3.0/conf
    [[email protected] conf]# cp nutcracker.yml /etc/
    [[email protected] 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. 测试配置文件:

    [[email protected] nutcracker-0.3.0]# nutcracker -t /etc/nutcracker.yml
    nutcracker: configuration file ‘conf/nutcracker.yml‘ syntax is ok
  4. 启动twemproxy:

    [[email protected] 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)
    [[email protected] nutcracker-0.3.0]# nutcracker -d -c /etc/nutcracker.yml
    [[email protected] 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:

    [[email protected] ~]# 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测试:

      [[email protected] 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测试:

      [[email protected] ~]# 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测试:

      [[email protected] 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测试:

      [[email protected] ~]# redis-benchmark -h 10.23.22.241 -p 6379 -c 100 -t get -d 100 -l -q
      GET: 62111.80 requests per second
  3. 查看键值分布:

    [[email protected] ~]# redis-cli info|grep db0
    db0:keys=51483,expires=0,avg_ttl=0
    
    [[email protected] ~]# redis-cli info|grep db0
    db0:keys=48525,expires=0,avg_ttl=0

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

时间: 2024-11-02 23:40:39

基于 twemproxy 搭建 redis 集群的相关文章

基于Twemproxy的Redis集群方案

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

Windows下搭建Redis集群

Redis集群:运行多个Redis实例,然后通过特定的工具,将这些实例以某种关系连接起来,形成一个Redis网络. 详细的内容可以阅读:Redis 集群教程 里面会详细介绍Redis集群的设计思想和内部结构,以及如何搭建Redis集群等. 本文主要讲述如何在Windows系统下快速搭建Redis集群: 1.下载Redis 其GitHub连接如下:https://github.com/MSOpenTech/redis/releases/ Redis提供msi和zip格式的下载文件,这里下载zip格

Windows 环境搭建Redis集群

环境以及引用资料 1.windows server 2008 r2 enterprise  (木有办法,公司的服务器全是如此,就这种环境搭建吧) 2.redis官方资料下载: https://redis.io/download 3.redis官方没有提供相关的程序包,但是Microsoft Open Tech group提供并维护了相关的redis安装包 https://github.com/MSOpenTech/redis(只是提供64位程序) 这里说一句,很多公司的redis都是部署在lin

在windows上搭建redis集群

一 所需软件 Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址   https://github.com/MSOpenTech/redis/releases ;  下载Redis. 集群规划有三个节点的集群,每个节点有一主一备.需要6台虚拟机. 把 redis 解压后,再复制出 5 份,配置 三主三从集群. 由于 redis 默认端口号为 6379,那么其它5份的

搭建Redis 集群,测试集群:对节点主机重新分片

搭建Redis 集群 准备6台redis服务器,具体要求如下: ip地址 端口 etho 日志文件名 192.168.4.51 6051 都可以接收连接请求 redis51.log 192.168.4.52 6052 都可以接收连接请求 redis52.log 192.168.4.53 6053 都可以接收连接请求 redis53.log 192.168.4.54 6054 都可以接收连接请求 redis54.log 192.168.4.55 6055 都可以接收连接请求 redis55.log

laravel项目利用twemproxy部署redis集群的完整步骤

Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 前言 twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redi

使用Codis搭建redis集群服务

转(http://www.jianshu.com/p/f8e968e57863) 一. 应用场景 redis 作为数据结构存储引擎,有着很多优点 高性能单机引擎可以达到5-10W qps 数据结构全面,支持快速开发业务string,list,set,sorted set, hashes 问题: 存储容量受限单机最大容量即为单机内存最大容量 单机数据的持久化依赖aof和rdb机制,如果机器整个down掉,服务不可用 二. redis集群选型 正是由于单机redis引擎有着这样的问题,所以,基本每个

centos下搭建redis集群

必备的工具: redis-3.0.0.tar redis-3.0.0.gem   (ruby和redis接口) 分析:     首先,集群数需要基数,这里搭建一个简单的redis集群(6个redis实例进行集群). 在一台服务器上操作,因此仅需要6个不同的端口号即可.分别是:7001.7002.7003.7004.7005.7006. 步骤:     1.上传redis-3.0.0.tar到服务器(自己指定自己的软件目录),解压redis-3.0.0.tar. 2.安装c语言环境(安装cento

CentOS搭建Redis集群

集群原理-redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->val