`
异步获取爱
  • 浏览: 80245 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

twemproxy 环境搭建

    博客分类:
  • job
阅读更多

     首先介绍下twemproxy,是一个轻量级的管理cache集群的,主要服务对象是memcached集群和redis集群。策略,主流是以几台节点间的数据备份,防止单点挂掉。笔者公司主要用于memcached的集群管理,防止单点挂机。

     经过笔者两天的摸索,终于把twemproxy搭建起来了。可谓饱经风霜。    
     首先我想说的是,本来是想在自己的mac上搭的,但是经过一天的各种失败,google,百度,各大论坛等等。最后的结论是,目前mac暂时无法搭建该环境(或者说本人的能力暂时无法搞定)。安装twemproxy的时候,需要呦ranlib,libtool等依赖,但是,坑爹的是,mac本身有自带的libtool,和linux上的,有语法上很多的差异。而安装编译的文件内部充斥着linux的libtool的命令,笔者表示相当郁闷。

      于是在ubuntu上进行了安装,安装也出奇的顺利。(shit~~~)

       基本安装步骤如下:

1.从git上将最新的code clone下来。

$ 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.上一步的,可能会有一些依赖包要先安装,安装后再执行下编译安装即可。

4.开启twemproxy
虽然,安装编译会在/usr/bin里有nutcracker的快捷,但是切记不能这样开启。需要:

$ cd twemproxy/

$ /src/nutcracker  -t    ##先测试下配置文件是否正确


配置文件是conf/nutcracker.yml ,如果 -t 测试通过,则可以进行启动,配置好自己的环境。

$  /src/nutcracker


环境
  • ubuntu10.2
  • macos  10.8.2
  • twemproxy  2.2.0


[size=medium]后期有时间需要深入理解,针对业务也会有相应的代码修改。

编译过程中,会有m4或者autoconf的参数错误。如果你是手动编译这些lib的话,可能需要编译到twemproxy的指定目录下,记忆中好像是/usr/local/share目录下。具体可以参看编译的错误信息。





=================== 分隔线 ===================


参数篇


src/nutcracker.yml

clstuer1:
  listen: 0.0.0.0:9999             #使用哪个端口启动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:端口号:权重  别名)
   - 192.168.0.22:6379:1  node1
   - 192.168.0.22:6380:1  node2
   - 192.168.0.22:6381:1  node3
   - 192.168.0.23:6381:2  node4


=================== 分隔线 ===================
启动篇

#查看命令信息
./src/nutcracker -h
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             : this help #帮助
  -V, --version          : show version and exit #版本
  -t, --test-conf        : test configuration for syntax errors and exit #测试配置文件是否有语法错误
  -d, --daemonize        : run as a daemon #是否守护进程启动
  -D, --describe-stats   : print stats description and exit #描述
  -v, --verbosity=N      : set logging level (default: 5, min: 0, max: 11)
  -o, --output=S         : set logging file (default: stderr)
  -c, --conf-file=S      : set configuration file (default: conf/nutcracker.yml) #指定配置文件
  -s, --stats-port=N     : set stats monitoring port (default: 22222) #端口
  -a, --stats-addr=S     : set stats monitoring ip (default: 0.0.0.0) #设置地址
  -i, --stats-interval=N : set stats aggregation interval in msec (default: 30000 msec)
  -p, --pid-file=S       : set pid file (default: off)
  -m, --mbuf-size=N      : set size of mbuf chunk in bytes (default: 16384 bytes)
#查看命令信息
#启动命令
1. 为了方便调试启动
./src/nutcracker -c /opt/module/twenproxy/conf/nutcracker.xrk.yml
2.守护进程启动
./src/nutcracker -d -c /opt/module/twenproxy/conf/nutcracker.xrk.yml



=================== 分隔线 ===================

现实篇


twemproxy 有无数的优点,数据节点间的自动备份等等,都是优点。显著的缺点文章里也有提到,比如
1. 虽然可以动态移除节点,但该移除节点的数据就丢失了。
2. redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现
3. 性能上的损耗(其实作为代理  必定会有损耗, twemproxy损耗属于很小的级别了)
4. 不支持针对多个值的操作,比如取sets的子交并补等(MGET 和 DEL 除外)
5. 不支持Redis的事务操作
6. 出错提示还不够完善


以上是各大站包括github上一些人提出的,下面回到自我现实。发现问题,解决问题。

Q1:
各种语言的memcached,redis的客户端针对twemproxy,都会有一些不兼容。举个jedis的例子:
发送数据时候,会接受到jedis发送的一些其他的command,贴一下log
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 9 '192.168.10.195:52175' on event 00FF eof 0 done 0 rb 23202 sb 1452: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 35 '192.168.10.195:52473' on event 00FF eof 0 done 0 rb 7107 sb 444: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 14 '192.168.10.195:51867' on event 00FF eof 0 done 0 rb 46743 sb 2924: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 31 '192.168.10.195:52348' on event 00FF eof 0 done 0 rb 11309 sb 708: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 24 '192.168.10.195:52202' on event 00FF eof 0 done 0 rb 21346 sb 1336: Invalid argument
[Thu Aug 29 17:09:24 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:24 2013] nc_core.c:205 close c 27 '192.168.10.195:52458' on event 00FF eof 0 done 0 rb 12483 sb 780: Invalid argument
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 9 on p 6 from '192.168.10.195:52602'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 14 on p 6 from '192.168.10.195:52603'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 15 on p 6 from '192.168.10.195:52604'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 23 on p 6 from '192.168.10.195:52606'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 24 on p 6 from '192.168.10.195:52605'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 27 on p 6 from '192.168.10.195:52607'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 29 on p 6 from '192.168.10.195:52608'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 31 on p 6 from '192.168.10.195:52609'
[Thu Aug 29 17:09:25 2013] nc_proxy.c:336 accepted c 35 on p 6 from '192.168.10.195:52610'
[Thu Aug 29 17:09:26 2013] nc_redis.c:923 parsed unsupported command 'QUIT'
[Thu Aug 29 17:09:26 2013] nc_core.c:205 close c 39 '192.168.10.195:52314' on event 00FF eof 0 done 0 rb 30008 sb 1876: Invalid argument



以前用的一些memcached的client也会出现version的command错误等等。虽然异常无伤大雅,但是对于有洁癖的人来说。。。。还是无法忍受。

解决方案:
自己fork出一个客户端的版本吧。


Q2:
虽然twemproxy是缓存集群代理,可以对单点出现问题进行剔除和重试链接。但是。。。 要是这个proxy的管理节点挂了。。那岂不是。。惨淡了。。。

解决方案:
目前我的测试环境里3格redis节点,用3个proxy来管理,每个proxy都管理3个节点。连接3个proxy都可以。 (待明天测试各种挂点的情况,会贴出详细的分析报告!)










分享到:
评论
6 楼 cyflhn 2015-02-16  
redis集群动态增加节点的时候,twemproxy不会对已有数据做重分布.maillist里面作者说这个需要自己写个脚本实现. 能提供一下具体的脚本实现吗 或者maillist的链接地址也行,谢谢了。
5 楼 caiyiyong 2015-02-05  
jianglijian2422323 写道
问下楼主,这个确定是做到集群 么?集群的效果是一台集群上有数据,其他群内的集群都有数据了,但我测了下好像是两台机器插入的数据是不同步的,只是分布式,两台集群上的数据是不一样的,并没集群的效果,所以想和楼主确定下,或者能不能给个联系方式咨询下,谢谢!




肯定每台cache 的数据不一样的,  又不是双主   这个集群是通过一致性哈希来构建的  是哈希环而不是常见的传统分发
4 楼 kennykinte 2014-11-17  
twemproxy需要用到epoll,epoll是Linux下的。
mac osx是FreeBSD的后代,是unix家族的,用的是kqueue。
所以你当然没法在mac 上装了。。。
3 楼 异步获取爱 2013-08-27  
jianglijian2422323 写道
问下楼主,这个确定是做到集群 么?集群的效果是一台集群上有数据,其他群内的集群都有数据了,但我测了下好像是两台机器插入的数据是不同步的,只是分布式,两台集群上的数据是不一样的,并没集群的效果,所以想和楼主确定下,或者能不能给个联系方式咨询下,谢谢!


twemproxy 核心功能就是防止集群内挂点造成的数据丢失。 twemproxy的数据节点间会保持数据通信,使得节点的数据会备份到其他节点上。   而你只需要连接主节点去获取数据 ,而不需要再关注数据节点间的任何动作。   顺便提下国内有个mangant,也是做cache的集群代理的,原理是用一个节点做备份节点,备份所有节点的数据。可以做下对比。   不太看消息,貌似好久了,抱歉!
2 楼 yx1989 2013-06-04  
jianglijian2422323 写道
问下楼主,这个确定是做到集群 么?集群的效果是一台集群上有数据,其他群内的集群都有数据了,但我测了下好像是两台机器插入的数据是不同步的,只是分布式,两台集群上的数据是不一样的,并没集群的效果,所以想和楼主确定下,或者能不能给个联系方式咨询下,谢谢!

肯定是不一样的,memcached 的机制就是大家是互补的。
1 楼 jianglijian2422323 2013-05-10  
问下楼主,这个确定是做到集群 么?集群的效果是一台集群上有数据,其他群内的集群都有数据了,但我测了下好像是两台机器插入的数据是不同步的,只是分布式,两台集群上的数据是不一样的,并没集群的效果,所以想和楼主确定下,或者能不能给个联系方式咨询下,谢谢!

相关推荐

    Twemproxy 0.4.1

    4. **构建Redis集群**:使用Twemproxy搭建Redis集群,可以解决Redis原生集群配置复杂、网络通信开销大等问题。Twemproxy可以将客户端的请求路由到合适的Redis节点,实现数据的分布和复制。 5. **部署与配置**:部署...

    twemproxy_v0.5+autoconf-2.69.rar | twemproxy版本为2021年11月最新版

    综上所述,这个压缩包提供了twemproxy的最新版本和必要的编译工具,适用于需要搭建和优化Redis缓存系统的情况。安装和使用过程中,用户需要了解twemproxy的基本概念和配置,以及如何利用autoconf来处理源码编译。...

    Windows环境下搭建Redis集群所需资源及其文档

    在Windows环境下搭建Redis集群是一项技术性较强的任务,但有了正确的资源和文档,这一过程可以变得相对简单。Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景,而集群则能提供高可用性和扩展性。下面...

    Redis高可用集群实现1

    在这个方案中,我们利用Sentinel、Twemproxy、Keepalive以及Redis自身来搭建一个高可用的环境。以下是各个组件的作用: 1. **Redis**: Redis是我们的主要缓存服务器,负责存储数据并提供高速访问。 2. **Sentinel*...

    twemproxylibso-centos-64.tar.gz

    在描述中提到,“搭建redis集群的时候,需要安装twemproxy库文件”,这表明在创建Redis集群的过程中,Twemproxy扮演了一个关键角色。为了确保集群能够正常运行,我们需要在系统中安装这个库。一旦安装了这些库文件,...

    开涛高可用高并发-亿级流量核心技术

    18.1.4 开发环境 362 18.1.5 OpenResty生态 362 18.1.6 场景 362 18.2 基于OpenResty的常用架构模式 363 18.2.1 负载均衡 363 18.2.2 单机闭环 364 18.2.3 分布式闭环 367 18.2.4 接入网关 368 18.2.5 核心接入Nginx...

    跟我学Nginx+Lua开发.pdf

    ### Nginx+Lua开发环境搭建与应用 #### 一、Nginx+Lua开发环境简介 《跟我学Nginx+Lua开发》是一本针对Nginx与Lua结合使用的教程书籍,旨在帮助读者理解如何利用这两种技术进行高效且灵活的Web应用开发。Nginx作为...

    redis-windows客户端

    Redis 是一个高性能的键值...总的来说,"redis-windows客户端"是Windows用户快速搭建和使用Redis环境的关键。通过理解Redis的基本概念、配置方法以及操作命令,可以有效地利用这个内存数据结构存储系统,提升应用性能。

    吴涛英文简历1

    - 熟悉Kingshard、Mycat、Twemproxy和Codis等数据库中间件,用于分布式数据库管理。 10. **监控与运维**: - 使用EKL、Zabbix监控系统性能,确保Nginx、Mysql、Redis和Php等服务的稳定运行。 - 使用WM监控程序...

    redis -3.0.501 -windows x64

    Redis 是一个开源的、基于键值对的...通过了解并熟练应用这些知识点,你将能够成功地在Windows 7系统上搭建和管理Redis服务器,利用其高效的数据存储和处理能力。记得定期更新到最新版本以获取最新的特性和安全修复。

    liunx下redis3.0.0集群负载均衡文档完整部署带所有安装包(redis集群)

    - 提供的部署文档应包括每一步的详细操作指南,从环境准备到集群搭建,再到后期运维。 10. **使用与问题解决**: - 使用文档应涵盖如何连接集群、操作数据、查看集群状态等。 - 问题解决文档则包含常见错误分析...

Global site tag (gtag.js) - Google Analytics