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。Redis是一个开源的、基于内存的数据结构存储系统,支持多种数据结构如字符串、哈希表、列表、集合和有序集合。它...
**标题与描述解析** 标题"twemproxy源码包"表明我们要讨论的是关于twemproxy的源代码,它是一个轻量级的代理服务,主要用于在分布式环境...同时,掌握源码安装过程也能帮助我们在不同环境中灵活部署和使用twemproxy。
redis集群代理Twemproxy 安装过程,Twemproxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所谓的分片指的是根据一定的算法将要保存的数据保存到不同的...
官方文档提供了详细的安装、配置和使用指南,是学习和使用Twemproxy的重要资源。 8. **与其他解决方案的比较**:Twemproxy相较于直接连接Redis服务器,可以降低网络延迟,提高并发处理能力。但是,它不支持所有...
标题 "Laravel开发-laravel-twemproxy" 提示我们关注的重点是 Laravel 框架与 twemproxy 的结合使用,而描述中的“图书馆”可能指的是一个具体的 Laravel 包或库,用于帮助开发者更容易地与 twemproxy 交互。...
`Twemproxy`,又称为`nutcracker`,是由Twitter开发的一款轻量级的代理服务,主要用于在Redis和Memcached等缓存系统与应用之间进行数据通信。它通过集中式的管理方式,优化了分布式缓存的性能和可扩展性。然而,原始...
安装Twemproxy通常分为以下几步: 1. 下载源码:访问GitHub仓库(https://github.com/twitter/twemproxy)下载最新版本。 2. 编译安装: ```bash git clone https://github.com/twitter/twemproxy.git cd ...
在Linux系统(特别是这里提到的基于Red Hat的CentOS 6)中安装和配置Twemproxy时,确实需要依赖一些特定的组件。 首先,让我们详细了解一下Twemproxy本身。Twemproxy是一个由Twitter开发的代理服务器,它允许你通过...
w氧基食谱 Chef Coookbook来安装和管理 。要求没有任何。平台类Centos 6+ 红帽6+用法既可以通过添加食谱,也可以通过属性驱动来使用此食谱,也可以仅通过调用自己食谱中的可用提供程序来使用。属性default.rb 属性...
twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每...
描述安装/配置 twemproxy要求平台: Ubuntu食谱: 易于属性node['twemproxy']['install_method'] - 默认为"package" 。 node['twemproxy']['repo'] - 默认为"ppa"可以为零。 node['twemproxy']['config_file'] - ...
4. **安装过程**:在安装twemproxy时,通常需要先解压提供的源码包,然后使用autoconf生成配置文件,接着使用make命令编译源代码,最后进行安装。描述中的“顺逆安装一臂之力”可能是指这个压缩包提供了所有必要的...
一个由twitter开源的c版本proxy,同时支持memcached和redis=。此版本为可以configure安装的版本
标题中的“cpp-改造twemproxy使其支持ssdb协议ssdb的分片和ssdb的读写分离”意味着我们需要深入理解三个主要概念:C++编程、twemproxy(也称为nutcracker)以及SSDB数据库。 1. **C++编程**: C++是一种静态类型、...
其次,它是针对memcached和redis这两种广泛使用的键值存储系统设计的,因此它支持这两者的协议,允许它作为两者之间的中间层,提升数据访问的效率和可靠性。 美团twemproxy的主要设计目标是多进程架构。在计算机...
依赖关系使用和 ,所以第一步是安装依赖项: $ pip install redis$ pip install pyyaml如果要在 linux 系统范围内安装 python yaml,还可以使用包管理器,例如: $ sudo apt-get install python-yaml$ sudo yum ...
twemproxy:这是一个 redis 代理,其主要功能就是在多个 redis 节点和访问者之间做路由分发:访问者不需要自己判断某个 key 该存储到哪一个 redis 节点或者该到哪个节点去获取某个 key 的值——这是一个负载均衡组件
Twemproxy通过引入一个代理层,可以将其后端的多台Redis或Memcached实例进行统一管理与分配,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储,有了Twemproxy,...
1. **编译安装**:下载源代码后,使用C++编译器进行编译,通常包括`./autogen.sh`,`./configure`和`make`等步骤。 2. **配置**:编写或修改配置文件(如`conf/nutcracker.yml`),定义代理如何连接到后端的...