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/
 致谢
 感谢王波的设计和部分代码
 感谢公司的支持