Transcript tcpcopy
TCPCOPY
王斌
2011-09-22
声明
偶中文很差,敬请谅解
文中中英文混杂,敬请谅解
如有不对,敬请谅解
内容
基础知识
TCPCOPY详细介绍
实战
注意事项
总结
基础知识
TCP/IP protocol
Linux Kernel
Raw Socket
Netlink
基础知识---TCP/IP协议
基础知识---Linux Kernel
基础知识---Raw Socket
基础知识---Netlink
Linux Netlink, which is used in Linux both as an intrakernel messaging system as well as between kernel
and user space.
一般而言,防火墙都是嵌入在Linux内核协议栈的处理过程中,
运行在内核地址空间。这就要求开发者深入理 解和掌握内核,
以及内核协议栈的代码。对于普通开发者来说,此要求显然过
于苛刻。为此,Linux内核在Netfilter框架的基础上提供了IP
Queue机制,使得基于用户态(User Mode)的防火墙开发成
为可能。
NetLink是Linux系统特有的、基于Socket编程接口的通信机
制。
NetLink
Netlink Filter
TCPCOPY详细介绍
定义
架构
Request Packets特点
实现策略
功能
应用领域
意义
使用方法
TCPCOPY定义
请求复制工具
TCPCOPY是基于底层的请求复制工具
TCPCOPY是不可靠的,类似于UDP
类似于数据镜像
TCPCOPY---Architecture
TCPCOPY---client
TCPCOPY---server
TCPCOPY---Request Packets特点
Client packets(客户端过来的packets)
Local packets(本地包)
Nonlocal inter-server packets
Keepalive connection
Short connection
TCPCOPY---实现策略
解决包复制转发的策略
简单策略(原王波版本)
自动机(新版本)
TCPCOPY---功能
分布式压力测试工具,利用在线数据,可以测试系统能
够承受的压力大小(远比ab压力测试工具真实地多),
找出系统瓶颈所在
高压下提前发现潜在bug
普通上线测试,可以发现新系统是否稳定,提前发现上
线过程中会出现的诸多问题,让开发者有信心上线
对于后端的短连接,请求丢失率非常低(1/10万),可
以应用于热备份
TCPCOPY---应用领域
什么时候要用这个?
上线没有信心
单元测试不够充分
对新系统不够有把握(例如membase取代memcached)
对系统能够承受的压力没有把握(例如新机器上线)
哪些场合?
需要找出系统性能瓶颈的场合
可以丢请求的场合,并且是tcp应用
例如:Web服务,tcp socket通信,nginx取代apache的场合,
membase取代memcached的场合
TCPCOPY---意义
零失误,领导高兴,你也高兴
对你的系统更加了解
了解底层是如何工作的
TCPCOPY---使用方法
TCPCOPY server
1)启动内核模块ip_queue (modprobe ip_queue)
2)设置要截获的端口,并且设置对output截获
iptables -I OUTPUT -p tcp --sport port -j QUEUE
3)./interception
注意(如果已经启动ip_queue和已经设置iptables,只需要运行第3项)
TCPCOPY client
./tcpcopy 本地ip地址1|本地ip地址2|… 本地port 远程ip地址 远程port
实战
广告投放系统(分单机器和多机器请求复制)
adclient请求复制
adserver请求复制
userserver请求复制
开源nginx hmux协议
Memcached
复制请求到membase中去
实战---广告投放系统特点
实战--- adclient
特点
客户端请求packets比较复杂
特点
请求复制丢失率在0.5%以下
多机器测试,发现能够承受4000次每秒的请求,ab
压力测试能够承受20000次每秒的请求,说明ab不
真实
实战--- adserver
特点
连接是keepalive的
有些连接很长时间不会被调用
连接会服务大量请求
一般很少出现丢包
效果
单机器请求复制丢失率在0.1%以下
多机器测试,实际测试能够承受6000次每秒,并在
高压测试情况下进程出现崩溃,提前发现bug
预计一台adserver能够承受1.5万次请求每秒
实战--- userserver
特点
连接只服务一个请求
模型简单
很少出现丢包
效果
单机器请求复制丢失率在0.001%以下
实战---开源nginx hmux协议
检测模块是否稳定
是否容易出现进程崩溃
是否会出现500错误
实战--- Memcached
检验Membase系统是否稳定
检验Membase是否丢数据
检验Membase是否能够应付异常情况
注意事项
Linux平台,内核2.6+
TCPCOPY类似于UDP,所以会丢包,进而丢失请求
本系统不支持域名,只支持ip地址
Local Requests,请设置lo MTU不超过1500,并且
在配置文件中不要设置127.0.0.1地址,要设置内网或
者外网地址
TCPCOPY server有可能会成为性能瓶颈
丢失请求率跟网络状况有关,最好在内网内复制请求
如果有问题,请注意error.log文件提示的错误信息
总结
请大家多支持TCPCOPY
开源地址
http://code.google.com/p/tcpcopy/
致谢
感谢王波的设计和部分代码
感谢公司的支持