`

【转】Redis 代理服务Twemproxy

 
阅读更多

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问题与不足

 
Twemproxy 由于其自身原理限制,有一些不足之处,如: 
  • 不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
  • 不支持Redis的事务操作
  • 出错提示还不够完善
  • 也不支持select操作

 

4、安装与配置 

具体的安装步骤可用查看github:https://github.com/twitter/twemproxy
Twemproxy 的安装,主要命令如下: 
  1. apt-get install automake  
  2. apt-get install libtool  
  3. git clone git://github.com/twitter/twemproxy.git  
  4. cd twemproxy  
  5. autoreconf -fvi  
  6. ./configure --enable-debug=log  
  7. make  
  8. src/nutcracker -h  
 
通过上面的命令就算安装好了,然后是具体的配置,下面是一个典型的配置 
  1. redis1:  
  2.   listen: 127.0.0.1:6379 #使用哪个端口启动Twemproxy  
  3.   redis: true #是否是Redis的proxy  
  4.   hash: fnv1a_64 #指定具体的hash函数  
  5.   distribution: ketama #具体的hash算法  
  6.   auto_eject_hosts: true #是否在结点无法响应的时候临时摘除结点  
  7.   timeout: 400 #超时时间(毫秒)  
  8.   server_retry_timeout: 2000 #重试的时间(毫秒)  
  9.   server_failure_limit: 1 #结点故障多少次就算摘除掉  
  10.   servers: #下面表示所有的Redis节点(IP:端口号:权重)  
  11.    - 127.0.0.1:6380:1  
  12.    - 127.0.0.1:6381:1  
  13.    - 127.0.0.1:6382:1  
  14.   
  15. redis2:  
  16.   listen: 0.0.0.0:10000  
  17.   redis: true  
  18.   hash: fnv1a_64  
  19.   distribution: ketama  
  20.   auto_eject_hosts: false  
  21.   timeout: 400  
  22.   servers:  
  23.    - 127.0.0.1:6379:1  
  24.    - 127.0.0.1:6380:1  
  25.    - 127.0.0.1:6381:1  
  26.    - 127.0.0.1:6382:1  

你可以同时开启多个 Twemproxy 实例,它们都可以进行读写,这样你的应用程序就可以完全避免所谓的单点故障。 
分享到:
评论

相关推荐

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

    Twemproxy,又称为Nutcracker,是一款轻量级的代理服务,用于在多台Redis或SSDB服务器之间分发请求,提高系统的可扩展性和可用性。本章节将深入探讨这三者的安装与使用,帮助你更好地理解和应用这些技术。 首先,...

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

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

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

    5. 启动Twemproxy服务,并配置系统以在启动时自动运行。 6. 配置Redis实例以与Twemproxy通信。 压缩包中可能包含的是Twemproxy的源代码或预编译的二进制文件,以及可能的配置示例。确保正确解压并按照官方文档的...

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

    twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers 的时候不用关心到底去哪一台redis server读取k-v数据或者把k-v数据更新到...

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

    在实际部署中,Keepalive确保了Redis节点间的连接稳定,Twemproxy作为代理,负责将客户端请求分发到多个Redis实例,同时处理读写分离,而Redis主从复制则提供了数据的备份和故障恢复能力。这样的架构可以提高系统的...

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

    3. **启动服务**:使用编译好的可执行文件启动twemproxy服务,如`./nutcracker -c conf/nutcracker.yml`。 4. **客户端连接**:客户端应用程序通过连接到twemproxy的监听地址和端口来与后端缓存进行通信,而不直接...

    基于redis的分布式缓存系统架构分析_张威.pdf

    Twemproxy,又称为Nutcracker,是由Twitter开发的一款轻量级Redis代理服务,其主要功能是减少后端缓存服务器的连接数,提供自动故障转移和一致性Hash算法支持。Twemproxy能够自动检测并移除故障节点,支持HashTag...

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

    总的来说,美团twemproxy是一个用C++编写的、支持memcached和redis协议的多进程代理服务,它的设计重点在于高性能、低资源消耗和高并发处理能力。对于需要优化键值存储系统性能、处理大规模并发请求的IT环境,这是一...

    Twemproxy 安装过程

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

    twemproxy-master.zip

    使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached存储,有了Twemproxy,客户端不直接访问Redis服务器,而是通过twemproxy 代理中间件间接访问。此包是用于安装redis的...

    Redis 高可用架构最佳实践.ppt

    Redis 是一个广泛应用于互联网行业的高性能键值存储系统,其高可用性是确保服务稳定的关键因素。本篇将探讨Redis的高可用架构最佳实践,主要涉及Redis Sentinel、Redis Master-Slave复制、Redis Cluster、Twemproxy...

    Twemproxy 0.4.1

    Twemproxy是一个轻量级的代理服务,主要用于在Redis和Memcached等缓存系统中分发请求,提高数据存储的性能和可扩展性。 描述中的"构建redis集群 twemproxy最新版本 0.4.1"说明了使用Twemproxy的主要目的是构建Redis...

    Redis集群方案.docx

    2. Twemproxy是由Twitter开源的轻量级代理,它充当Redis客户端和多个Redis实例之间的桥梁。Twemproxy简化了客户端连接,支持实例自动失效处理,并减少了客户端到Redis的连接数。然而,它也有局限性,如代理层可能...

    redis-windows客户端

    8. **集群支持**:尽管Redis 3.2版本不直接支持Windows上的集群功能,但可以通过一些第三方工具实现集群配置,如Twemproxy(Twitter的代理服务器)或通过其他编程语言实现的客户端库。 9. **安全性考虑**:由于...

    Redis集群_实际使用自己整理的版本.docx

    Twemproxy是由Twitter开源的一款Redis代理软件,它能够将来自客户端的请求路由到正确的Redis实例,并将结果返回给客户端。 **架构**: - 客户端连接至Twemproxy而非直接连接到Redis实例。 - Twemproxy根据预设规则...

    twemproxy应用包

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

Global site tag (gtag.js) - Google Analytics