1、twemproxy explore
当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性。虽然Redis 2.6版本已经发布Redis Cluster,但还不是很成熟适用正式生产环境。 Redis 的 Cluster 方案还没有正式推出之前,我们通过 Proxy 的方式来实现集群存储。
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 存储。
2、twemproxy特性:
-
支持失败节点自动删除
- 可以设置重新连接该节点的时间
- 可以设置连接多少次之后删除该节点
- 该方式适合作为cache存储
-
支持设置HashTag
- 通过HashTag可以自己设定将两个KEYhash到同一个实例上去。
-
减少与redis的直接连接数
- 保持与redis的长连接
- 可设置代理与后台每个redis连接的数目
-
自动分片到后端多个redis实例上
- 多种hash算法:能够使用不同的策略和散列函数支持一致性hash。
- 可以设置后端实例的权重
-
避免单点问题
- 可以平行部署多个代理层.client自动选择可用的一个
-
支持redis pipelining request
支持请求的流式与批处理,降低来回的消耗
-
支持状态监控
- 可设置状态监控ip和端口,访问ip和端口可以得到一个json格式的状态信息串
- 可设置监控信息刷新间隔时间
-
高吞吐量
- 连接复用,内存复用。
- 将多个连接请求,组成reids pipelining统一向redis请求。
另外可以修改redis的源代码,抽取出redis中的前半部分,作为一个中间代理层。最终都是通过linux下的epoll 事件机制提高并发效率,其中nutcraker本身也是使用epoll的事件机制。并且在性能测试上的表现非常出色。
3、twemproxy问题与不足
- 不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
- 不支持Redis的事务操作
- 出错提示还不够完善
- 也不支持select操作
4、安装与配置
- apt-get install automake
- apt-get install libtool
- git clone git://github.com/twitter/twemproxy.git
- cd twemproxy
- autoreconf -fvi
- ./configure --enable-debug=log
- make
- src/nutcracker -h
- redis1:
- listen: 127.0.0.1:6379 #使用哪个端口启动Twemproxy
- redis: true #是否是Redis的proxy
- hash: fnv1a_64 #指定具体的hash函数
- distribution: ketama #具体的hash算法
- auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点
- timeout: 400 #超时时间(毫秒)
- server_retry_timeout: 2000 #重试的时间(毫秒)
- server_failure_limit: 1 #结点故障多少次就算摘除掉
- servers: #下面表示所有的Redis节点(IP:端口号:权重)
- - 127.0.0.1:6380:1
- - 127.0.0.1:6381:1
- - 127.0.0.1:6382:1
- redis2:
- listen: 0.0.0.0:10000
- redis: true
- hash: fnv1a_64
- distribution: ketama
- auto_eject_hosts: false
- timeout: 400
- servers:
- - 127.0.0.1:6379:1
- - 127.0.0.1:6380:1
- - 127.0.0.1:6381:1
- - 127.0.0.1:6382:1
你可以同时开启多个 Twemproxy 实例,它们都可以进行读写,这样你的应用程序就可以完全避免所谓的单点故障。
相关推荐
Twemproxy,又称为Nutcracker,是一款轻量级的代理服务,用于在多台Redis或SSDB服务器之间分发请求,提高系统的可扩展性和可用性。本章节将深入探讨这三者的安装与使用,帮助你更好地理解和应用这些技术。 首先,...
twemproxy:这是一个 redis 代理,其主要功能就是在多个 redis 节点和访问者之间做路由分发:访问者不需要自己判断某个 key 该存储到哪一个 redis 节点或者该到哪个节点去获取某个 key 的值——这是一个负载均衡组件
5. 启动Twemproxy服务,并配置系统以在启动时自动运行。 6. 配置Redis实例以与Twemproxy通信。 压缩包中可能包含的是Twemproxy的源代码或预编译的二进制文件,以及可能的配置示例。确保正确解压并按照官方文档的...
twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redis server读取k-v数据或者把k-v数据更新到...
在实际部署中,Keepalive确保了Redis节点间的连接稳定,Twemproxy作为代理,负责将客户端请求分发到多个Redis实例,同时处理读写分离,而Redis主从复制则提供了数据的备份和故障恢复能力。这样的架构可以提高系统的...
3. **启动服务**:使用编译好的可执行文件启动twemproxy服务,如`./nutcracker -c conf/nutcracker.yml`。 4. **客户端连接**:客户端应用程序通过连接到twemproxy的监听地址和端口来与后端缓存进行通信,而不直接...
Twemproxy,又称为Nutcracker,是由Twitter开发的一款轻量级Redis代理服务,其主要功能是减少后端缓存服务器的连接数,提供自动故障转移和一致性Hash算法支持。Twemproxy能够自动检测并移除故障节点,支持HashTag...
总的来说,美团twemproxy是一个用C++编写的、支持memcached和redis协议的多进程代理服务,它的设计重点在于高性能、低资源消耗和高并发处理能力。对于需要优化键值存储系统性能、处理大规模并发请求的IT环境,这是一...
redis集群代理Twemproxy 安装过程,Twemproxy是一个专门为了这种nosql数据库设计的一款代理工具软件,这个工具软件最大的特征是可以实现数据的分片处理。所谓的分片指的是根据一定的算法将要保存的数据保存到不同的...
使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储,有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。此包是用于安装redis的...
Redis 是一个广泛应用于互联网行业的高性能键值存储系统,其高可用性是确保服务稳定的关键因素。本篇将探讨Redis的高可用架构最佳实践,主要涉及Redis Sentinel、Redis Master-Slave复制、Redis Cluster、Twemproxy...
Twemproxy是一个轻量级的代理服务,主要用于在Redis和Memcached等缓存系统中分发请求,提高数据存储的性能和可扩展性。 描述中的"构建redis集群 twemproxy最新版本 0.4.1"说明了使用Twemproxy的主要目的是构建Redis...
2. Twemproxy是由Twitter开源的轻量级代理,它充当Redis客户端和多个Redis实例之间的桥梁。Twemproxy简化了客户端连接,支持实例自动失效处理,并减少了客户端到Redis的连接数。然而,它也有局限性,如代理层可能...
8. **集群支持**:尽管Redis 3.2版本不直接支持Windows上的集群功能,但可以通过一些第三方工具实现集群配置,如Twemproxy(Twitter的代理服务器)或通过其他编程语言实现的客户端库。 9. **安全性考虑**:由于...
Twemproxy是由Twitter开源的一款Redis代理软件,它能够将来自客户端的请求路由到正确的Redis实例,并将结果返回给客户端。 **架构**: - 客户端连接至Twemproxy而非直接连接到Redis实例。 - Twemproxy根据预设规则...
是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。...