官方文档:https://github.com/session-replay-tools/mysql-replay-module

tcpcopy可以将正式环境上来自客户端的请求复制一份到测试端并复现,想要真实的对MySQL进行容量规划,可以借助tcpcopy来将线上的流量

呈倍数的增长,将其复制到测试环境,从而快速定位测试环境出现瓶颈时负载情况,进而做好容量的全局把控

部署

伪装客户端IP:1.1.1.4

online server:1.1.1.1

target server :1.1.1.2

assistant server:1.1.1.3

前提条件:

1、三个节点的网络互通无网卡的安全限制(大多数云环境设置了安全限制),tcpcopy通过 -c 选项可以将线上服务器抓取的包复制一份并将来源IP

伪装成指定的客户端IP发送给target,如果进行了安全限制,一个网卡无法绑定2个IP,所以online server则会拒绝发送复制包,在online server

上通过tcpdump抓取的包将会如下

tcpdump -i eth0 -nn port 3306 and host 1.1.1.4

每隔3秒online server会发送RST

关于tcp标志

正常情况下伪客户端会和target建立三次握手

2、操作系统关闭rp_filter,内核2.6版本默认是关闭

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

3、按照官方文档将MySQL服务的用户名密码写入配置文件

4、assistant server关闭路由功能,默认是关闭的

echo  > /proc/sys/net/ipv4/ip_forward

具体操作

online server

/usr/local/src/tcpcopy/objs/tcpcopy -x -1.1.1.2: -s 1.1.1.3 -c 1.1.1.4 -n  -d
# 如果是多实例,sourcePort-targetIP:targetPort,以逗号分隔
/usr/local/src/tcpcopy/objs/tcpcopy -x 3306-1.1.1.2:3306,3307-1.1.1.2:3307 -s 1.1.1.3 -c 1.1.1.4 -n 3 -d
tcpcopy会捕获当前主机的‘3306’报文,更改客户端的IP为1.1.1.4,发送这些报文到target server 1.1.1.2的目标端口‘3306’,并连接1.1.1.3询问intercept 将响应包传递给自己
-n 3 是复制3倍份流量到target,tcpcopy会处理冲突的部分

target server

/usr/local/src/intercept/objs/intercept -i eth0 -F tcp and src port  -d
ntercept会从eth0网卡捕获监听3306端口的tcp包

assistant server

 route add -host 1.1.1.4 gw 1.1.1.3
路由客户端的所有响应包到assistant server
模拟客户端流量
online server
# mysql -h1.1.1.1 -uadmin -p123123 -P3306
# 创建带有主键的表t2
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 创建无约束字段的表t3
CREATE TABLE `t3` (
`id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 然后在两个表中分别插入一条数据
insert into t2 values(1);
insert into t3 values(1);

target server

mysql> show processlist;
+------+-------------+---------------------+------+---------+---------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-------------+---------------------+------+---------+---------+--------------------------------------------------------+------------------+
| 11 | system user | | NULL | Connect | 3044244 | Slave has read all relay log; waiting for more updates | NULL |
| 12 | system user | | NULL | Connect | 3044248 | Waiting for an event from Coordinator | NULL |
| 13 | system user | | NULL | Connect | 3044248 | Waiting for an event from Coordinator | NULL |
| 14 | system user | | NULL | Connect | 3044248 | Waiting for an event from Coordinator | NULL |
| 15 | system user | | NULL | Connect | 3044248 | Waiting for an event from Coordinator | NULL |
| 3961 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 3962 | admin | 1.1.1.4:24695 | NULL | Sleep | 5 | | NULL |
| 3963 | admin | 1.1.1.4:24286 | NULL | Sleep | 5 | | NULL |
| 3964 | admin | 1.1.1.4:24759 | NULL | Sleep | 5 | | NULL |
+------+-------------+---------------------+------+---------+---------+--------------------------------------------------------+------------------+
9 rows in set (0.00 sec)

mysql> select * from t2;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> select * from t3;
+------+
| id   |
+------+
|    1 |
|    1 |
|    1 |
+------+
3 rows in set (0.00 sec)

可以看到同时3倍的流量复制效应,对应的是3个回话;表t2有约束,tcpcopy会处理冲突的部分,

所以最后看到的是t1表中只有一条数据,而t2表中则是3倍流量复制的结果

MySQL容量规划之tcpcopy应用之道的更多相关文章

  1. 二 mysql容量规划,性能测试

    何为基线- 当前运行状态记录.快照- 用于和未来的状态进行对比- 未来时刻产生关键事件后的新状态,作为下一个基线基线数据收集,关注哪些要点- 系统负载- MySQL运行状态- 相应的业务指标1.系统& ...

  2. MySQL容量规划和性能测试

    性能容量关键指标: 每秒tps,峰值tps 基础数据量,日均增长数据量 最大连接数 内存分配 IOPS 重点关注指标: 业务指标: 每秒并发用户请求.每秒订单数.用户请求响应时长 折算成性能指标: q ...

  3. MongoDB的容量规划及硬件配置

    mongo是基于内存的数据库,应尽量将工作集中的数据全部加载到内存中,即内存应大于工作集 本文译自Chad Tindel的英文博客: http://www.mongodb.com/blog/post/ ...

  4. web容量规划

    容量和性能   容量规划是基于当前性能判断系统需要什么及什么时候需要,它既是资本支出合理化证明过程也是一个技术变更;   性能调优是优化已存在的系统性能;   一般服务的升级步骤是:性能调优 -> ...

  5. 新上线MySQL数据库规划

    新上线MySQL数据库规划1.删除test库2.删除root用户或者让root用户只可在本机登陆而对于有业务访问的数据库,在做删除root用户前需要依次确认 function.procedure.ev ...

  6. Hbase集群类型|集群配置|服务器选型|磁盘容量规划

    HBase和Hadoop的集群类型 1.单机模式 主要用于开发工作,一台机器上运行所有的守护进程,或者一台机器运行多个虚拟机.一般用于评估和测试. 2.小型集群 20台机器以内的集群,不同的机器运行不 ...

  7. Elasticsearch集群规模和容量规划的底层逻辑

    转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e416ae ...

  8. elasticsearch容量规划

    https://docs.bonsai.io/article/123-capacity-planning Capacity Planning Capacity planning is the proc ...

  9. 三万字、91道MySQL面试题。 附PDF

    文末领取面试题 高清PDF 数据库基础知识 1. 为什么要使用数据库 数据保存在内存 优点:存取速度快 缺点:数据不能永久保存 数据保存在文件 优点:数据永久保存 缺点:1)速度比内存操作慢,频繁的I ...

随机推荐

  1. 自定义orgmode中加粗字体的颜色

    自定义orgmode中加粗字体的颜色 Table of Contents 1. orgmode中加粗字体的默认处理 2. 设置设置加粗字体的颜色 1 orgmode中加粗字体的默认处理 在orgmod ...

  2. 2566. [51nod 1129] 字符串最大值

    [题目描述] 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 例 ...

  3. Linux if 命令判断条件总结

    Linux if 命令判断条件总结Linux if命令 关于文件属性的判断式 -a 如果文件存在 -b 如果文件存在,且该文件是区域设备文件 -c 当file存在并且是字符设备文件时返回真 -d 当p ...

  4. MySQL备份还原介绍

    window系统下 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql ...

  5. Block中__block实现原理

    三.Block中__block实现原理 我们继续研究一下__block实现原理. 1.普通非对象的变量 先来看看普通变量的情况. #import <Foundation/Foundation.h ...

  6. 面向对象编程OOP-2

    用ES6的方法 实现类的继承 //类的定义 class Animal { //ES6中新型构造器 constructor(name,age) { this.name = name; this.age= ...

  7. javascript“类”与继承总结和回顾

    Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟“类”的方法及js中继承的总结和回顾. js中实现“类 ...

  8. a标签目标链接问题

    1.先确定开始文件和目标文件,例如从css.html开始到body.html 2.确定文件寻找路径,因为css.html的父目录是css,而body.html在body目录下,所以需要先退到上一目录h ...

  9. java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)

    建立Chat项目,并在项目中创建窗口类 package com.swift; import java.awt.BorderLayout; import javax.swing.JFrame; impo ...

  10. Clover启动mbr的win7/win8

    对以传统bios安装在mbr分区的win7/WIN8也可以使用EFI引导直接进入win.首先进win提取EFI引导文件,以管理员员身份运行cmd,输入如下命令 bcdboot c:\windows / ...