`

Twemproxy介绍与安装、使用

阅读更多

1.总论

 

twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。 搜索了不少的开源代理项目,知乎实现的python分片客户端。node的代理中间层,还有各种restfull的开源代理。

  • RedBrige

    • C + epoll实现的一个小的webserver
    • redis自身执行lua脚本的功能来执行redis命令
    • 访问时在url中带上lua脚本文件的名字,直接调用执行该lua脚本
    • 本质是通过http协议远程执行lua脚本
  • Webdis

    • libevent, http-parser...实现的小型web服务器
    • C 语言实现,通过unix-socket,TCP调用redis命令。
    • 访问方法: /cmd/key/arg0,arg1,... 实质是对redis命令的简单变换
  • redis-proxy

    • 使用node写的redis代理层。
    • 支持主从节点的失败处理(可以仔细研究)
    • 测试后发现性能为原生的1/3
  • twemproxy

    • 支持失败节点自动删除

      • 可以设置重新连接该节点的时间
      • 可以设置连接多少次之后删除该节点
      • 该方式适合作为cache存储
    • 支持设置HashTag

      • 通过HashTag可以自己设定将两个KEYhash到同一个实例上去。
    • 减少与redis的直接连接数

      • 保持与redis的长连接
      • 可设置代理与后台每个redis连接的数目
    • 自动分片到后端多个redis实例上

      • 多种hash算法(部分还没有研究明白)
      • 可以设置后端实例的权重
    • 避免单点问题

      • 可以平行部署多个代理层.client自动选择可用的一个
    • 支持redis pipelining request

    • 支持状态监控

      • 可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
      • 可设置监控信息刷新间隔时间
    • 高吞吐量

      • 连接复用,内存复用。
      • 将多个连接请求,组成reids pipelining统一向redis请求。

另外可以修改redis的源代码,抽取出redis中的前半部分,作为一个中间代理层。最终都是通过linux下的epoll 事件机制提高并发效率,其中nutcraker本身也是使用epoll的事件机制。并且在性能测试上的表现非常出色。

配置部署建议: 编译时候打开logging模块。

redis部署知识: AOF;一种记录redis写操作的文件,用于恢复redis数据。

 

Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故障问题。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。不熟悉twemproxy的同学,如果玩过nginx反向代理或者mysql proxy,那么你肯定也懂twemproxy了。其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光可以代理redis,还可以代理memcached,官方说明:

twemproxy (pronounced "two-em-proxy"), aka nutcracker is a fast and lightweight proxy for memcachedand redis protocol. It was built primarily to reduce the number of connections to the caching servers on the backend. This, together with protocol pipeling and sharding enables you to horizontally scale your distributed caching architecture.

 

Twemproxy架构:

但是从上面我们可以看到这样以来Twemproxy就成了单点,所以通常会结合keepalived来实现Twemproxy的高可用。架构图如下:

上面的架构通常只有一台Twemproxy在工作,另外一台处于备机,当一台挂掉以后,vip自动漂移,备机接替工作。

 

 

2安装

 

1.编译安装:

autoconf下载地址:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
twemproxy下载地址:https://codeload.github.com/twitter/twemproxy/zip/master
twemproxy的安装要求autoconf的版本在2.64以上,否则提示"error: Autoconf version 2.64 or higher is required"。

查找旧版本autoconf,并且卸载

rpm -qf /usr/bin/autoconf  
rpm -e --nodeps autoconf-2.63   

安装最新版本

tar zxvf autoconf-2.69.tar.gz 
cd autoconf-2.69 
./configure --prefix=/usr 
make && make install 

编译安装twemproxy

unzip twemproxy-master.zip
cd twemproxy-master
autoreconf -fvi
./configure --prefix=/usr/local/twemproxy
make -j 8
make install

设置环境变量:

 echo "PATH=$PATH:/usr/local/twemproxy/sbin/" >> /etc/profile
 source /etc/profile

2.创建相关目录(存放配置文件和pid文件)

cd /usr/local/twemproxy
mkdir run conf

3.添加proxy配置文件

vim /usr/local/twemproxy/conf/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:7000:1
   - 127.0.0.1:7001:1
   - 127.0.0.1:7002:1
   - 127.0.0.1:7003:1
   - 127.0.0.1:7004:1
   - 127.0.0.1:7005:1
复制代码

我在本地安装了6个redis实例,不清楚的同学参考redis官网安装或者我前面的文章Redis安装以及主从实现

4.启动Twemproxy服务

nutcracker -t 测试配置文件

测试配置文件这里有个小坑,本来以为要指定配置文件路径,于是这样检查配置文件:

[root@redis-server ~]# nutcracker -t /usr/local/twemproxy/conf/nutcracker.yml
nutcracker: configuration file 'conf/nutcracker.yml' syntax is invalid

后来才反应过来是检查命令所在路径的conf下面的nutcracker.yml文件,于是把conf目录复制到/usr/local/twemproxy/sbin/目录下,再次进行检测:

复制代码
[root@redis-server sbin]# pwd
/usr/local/twemproxy/sbin
[root@redis-server sbin]# ll
total 808
drwxr-xr-x 2 root root   4096 Apr 10 03:02 conf
-rwxr-xr-x 1 root root 819245 Apr  9 23:26 nutcracker
[root@redis-server sbin]# ./nutcracker -t
nutcracker: configuration file 'conf/nutcracker.yml' syntax is ok
[root@redis-server sbin]# 
复制代码

可以看见提示配置文件没有语法错误了。

启动命令:

nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log

nutcracker用法与命令选项

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                        : 查看帮助文档,显示命令选项
-V, –version                     : 查看nutcracker版本
-t, –test-conf                   : 测试配置脚本的正确性
-d, –daemonize                   : 以守护进程运行
-D, –describe-stats              : 打印状态描述
-v, –verbosity=N                 : 设置日志级别 (default: 5, min: 0, max: 11)
-o, –output=S                    : 设置日志输出路径,默认为标准错误输出 (default: stderr)
-c, –conf-file=S                 : 指定配置文件路径 (default: conf/nutcracker.yml)
-s, –stats-port=N                : 设置状态监控端口,默认22222 (default: 22222)
-a, –stats-addr=S                : 设置状态监控IP,默认0.0.0.0 (default: 0.0.0.0)
-i, –stats-interval=N            : 设置状态聚合间隔 (default: 30000 msec)
-p, –pid-file=S                  : 指定进程pid文件路径,默认关闭 (default: off)
-m, –mbuf-size=N                 : 设置mbuf块大小,以bytes单位 (default: 16384 bytes)
复制代码

查看进程,确认启动。

[root@redis-server run]# ps -ef | grep nutcracker | grep -v grep
root       809     1  0 03:09 ?        00:00:00 nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log
[root@redis-server run]# 

5. 简单测试

复制代码
[root@redis-server ~]# netstat -nltp | grep nutcracker
tcp        0      0 0.0.0.0:22222               0.0.0.0:*                   LISTEN      809/nutcracker      
tcp        0      0 127.0.0.1:22121             0.0.0.0:*                   LISTEN      809/nutcracker      
[root@redis-server ~]# redis-cli -p 22121             
127.0.0.1:22121> set name yaun
OK
127.0.0.1:22121> get name
"yaun"
127.0.0.1:22121> 
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.cnblogs.com/gomysql/p/4413922.html

http://www.cnblogs.com/yuxingfirst/archive/2013/02/05/2892947.html

http://www.cnblogs.com/haoxinyue/p/redis.html

分享到:
评论

相关推荐

    第三章 Redis/SSDB+Twemproxy安装与使用

    本章节将深入探讨这三者的安装与使用,帮助你更好地理解和应用这些技术。 首先,我们来了解Redis。Redis是一个开源的、基于内存的数据结构存储系统,支持多种数据结构如字符串、哈希表、列表、集合和有序集合。它...

    twemproxy源码包

    **标题与描述解析** 标题"twemproxy源码包"表明我们要讨论的是关于twemproxy的源代码,它是一个轻量级的代理服务,主要用于在分布式环境...同时,掌握源码安装过程也能帮助我们在不同环境中灵活部署和使用twemproxy。

    Twemproxy 安装过程

    redis集群代理Twemproxy 安装过程,Twemproxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所谓的分片指的是根据一定的算法将要保存的数据保存到不同的...

    Twemproxy 0.4.1

    官方文档提供了详细的安装、配置和使用指南,是学习和使用Twemproxy的重要资源。 8. **与其他解决方案的比较**:Twemproxy相较于直接连接Redis服务器,可以降低网络延迟,提高并发处理能力。但是,它不支持所有...

    Laravel开发-laravel-twemproxy

    标题 "Laravel开发-laravel-twemproxy" 提示我们关注的重点是 Laravel 框架与 twemproxy 的结合使用,而描述中的“图书馆”可能指的是一个具体的 Laravel 包或库,用于帮助开发者更容易地与 twemproxy 交互。...

    cpp-多线程版的Twemproxy

    `Twemproxy`,又称为`nutcracker`,是由Twitter开发的一款轻量级的代理服务,主要用于在Redis和Memcached等缓存系统与应用之间进行数据通信。它通过集中式的管理方式,优化了分布式缓存的性能和可扩展性。然而,原始...

    keepalive+twemproxy+ redis主从安装配置的例子(linux)

    安装Twemproxy通常分为以下几步: 1. 下载源码:访问GitHub仓库(https://github.com/twitter/twemproxy)下载最新版本。 2. 编译安装: ```bash git clone https://github.com/twitter/twemproxy.git cd ...

    Twemproxy需要的依赖,加Redis安装包,tcl-8.5.7-6.el6.x86_64

    在Linux系统(特别是这里提到的基于Red Hat的CentOS 6)中安装和配置Twemproxy时,确实需要依赖一些特定的组件。 首先,让我们详细了解一下Twemproxy本身。Twemproxy是一个由Twitter开发的代理服务器,它允许你通过...

    twemproxy-cookbook:安装和管理Twemproxy的食谱

    w氧基食谱 Chef Coookbook来安装和管理 。要求没有任何。平台类Centos 6+ 红帽6+用法既可以通过添加食谱,也可以通过属性驱动来使用此食谱,也可以仅通过调用自己食谱中的可用提供程序来使用。属性default.rb 属性...

    twemproxy应用包

    twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每...

    twemproxy:用于管理 twemproxy 的厨师食谱

    描述安装/配置 twemproxy要求平台: Ubuntu食谱: 易于属性node['twemproxy']['install_method'] - 默认为"package" 。 node['twemproxy']['repo'] - 默认为"ppa"可以为零。 node['twemproxy']['config_file'] - ...

    twemproxy_v0.5+autoconf-2.69.rar | twemproxy版本为2021年11月最新版

    4. **安装过程**:在安装twemproxy时,通常需要先解压提供的源码包,然后使用autoconf生成配置文件,接着使用make命令编译源代码,最后进行安装。描述中的“顺逆安装一臂之力”可能是指这个压缩包提供了所有必要的...

    twemproxy 0.4.1

    一个由twitter开源的c版本proxy,同时支持memcached和redis=。此版本为可以configure安装的版本

    cpp-改造twemproxy使其支持ssdb协议ssdb的分片和ssdb的读写分离

    标题中的“cpp-改造twemproxy使其支持ssdb协议ssdb的分片和ssdb的读写分离”意味着我们需要深入理解三个主要概念:C++编程、twemproxy(也称为nutcracker)以及SSDB数据库。 1. **C++编程**: C++是一种静态类型、...

    cpp-美团twemproxy是memcached和redis协议的多进程快速和轻量级代理

    其次,它是针对memcached和redis这两种广泛使用的键值存储系统设计的,因此它支持这两者的协议,允许它作为两者之间的中间层,提升数据访问的效率和可靠性。 美团twemproxy的主要设计目标是多进程架构。在计算机...

    beholder:twemproxy 代理与 redis 哨兵一起工作以提供故障转移支持

    依赖关系使用和 ,所以第一步是安装依赖项: $ pip install redis$ pip install pyyaml如果要在 linux 系统范围内安装 python yaml,还可以使用包管理器,例如: $ sudo apt-get install python-yaml$ sudo yum ...

    twemproxy:这是一个 redis 代理,其主要功能就是在多个 redis 节点和访问者之间做路由分发

    twemproxy:这是一个 redis 代理,其主要功能就是在多个 redis 节点和访问者之间做路由分发:访问者不需要自己判断某个 key 该存储到哪一个 redis 节点或者该到哪个节点去获取某个 key 的值——这是一个负载均衡组件

    twemproxy-master.zip

    Twemproxy通过引入一个代理层,可以将其后端的多台Redis或Memcached实例进行统一管理与分配,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储,有了Twemproxy,...

    cpp-twemproxy一个memcached和redis的快速轻量级代理

    1. **编译安装**:下载源代码后,使用C++编译器进行编译,通常包括`./autogen.sh`,`./configure`和`make`等步骤。 2. **配置**:编写或修改配置文件(如`conf/nutcracker.yml`),定义代理如何连接到后端的...

Global site tag (gtag.js) - Google Analytics