-
Notifications
You must be signed in to change notification settings - Fork 15
twemproxy在唯品会的维护版本
作用:替换一个server pool中的server,并更新配置文件。
使用方法:replace_server arg1 arg2
参数说明:arg1是被替换server的ip:port ;arg2是新server的ip:port
示例:replace_server 10.101.1.10:22122 10.101.1.11:22122
局限:目前仅支持redis:true。
使用场景:利用redis的主从复制,配合replace_server命令实现集群的高可用。
作用:把twemproxy日志切割成指定大小,并保留一定数量的日志文件。
使用方法:在nutcracker的启动项中增加了三个选项: -R(--log-rotate) –M(--log-file-max-size) –C(--log-file-count)。
参数说明:
-
-R选项用于启用日志切割功能。默认不开启。
-
-M选项可以指定一个数字来设置每个log文件的大小,默认单位是byte,这个数字后面可以额外添加单位(目前仅支持B,M,G,MB,GB,不区分大小写)。默认值为1GB。
-
-C可以指定一个数字n来设置最多可以保留n个log文件,n可以为-1,0和正整数。如果n=-1,则保留所有log文件;如果n=0,只保留当前log文件;如果n>0,除当前log文件外,额外保留n个log文件。额外的log文件命名规则:当前log文件名_切割时间。默认值为10。
-
-M和-C选项都是在-R选项启用的时候才有效。
示例:nutcracker -d -o nutcracker.log -R -M 20MB -C 2
局限:选项-C目前最大值可以指定的值为200。
使用场景:防止twemproxy太大而造成的磁盘爆满。
作用:增加Keep-alive的机制可以检测并删除tcp死连接。
使用方法:yml配置文件中增加了四个参数:tcpkeepalive,tcpkeepidle,tcpkeepcnt和tcpkeepintvl。
参数说明:
-
tcpkeepalive参数决定是否开启keepalive机制。两个可选值:true|false。
-
tcpkeepidle参数指定tcp连接多长时间空闲后检查时候该连接是否已死。单位为秒。
-
tcpkeepcnt参数指定如果客户端一直没有回应,twemproxy要持续几次探测行为。
-
tcpkeepintvl参数指定twemproxy开始检查连接后,隔多久进行一次探测。单位为秒。
-
tcpkeepalive为true时,其他三个参数才有效。
示例:
twem1: listen: 127.0.0.1:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: false tcpkeepalive: true tcpkeepidle: 800 tcpkeepcnt: 3 tcpkeepintvl: 60 server_connections: 5 servers: - 127.0.0.1:23401:1 server1 - 127.0.0.1:23401:1 server2 - 127.0.0.1:23401:1 server3
局限:暂无。
使用场景:twemproxy上层使用lvs时,建议开启该功能。详见:https://github.com/twitter/twemproxy/issues/329
作用:增加twemproxy的管理接口。
使用方法:开启一个端口,专门用于用户登陆管理twemproxy。在nutcracker的启动项中增加了两个选项:-A (--proxy-adm-addr) -P (--proxy-adm-port)。 用户使用telnet登陆,即可以执行相应的新增命令(可通过help命令查看):show_conf,show_oconf,show_pools,show_pool,show_servers,find_key,find_keys,reload_conf,set_watch,del_watch,reset_watch,show_watch。
参数说明:
-
-A选项用于指定管理接口监听的ip地址,默认为0.0.0.0。
-
-P选项用于指定管理接口监听的port端口号,默认为0,不开启。
命令说明:
-
show_conf:查看当前使用的配置项。不带参数。
-
show_oconf:查看上一次使用的配置项。不带参数。
-
show_pools:查看当前所有pool的名字。不带参数。
-
show_pool:查看某个pool的详细信息。带一个参数(pool的名字)。
-
show_servers:查看某个pool中包含的所有server信息。带一个参数(pool的名字)。
-
find_key:获取某个key所在的server信息。带两个参数(pool的名字和要查找的key)。
-
find_keys:获取某些key所在的server信息。带一些参数(pool的名字和所有要查找的key)
-
reload_conf:重新加载配置文件。
-
set_watch:在zookeeper设置一个watch。目前仅支持conf watch。
-
del_watch:在zookeeper删除一个watch。目前仅支持conf watch。
-
reset_watch:在zookeeper重新设置一个watch。目前仅支持conf watch。
-
show_watch:在zookeeper查看一个watch。目前仅支持conf watch。
示例:nutcracker -d -o nutcracker.log -A 127.0.0.1 –P 32045
局限:find_key和find_keys两个命令在使用的时候,输入的key不能包含空格。目前仅支持conf watch。
使用场景:查看twemproxy当前配置,当前有无监听zookeeper等。
作用:使twemproxy在启动的时候可以从配置中心获取配置,并且当配置中心更改了配置后,twemproxy能相应的重新加载配置。
使用方法:
-
在twemproxy编译前configure的时候要增加—with-zookeeper项。
-
在nutcracker的启动项中增加了三个选项: -S(--zk-start) -K(--zk-keep) -Z(--zk-path) -z(--zk-server)。
参数说明:
-
-S选项指定twemproxy启动时配置从zookeeper获取。默认不开启。
-
-K选项指定当zookeeper改变了该相应配置后,twemproxy要重新获取配置并加载。默认不开启。
-
-Z选项指定twemproxy获取和监听zookeeper的配置节点名字。默认为twemproxy。
-
-z选项指定zookeeper的连接地址。默认为127.0.0.1:2181。
示例:nutcracker -d -o nutcracker.log -S -K -Z twemproxy123 -z 192.168.0.1:2181, 192.168.0.2:2181
局限:配置内容长度不得超过5000。
使用场景:twemproxy的配置从zookeeper获取,并且监听zookeeper,适合一个业务中用到多个twemproxy实例的情况。
作用:使一个server pool(slave)成为另外一个server pool(master)的复制。当存在这种复制关系后,存储命令会同时发送到master pool和slave pool,如果读取命令在master pool中miss,则会穿透到slave pool进行查询并返回结果,如果在slave pool中hit到结果,则可以回写到master pool中。
使用方法:yml配置文件中增加了三个参数:replication_from, replication_mode,penetrate_mode和write_back_mode。
参数说明:
-
replication_from参数在slave pool中配置,指定一个字符串即master pool的名字,此时slave pool就成为了master pool的replication pool。
-
replication_mode参数在master pool中配置,可以指定三个值:0(默认),1和2。replication_mode作用于存储命令,当replication_mode:0,nutcracker不关心slave pool的执行结果,只返回master pool的结果给用户;当replication_mode:1,如果master pool和slave pool执行结果不一致时,记录到log文件,nutcracker只返回master pool的结果给用户;当replication_mode:2,如果master pool和slave pool执行结果不一致,nutcracker返回master pool和slave pool中最坏的结果给用户。
-
penetrate_mode参数在master pool中配置,可以设置四个值:0, 1, 2, 3。如果0,只有master pool中miss后请求才穿透到slave pool;如果1,只有master pool返回错误后请求才穿透到slave pool;如果2,master pool中miss或者返回错误后请求都穿透到slave pool;如果3,请求不会穿透到slave pool。
-
write_back_mode参数在master pool中配置,可以指定两个值:0(默认)和1。write_back_mode作用于读取命令,当write_back_mode:0,穿透以后,如果在salve pool中hit结果,不回写;当write_back_mode:1,穿透以后,如果在slave pool中hit结果,回写结果到master pool中。
示例:
twem1: listen: 127.0.0.1:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: false replication_mode: 1 write_back_mode: 1 penetrate_mode: 1 server_connections: 5 servers: - 127.0.0.1:23401:1 server1 - 127.0.0.1:23401:1 server2 - 127.0.0.1:23401:1 server3 twem2: listen: 127.0.0.1:22123 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: false server_connections: 5 replication_from: twem1 servers: - 127.0.0.1:23402:1 server1 - 127.0.0.1:23402:1 server2 - 127.0.0.1:23402:1 server3
其中server pool twem2就是server pool twem1的replication pool。
局限:master pool和slave pool仅限在同一个yml配置文件。目前仅支持redis:false。暂不支持一主多从。
使用场景:适用于避免memcache单点,防穿透问题。