最近利用twitter的开源twemproxy做redis的代理,实现redis集群的功能。twemproxy利用一致性hash算法将key进行hash,使众多的key叫均匀的分布在后端各个redis中。值得注意的是这种hash粒度是key级别的,同一个key只会放在一个redis实例里,不同的key可能分布在不同的redis实例。
一、简介
引用
Twitter,世界最大的Redis集群之一部署在Twitter用于为用户提供时间轴数据。Twitter Open Source部门提供了Twemproxy。
Twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。
Twemproxy是一个快速的单线程代理程序,支持Memcached ASCII协议和更新的Redis协议:
它全部用C写成,使用Apache 2.0 License授权。项目在Linux上可以工作,而在OSX上无法编译,因为它依赖了epoll API.
Twemproxy 通过引入一个代理层,可以将其后端的多台 Redis 或 Memcached 实例进行统一管理与分配,使应用程序只需要在 Twemproxy 上进行操作,而不用关心后面具体有多少个真实的 Redis 或 Memcached 存储。
二、twemproxy特性:
引用
支持失败节点自动删除
可以设置重新连接该节点的时间
可以设置连接多少次之后删除该节点
该方式适合作为cache存储
支持设置HashTag
通过HashTag可以自己设定将两个KEYhash到同一个实例上去。
减少与redis的直接连接数
保持与redis的长连接
可设置代理与后台每个redis连接的数目
自动分片到后端多个redis实例上
多种hash算法:能够使用不同的策略和散列函数支持一致性hash。
可以设置后端实例的权重
避免单点问题
可以平行部署多个代理层.client自动选择可用的一个
支持redis pipelining request
支持请求的流式与批处理,降低来回的消耗
支持状态监控
可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
可设置监控信息刷新间隔时间
高吞吐量
连接复用,内存复用。
将多个连接请求,组成reids pipelining统一向redis请求。
三、安装
安装前提条件是必须有libtool,没有的可以自行安装,很简单。另外必须有autoconf,而且版本稍高点更好,有时需要升级才能用,我的就是这种情况。有这两个条件之后就可以动手了。
1.从git上将最新的code clone下来。
Java代码 收藏代码
$ git clone https://github.com/twitter/twemproxy.git
2.开始编译,安装
$ cd twemproxy/
$ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --enable-debug=log && make && sudo make install
3.上一步的,可能会有一些依赖包要先安装,安装后再执行下编译安装即可。 安装完了之后修改配置文件,配置文件目录软件目录/conf/nutcracker.yml.我本次安装采用两个twemproxy实例、3个redis实例,配置内容如下:
redis1:
listen: 192.168.30.106:6311 #使用哪个端口启动Twemproxy
redis: true #是否是Redis的proxy
hash: fnv1a_64 #指定具体的hash函数
distribution: ketama #具体的hash算法
auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
timeout: 4000 #超时时间(毫秒)
server_retry_timeout: 2000 #重试的时间(毫秒)
server_failure_limit: 1 #结点故障多少次就算摘除掉
servers: #下面表示所有的Redis节点(IP:端口号:权重)
- 127.0.0.1:6379:1
- 127.0.0.1:6389:1
- 127.0.0.1:6369:1
redis2:
listen: 192.168.30.106:6321 #使用哪个端口启动Twemproxy
redis: true #是否是Redis的proxy
hash: fnv1a_64 #指定具体的hash函数
distribution: ketama #具体的hash算法
auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
timeout: 4000 #超时时间(毫秒)
server_retry_timeout: 2000 #重试的时间(毫秒)
server_failure_limit: 1 #结点故障多少次就算摘除掉
servers: #下面表示所有的Redis节点(IP:端口号:权重)
- 127.0.0.1:6379:1
- 127.0.0.1:6389:1
- 127.0.0.1:6369:1
4.开启twemproxy
虽然,安装编译会在/usr/bin里有nutcracker的快捷,但是切记不能这样开启。需要:
$ cd twemproxy/
$ /src/nutcracker -t ##先测试下配置文件是否正确
配置文件是conf/nutcracker.yml ,如果 -t 测试通过,则可以进行启动,配置好自己的环境。
$ /src/nutcracker
四、性能测试
利用redis的benchmark工具对采用代理方式和单台redis分别进行压力测试,可以比较出其性能。总的来说用twemproxy后性能有所下降,我的30%左右,其他有人测出20%,甚至有人测出无损性能。
直接测redis(红色部分尅换成其他命令如get,lpush,lpop等)
/usr/coolpad/redis6369/src/redis-benchmark -p 6379 -h 192.168.30.106 -c 100 -t [color=red]set [/color]-d 100 -l -q
测twemproxy
/usr/coolpad/redis6369/src/redis-benchmark -p 6311 -h 192.168.30.106 -c 100 -t [color=red]set[/color] -d 100 -l -q
分享到:
相关推荐
本次实验的目的主要是搭建Redis Cluster和TwemProxy Redis两种集群,分别对其进行性能测试,测试出集群性能的拐点,找出性能的瓶颈有哪些,并对两套集群进行比较,以便于在不同业务场景下择优选择。
在Windows环境下搭建Redis集群是一项技术性较强的任务,但有了正确的资源和文档,这一过程可以变得相对简单。Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景,而集群则能提供高可用性和扩展性。下面...
集群搭建是 Redis 实现高可用性和扩展性的关键步骤。本篇文章将详细探讨 Redis 集群的搭建过程以及各种集群方案的比较。 一、Redis 集群基础知识 Redis 集群采用了分片(Sharding)策略,将数据分散存储在多个节点...
4. **构建Redis集群**:使用Twemproxy搭建Redis集群,可以解决Redis原生集群配置复杂、网络通信开销大等问题。Twemproxy可以将客户端的请求路由到合适的Redis节点,实现数据的分布和复制。 5. **部署与配置**:部署...
以下是关于Redis集群及其在Linux下部署的详细知识点: 1. **Redis集群原理**: - Redis集群通过分片(Sharding)将数据分散到多个节点上,每个节点负责一部分数据,实现数据的水平扩展。 - 集群中的每个节点都有...
在构建高可用的Redis集群时,我们通常会结合多种技术以确保服务的稳定性和连续性。在这个方案中,我们利用Sentinel、Twemproxy、Keepalive以及Redis自身来搭建一个高可用的环境。以下是各个组件的作用: 1. **Redis...
虽然Redis 3.0.501不支持官方的集群模式,但可以通过社区开发的工具如Twemproxy或Redis Sentinel实现分布式部署。在更高版本的Redis中,原生集群功能已经加入,能提供更强大的扩展性和高可用性。 通过了解并熟练...
在描述中提到,“搭建redis集群的时候,需要安装twemproxy库文件”,这表明在创建Redis集群的过程中,Twemproxy扮演了一个关键角色。为了确保集群能够正常运行,我们需要在系统中安装这个库。一旦安装了这些库文件,...
8. **集群支持**:尽管Redis 3.2版本不直接支持Windows上的集群功能,但可以通过一些第三方工具实现集群配置,如Twemproxy(Twitter的代理服务器)或通过其他编程语言实现的客户端库。 9. **安全性考虑**:由于...
5. **Redis集成**:twemproxy常用于Redis集群,它可以将客户端请求分发到多个Redis实例,提高系统的读写性能。同时,它还支持故障转移,当某个Redis实例出现问题时,可以自动将流量切换到其他健康的节点。 6. **...
redis集群代理Twemproxy 安装过程,Twemproxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所谓的分片指的是根据一定的算法将要保存的数据保存到不同的...
本手册是我(作者)在一家中国大陆的中型商业银行做大数据系统工程师中进行的总结归纳,包含开发和运维的各方面的使用、应用场景和最佳实践,以及各个高可用架构的搭建和测试 目录 Redis开发运维实践指南 简述 数据...
在 Java 开发中,Redis 的使用非常普遍,面试时常常会涉及 Redis 的相关知识,如主从复制、集群搭建以及一致性等问题。 1. Redis 的主从复制是为了解决数据冗余和高可用性问题。主从模式下,主服务器(master)负责...
Redis Cluster采用无中心架构,每个节点不仅存储数据,还维护着整个集群的状态,与其他所有节点保持连接,通过二进制协议优化内部通信速度和带宽使用。 【分布存储机制】 Redis Cluster的核心机制是哈希槽(Hash ...
Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 MongoDB聚合、索引及...
20.2.3 OpenResty+Redis集群+Mysql集群架构 386 20.3 实现 387 20.3.1 后台逻辑 388 20.3.2 前台逻辑 388 20.3.3 项目搭建 389 20.3.4 Redis+Twemproxy配置 389 20.3.5 Mysql+Atlas配置 390 20.3.6 Java+Tomcat安装 ...
对于Redis问题,他提到了使用Twemproxy代理服务器来拆分大表、部署到不同服务器的redis表中,以保证数据平均分配到各台服务器。此外,对于云主机日志运算问题,刘书良提出了将日志发送到不同服务器、适当进行冗余...
目录搭建步骤启用复制,部署slave node强制读写分离集群安全认证读写分离架构的测试 搭建步骤 一主一从,往主节点去写,在从节点去读,可以读到,主从架构就搭建成功了,包含节点间认证口令 启用复制,部署slave ...
* 增加Redis集群,基于Twemproxy来做中间代理 架构V0.5的改进: * 业务之间的耦合减少 * 数据库的性能扩展性提高 * 监控平台的建立,提高了问题定位和解决的效率 * 应用日志规范的制定,提高了日志的可读性和可...