前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tcpcopy实现新加的从库数据预热

tcpcopy实现新加的从库数据预热

作者头像
保持热爱奔赴山海
发布2020-06-28 10:51:12
1.1K0
发布2020-06-28 10:51:12
举报
文章被收录于专栏:饮水机管理员饮水机管理员

tcpcopy实现新加的从库数据预热,这个功能还是比较实用的(booking的2018年DTCC大会上的分享中也提过他们做了这个功能)。尤其是高负载的从库,如果直接加入一台冷的从节点到集群,可能造成大量慢查询出现。

编译tcpcopy和intercept的过程直接参考github官方即可,需要注意的是要安装 libpcap-devel 不然无法编译完成

代码语言:javascript
复制
git clone https://github.com/session-replay-tools/tcpcopy.git
cd tcpcopy

git clone    # 安装这个插件,不然报文转发到后端需要账号密码验证的MySQL时候时候无法work
./configure --set-protocol-module=mysql-replay-module
make && make install
默认是安装到 /usr/local/tcpcopy/

vim  /usr/local/tcpcopy/conf/plugin.conf 里面写上稍后要压测用的数据库账号密码
user dts@dts;
user archiver@archiver;
代码语言:javascript
复制
git clone https://github.com/session-replay-tools/intercept.git
cd intercept
./configure --with-resp-payload
make && make install
默认是安装到 /usr/local/intercept/

注意: tcpcopy在云上环境可能因为云厂商的限制,导致其不work。因此我们这里更主要是针对物理机环境下的实验。

代码语言:javascript
复制
1、192.168.2.4  online server  生产环境 mysql从库,部署 tcpcopy程序,负责捕获线上请求
2、192.168.2.162 assistant server  辅助机器, 部署有 intercept,负责向tcpcopy发送响应信息
3、192.168.2.164 target server  目标机器,待新加入的从库
4、192.168.1.40 发起压测的机器,部署有mysql客户端或者sysbench之类工具即可

大致结构如下:

image.png
image.png

tcpcopy拷贝一次流量访问的步骤如下:

① 一个客户请求到达线上机器;

② 拷贝IP层(或者数据链路层)的包到tcpcopy进程;

③ tcpcopy修改包的目的及源地址,发给目标测试机;

④ 拷贝的包到达目标测试机;

⑤ 目标测试机的应用处理访问,并返回结果给辅助机;

⑥ 返回结果在辅助机的数据链路层被截获,drop响应的body,copy返回的ip header;

⑦ 辅助机将响应header发送给线上机器的tcpcopy进程。

注意: 在做tcpcopy实验的时候,需要确保这几台主机是关闭 ip_forward的。操作方法:echo 0 > /proc/sys/net/ipv4/ip_forward

下面开始实时复制流量实验部分(流量录制的用的比较少,这里就不写了)

1. 目标机器 192.168.2.164 上配置路由 ,将响应包路由到辅助机 192.168.2.162

代码语言:javascript
复制
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.2.162 dev ens32
其中 192.168.2.162 为辅助机, 192.168.0.0 为发压客户端所在的网段

2. 辅助机 192.168.2.162 捕获目标机器发来的响应包 (和抓包命令类似)

代码语言:javascript
复制
格式:
./intercept -F <filter> -i <device,>
例子: 

cd /usr/local/tcpcopy/sbin/
./intercept -i ens32 -F 'tcp and src port 3306'  # 前台启动,需要放到后台的话,加上 -d 选项即可
含义:捕获网卡 ens32 ,端口 3306 基于tcp的包

3. 线上机器 192.168.2.4 上捕获包,并修改客户端地址,并把包发送给目标机器,等待辅助机发送响应包

代码语言:javascript
复制
格式:
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server,> [-c <ip range,>]

例子:
cd /usr/local/tcpcopy/sbin/
./tcpcopy -x 3306-192.168.2.164:3306 -s 192.168.2.162 -c 192.168.0.0     #全流量复制,如果后台运行需要加 -d选项即可

其它:
./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0 -r 20 -d  #复制20%的流量
./tcpcopy -x 80-3.3.3.3:8080 -s 2.2.2.2 -c 1.1.1.0  -n 2  -d  #复制2倍流量

4、压测结果,我这里就不贴了。感兴趣的,可以开mysql的general_log,看实例的网卡流量、errlog,都可以看到有用的信息。

5、预热完成后,记得删除之前加的路由:

代码语言:javascript
复制
route del -net 192.168.0.0 netmask 255.255.0.0

下图,是生产上可以参考用的方案:

image.png
image.png

参考:

https://www.jianshu.com/p/e34086c47493

https://blog.csdn.net/github_39037504/article/details/93030068

https://github.com/session-replay-tools/tcpcopy

https://www.sohu.com/a/245822692_671058

https://myslide.cn/slides/16467

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档