300 likes | 702 Views
TCPCOPY. 王斌 20 11 - 09 - 22. 声明. 偶中文很差,敬请谅解 文中中英文混杂,敬请谅解 如有不对,敬请谅解. 内容. 基础知识 TCPCOPY 详细介绍 实战 注意事项 总结. 基础知识. TCP/IP protocol Linux Kernel Raw Socket Netlink. 基础知识 ---TCP/IP 协议. 基础知识 ---Linux Kernel. 基础知识 ---Raw Socket. 基础知识 --- Netlink.
E N D
TCPCOPY 王斌 2011-09-22
声明 • 偶中文很差,敬请谅解 • 文中中英文混杂,敬请谅解 • 如有不对,敬请谅解
内容 基础知识 TCPCOPY详细介绍 实战 注意事项 总结
基础知识 TCP/IP protocol Linux Kernel RawSocket Netlink
基础知识---Netlink • Linux Netlink, which is used in Linux both as an intra-kernel messaging system as well as between kernel and user space. • 一般而言,防火墙都是嵌入在Linux内核协议栈的处理过程中,运行在内核地址空间。这就要求开发者深入理 解和掌握内核,以及内核协议栈的代码。对于普通开发者来说,此要求显然过于苛刻。为此,Linux内核在Netfilter框架的基础上提供了IP Queue机制,使得基于用户态(User Mode)的防火墙开发成为可能。 • NetLink是Linux系统特有的、基于Socket编程接口的通信机制。
TCPCOPY详细介绍 定义 架构 Request Packets特点 实现策略 功能 应用领域 意义 使用方法
TCPCOPY定义 请求复制工具 TCPCOPY是基于底层的请求复制工具 TCPCOPY是不可靠的,类似于UDP 类似于数据镜像
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/ 致谢 感谢王波的设计和部分代码 感谢公司的支持