Redis 代理服务Twemproxy

1、twemproxy explore

&">nbsp;     当11545.html">我们有大量 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/twemproxyTwemproxy 的安装,主要命令如下: apt-get install automakeapt-get install libtoolgit clone git://github.com/twitter/twemproxy.gitcd twemproxyautoreconf -fvi./configure --enable-debug=logmakesrc/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:1redis2: 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 实例,它们都可以进行读写,这样你的应用程序就可以完全避免
所谓的单点故障。

时间: 2025-01-21 09:34:09

Redis 代理服务Twemproxy的相关文章

redis的分布式解决方式--codis (转)

codis是豌豆荚开源的分布式server.眼下处于稳定阶段. 原文地址:https://github.com/wandoulabs/codis/blob/master/doc/tutorial_zh.md Codis 是一个分布式 Redis 解决方式, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的差别 (不支持的命令列表), 上层应用能够像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作

Redis集群方案,Codis安装测试

本文原文连接: http://blog.csdn.net/freewebsys/article/details/44100919 转载请注明出处! 1,关于豌豆荚开源的Codis Codis是豌豆荚使用Go和C语言开发.以代理的方式实现的一个Redis分布式集群解决方案,且完全兼容Twemproxy.Twemproxy对于上一层的应用来说, 连接Codis Proxy(Redis代理服务)和连接原生的Redis服务器没有明显的区别,上一层应用能够像使用单机的 Redis一样对待.Codis底层会

Redis Cluster迁移遇到的各种运维坑及解决方案

引子 这个7月注定不平凡,通过7月连续的Redis故障,细心如你,一定会对技术.公司.同事.职业有了更深刻的认识和反思,先回忆下吧-- 本文主要涉及到的故障包括: 1.网卡故障 2.这该死的连接数 3.疑似 Cluster 脑裂? 4.Bgsave传统的典型问题 5.主库重启 Flush 掉从库 好的,敬请欣赏. Redis Cluster 的迁移之路 我们Redis 部署特点如下: ◆集中部署,N台机器专职负责某个产品线. ◆传统 Twemproxy 方式,额外会有自己定制几套 Twempro

codis集群搭建

目前公司的业务是php语言开发,使用的是laravel开源框架.laravel框架使用predis连接redis,但是目前predis不支持主从式redis集群,这点很坑. 看了看目前网上的解决方案,国内豌豆荚开源的codis很不错.这篇文章,我们主要介绍codis集群的安装. 一.codis介绍 codis是一个分布式redis集群解决方案,对于上层的应用来说, 连接到codis-proxy和连接原生的redis-server没有明显的区别. 上层应用可以像使用单机的redis一样使用,cod

实战Centos系统部署Codis集群服务

导读 Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务. 一.Codis简介 Codis 是 Wandoujia Infrastructu

MySQL小型高可用架构(组合)

一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换   服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失败之后需要手动恢复主从架构     MySQL中型高可用架构 方案:MMM + MySQL双主 + 多从高可用方案   服务器资源: 1.至少五台PC Server,2台MySQL主库,2台MySQL从库,1台MMM Monitor: 2.1台MMM Monitor选择低配: 3.如果不采用F5作为

keepalived问题-keepalived+twemproxy +redis问题求教

问题描述 keepalived+twemproxy +redis问题求教 自己搭了玩的,2台虚拟机10.20.71.150(redis2个实例分别是端口63796389 twemproxy 监听22122 -s22222此外还有keepalived (只装了这一个没有master/slave.就有问题了))10.20.71.161(redis2个实例分别是端口63796389 twemproxy 监听22122 -s22222)VIP:10.20.71.65集体配置: ```10.20.71.1

Twemproxy——针对MemCached与Redis的代理

Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数. Twemproxy有何用途呢?它可以: 通过代理的方式减少缓存服务器的连接数 自动在多台缓存服务器间共享数据 通过不同的策略与散列函数支持一致性散列 通过配置的方式禁用失败的结点 运行在多个实例上,客户端可以连接到首个可用的代理服务器 支持请求的流式与批处理,因而能够降低来回的消耗 Redis的创建者Salvatore Sanfilippo(@antirez)撰写了一篇文章,介绍了- 如何通过

《Redis官方文档》分区

分区:如何把数据存储到多个Redis实例中 分区就是把你的数据分割到多个Redis实例中的一个过程,因此每个实例仅仅包含部分键.这篇文章第一部分介绍分区概念,第二部分将介绍Redis分区的用法. (译者注:Redis集群是分区事实上标准) 为什么分区是非常有用的 分区在Redis中主要有两个目的: 分区利用多台机器的内存构建一个更大数据库.如果不使用分区,数据库大小受限于单个计算机内存. 分区可以在多核和多计算机之间弹性扩展计算能力,并且分区可以在多计算机和网络适配器之间弹性扩展网络带宽. 分区