MySQL主备双向复制网络Binlog流量是否翻倍场景测试

1、背景

MySQL主备复制是基于Binlog的逻辑复制,通常在主库写入数据,数据通过Binlog复制到备库,备库只读,网络流量是单向的主库到备库。如果在此基础上,建立主备双向复制,仍然只在主库写入,主库Binlog复制到备库,备库产生的Binlog是否会再次传输到主库?虽然MySQL通过server_id和server_uuid两种方式避免循环复制,但是备库Binlog是否会通过双向复制传输到主库,这个需要通过实验来验证一下。

2、验证环境

  • MySQL版本5.7.19
  • MySQL 1主1从(单向复制,双向复制)
  • sysbench往主库写入数据
  • iftop 监控网络数据

3、验证过程

1、搭建MySQL1主1从,单向复制,sysbench往主库写入数据,时间5分钟,iftop监控主、从库网络数据。
2、搭建MySQL1主1从,双向复制,sysbench往主库写入数据,时间5分钟,iftop监控主、从库网络数据。
3、对比单向复制与双向复制两种场景下的网络数据。

sysbench在主库上执行,连接127.0.0.1,sysbench与主库之间没有走网卡流量。

验证结果:

主库send主库recv从库send从库recv
单向复制11.4MB/s95.0KB/s90.2KB/s11.2MB/s
双向复制10.8MB/s4.27MB/s4.14MB/s10.7MB/s

从测试结果来看,单向复制主库以发送流量为主,接收流量非常少,从库以接收流量为主,发送流量非常少。双向复制时,明显主库接收流量和从库发送流量都增加了很多。但是有一个疑问,主库接收的流量为什么只是自己发送流量的一半不到(发送10.8MB/s,接收4.27MB/s),这个问题以后再进一步研究。

补充:
关于双向复制,主库接收的流量为什么只是自己发送流量的一半不到(发送10.8MB/s,接收4.27MB/s),这个问题实际上是由于主库生成binlog的速度比从库快导致的。sysbench往主库压测写入,64个线程并发,从库开启并行复制,也只有16个线程,压测一段时间后,主从复制产生延迟,从库应用binlog的速度赶不上主库生成binlog的速度,所以从网卡流量上看,主库发送流量的速度比接收流量的速度大,但实际上,从总的流量上看,开启双向复制,binlog总流量应该是翻了整整一倍。

4、结论

MySQL主备双向复制,相比于单向复制,即使只在主库写入数据,也会导致网络流量增加,网卡上Binlog传输量整整翻了一倍。

文章评论

0条评论