当前位置: 首页 > 科技观察

使用redis代理twmproxy_0

时间:2023-03-14 20:03:53 科技观察

linux下的twemproxy,又名nutracker,是一个快速、轻量级的代理程序,支持memcache和redis协议。主要用于减少后端缓存服务器的连接数。当前***版本为0.3.0。git地址:https://github.com/yuyunliuhen/twemproxy。编译:$getclonehttps://github.com/yuyunliuhen/twemproxy$cdtwemproxy&./configure--enable-debug=log&make$src/nutcracker--help这样就编译成功了。这里从源码目录开始,或者通过makeinstall安装。命令行选项:-t,--test-conf:testconfigurationforsyntaxerrorsandexit测试配置文件是否正确,默认为conf/nutcracker.yml,具体如下:#p#配置文件的参数说明将下面详细介绍;-d,--daemonize:runasadaemon后台启动进程-D,--describe-stats:printstatsdescriptionandexit-v,--verbosity=N:setlogginglevel(default:5,min:0,max:11)默认debuglog是不可用的,但是在生产环境中打开debug日志,并将日志级别设置为verbosity,LOG_INFO(-v6或–verbosity=6);默认日志级别:日志级别-v6或–verbosity=6:在这个日志级别中,胡桃夹子日志记录了每个客户端和服务器的生命周期以及一些重要的信息,例如节点从哈希环中的淘汰情况。打开调试日志的方式是在编译时加入--enable-debug=log选项.-o,--output=S:setloggingfile(default:stderr)-c,--conf-file=S:setconfigurationfile(default:conf/nutcracker.yml)如果不指定该选项,则默认为conf/nutcracker.yml,我们也可以设置自己的配置文件;-s,--stats-port=N:setstatsmonitoringport(default:22222)-a,--stats-addr=S:setstatsmonitoringip(default:0.0.0.0)指定启动地址,默认为0.0.0.0;-i,--stats-interval=N:setstatsaggregationintervalinmsec(默认:30000毫秒)-p,--pid-file=S:setpidfile(默认:off)-m,--mbuf-size=N:setsizeofmbufchunkinbytes(默认:16384bytes)#p#配置文件参数:listen:本serverpool.nutcracker服务器池监听端口和地址的监听地址和端口;hash:hash函数哈希函数的名称,支持md5、crc16、crc32、finv1a_32等十多种;hash_tag:两个字符串,指定用于哈希的key部分.Eg"{}"or"$$".Hashtagenablemappingdifferentkeystothesameserveraslongasthepartofthekeywithinthetagisthesame.启用散列标签意味着您将使用部分键来计算散列值。当哈希标签存在时,我们使用标签中的部分键来构建一致的哈希。在其他情况下,我们使用所有键来构建散列标签,允许您将不同的键(只要标签中的部分相同)映射到同一台服务器。例如服务池beta的配置如下,指定两个hash_tag字符“{}”,表示将映射键“user:{user1}:ids”和“user:{user1}:tweets”到同一个服务器上面,因为我们使用'user1'来计算hash,键“user:user1:ids”会使用整个字符串来计算hash,所以它可能会被映射到其他服务器。超时:我们等待建立与服务器的连接或接收来自服务器的响应的超时值(毫秒)。默认情况下,我们无限期地等待。为胡桃夹子的每个服务池配置超时比仅仅依赖客户端超时要好得多。例如:timeout:400仅仅依靠客户端的超时设置是不能达到理想的超时效果的,反而起到了相反的效果,因为这里客户端的超时设置变成了客户端到代理的超时,但是从代理到代理的链接服务器始终保持不变,客户端重试请求对服务器没有影响。默认情况下,胡桃夹子将无限期地等待发送到服务器的任何请求。设置超时后,如果超时后服务器没有响应,则会向客户端发送超时错误信息SERVER_ERRORConnectiontimeout。积压:TCP积压参数。默认为512。preconnect:一个布尔值,它控制ifnutcracker在进程启动时应预连接到此池中的所有服务器。默认为false。redis:控制sifaserverpoolspeaksredisormem缓存协议的布尔值。默认为false。server_connections:每个服务器可以打开的最大连接数。默认情况下,我们最多打开一个服务器连接。twemproxy的设计意图是通过少量的服务端的链接来响应更多的客户端的链接,但需要注意的是当twemproxy配置为server_connections:>1时不一定如此。为了说明这一点,假设在twemproxy配置为server_connections:2的场景下,客户端发出一条以setfoo003\r\nbar\r\n(write)开头的命令,然后第二条命令是getfoo\r\n(read)流水线请求,预期结果是读取foo时返回bar。但是,由于配置了两个服务器连接,读写请求可能会发送到不同的连接,这也意味着它们的执行顺序取决于哪个先到达服务器。综上所述,如果客户端希望得到我***写的内容,需要配置twemproxy为server_connections:1或者客户端只发起同步请求。auto_eject_hosts:一个布尔值,用于控制服务器是否应在服务器连续失败时暂时被弹出server_failure_limittimes。请参阅活动建议以获取信息。默认为false。server_retry_timeout:当auto_eject_host设置为true时,等待重试之前等待的超时值以毫秒为单位。默认为30000毫秒。server_failure_limit:当auto_eject_host设置为true时,将导致它被临时弹出的服务器连续失败的次数。默认为2。servers:Alistofserveraddress,portandweight(name:port:weightorip:port:weight)forthisserverpool.twemproxy上代理的服务实例可以通过两种字符串格式指定'host:port:weight'或'host:port:weightname'。或者在前面的配置中,键是直接从'host:port:weight'三元组映射而来,而在后者中,键是从节点名映射而来,节点名对应主机的地址和端口。后一种方法允许我们更自由地重置节点后端实例,而不会破坏哈希环。理想的配置是通过将auto_eject_hosts设置为false来实现的。要了解issue25的细节,需要注意的是,在使用节点名构建一致性哈希环时,twemproxy会忽略'host:port:weightname'格式的字符串中权重的值。测试使用:(1)配置一个配置文件:(2)根据服务器的配置,在对应的服务器上启动redis-server;(3)启动nutcracker日志显示redispoolproxy4台服务器。#p#(4)连接nutcracker,设置各redis服务器的监控状态,获取key值:nutcrackerlog:以上只展示了一台主机多台的情况实例。如果是多主机多实例,只需要更改对应的IP即可。参考:twemproxy/recommendation.md(翻译)twemproxy的一些生产环境经验原文链接:http://blog.chinaunix.net/uid-8625039-id-4384964.html