业务场景:

新建slave连到master,执行start slave时master险些被“搞死”。

分析:新建slave连到master时,会将主库上大量的binlog(几百G)拉取到本地保存为relay log,会导致两个问题

1、主库网络带宽被占满 。

2、主库的磁盘I/O负载很高。

解决思路:

1. 在slave拉取master的binlog时,在I/O thread上做限流:每拉取一定数据量master的binlog则sleep时间N。

这个测试效果比较明显,但存在如下几个问题:

1) 参数比较难控制,需要DBA根据实际场景调整来获得预期的网络流量,这个过程可能需要多次尝试才可能获取到预期行为
 2) 存在抖动,在sleep时刻明显能观察到不均匀的网络流量

2. 在socket的选型上做改进

1) 对主备库的IO线程使用的连接都设置socket属性。
 2) 灵感来自facebook mysql中引入的rpl_send_buffer_size参数:对主库的dump线程增加SNDBUF参数控制以优化主库发送的速度。

NET* net = &thd->net;
+  if (rpl_send_buffer_size &&
+      (setsockopt(net->vio->mysql_socket.fd, SOL_SOCKET, SO_SNDBUF,
+                  &rpl_send_buffer_size, sizeof(rpl_send_buffer_size)) == -1 ||
+       setsockopt(net->vio->mysql_socket.fd, IPPROTO_TCP, TCP_WINDOW_CLAMP,
+                  &rpl_send_buffer_size, sizeof(rpl_send_buffer_size)) == -1))
+    sql_print_warning(“Failed to set SO_SNDBUF with (error: %s).”,
+                      strerror(errno));
+

完整补丁参考 https://github.com/facebook/mysql-5.6/commit/d3b0c7814090bded6563fee7d46d2ae41ed32a60
 其中,主库的dump线程连接描述符NET的设置有两点:

a. SOL_SOCKET级别对应的应用层所设置的缓冲区大小
 b. IPPROTO_TCP级别对应的传输层设置的拥塞窗口大小

stackovreflow上有人遇到利用setsocketopt设置SOL_SOCKET级别的SO_RCVBUF但无效果的问题。解决方法为同时设置SOL_SOCKET级别的TCP_WINDOW_CLAMP。(注:TCP_WINDOW_CLAMP应该属于IPPROTO_TCP级别)

http://stackoverflow.com/questions/2223825/setting-tcp-receive-window-in-c-and-working-with-tcpdump-in-linux
http://linux.die.net/man/7/tcp

3) 至少设置备库才有效,从2048到UINT_MAX(2*1024*1024),检测主库网卡流出/备库网卡流入从4.8M 到 15.4M。
 4) 需要注意的是,此参数是在连接建立之前设置,更改此参数需要重启主备之间的复制。

从运维角度看,动态设置某个比较接近‘0’的时间,但主备复制延时低于此值后,复制不再受此限流的影响。

3.考虑到瓶颈在网络带宽和磁盘I/O上,可以改进架构,改为slave级联的架构,但是维护的成本会相应增加,需要权衡场景。

4.考虑使用SSD

转载于:https://blog.51cto.com/laoxu/1413257

mysql binlog限流问题总结相关推荐

  1. mysql数据库限流方案_用于对MySQL数据库的并发操作进行控制的方法及装置的制造方法_3...

    的数据库操作特点,预先设置的所述第一限流类型可以不同于本实施例中的设置,同样可以实现本申请的技术方案,也在本申请的保护范围之内. [0103]步骤102-3:判断MySQL数据库的threads_ru ...

  2. MySQL Binlog实现流式实时分析架构

    数据分析特别是实时数据分析,已经越来越多的成为各行各业的分析要求与标准 – 例如,(新)零售行业可能希望通过­­线下POS数据与实时门店客流流量的进行实时结合与分析,实现商品销售,销量,总类等等的实时 ...

  3. 基于Redis的限流系统的设计

    本文讲述基于Redis的限流系统的设计,主要会谈及限流系统中限流策略这个功能的设计:在实现方面,算法使用的是令牌桶算法来,访问Redis使用lua脚本. 1.概念 In computer networ ...

  4. 轻松两步,我在 SpringBoot 服务上实现了接口限流

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视 ...

  5. 搞懂限流算法这一篇就够了

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 TL;DR(too long don't read) 限流算法:计 ...

  6. 实战 Spring Cloud Gateway 之限流篇

    来源:https://www.aneasystone.com/archives/2020/08/spring-cloud-gateway-current-limiting.html 话说在 Sprin ...

  7. 阿里云二面:你对限流了解多少?

    今天来说说限流的相关内容,包括常见的限流算法.单机限流场景.分布式限流场景以及一些常见限流组件. 当然在介绍限流算法和具体场景之前我们先得明确什么是限流,为什么要限流?. 任何技术都要搞清它的来源,技 ...

  8. 高并发系统之限流特技

    转载至:http://blog.csdn.net/g_hongjin/article/details/51649246 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统 ...

  9. 解决 GraphQL 的限流难题

    在上一篇微服务架构设计模式的总结[1] 的结尾,提到了 GraphQL 的问题. 之前在某公司落地查询 API 方案时,我们没有选择 GraphQL,是因为: GraphQL 对于数据用户来说有一定的 ...

最新文章

  1. Pytorch的优化器推荐
  2. new Vue 发生了什么
  3. 外联css及js的使用
  4. 一分钟带你玩转 Spring IoC
  5. uC/OS II--与ECB操作相关的四个函数
  6. 前方两万字高能预警!SMBGhost SMBleed 漏洞深入研究
  7. spring-boot-maven-plugin多模块install问题解决办法
  8. [置顶] Eclipse显示中文 在线安装教程
  9. 智能门锁电路图_科技生活|网传“小黑盒”刷开智能锁,人脸识别系统“翻脸不认人”?...
  10. snmptrap发送消息到服务器,我试图通过snmptrap发送snmp消息
  11. angularjs姓名转拼音js
  12. deglitch 技术_fdc2214中文资料-技术参考.pdf
  13. 程序员数学(29)–投影与视图
  14. Boost电路实战详解!(高效率同步整流,PID闭环追踪)
  15. 用Scratch制作手游的角色方向虚拟控制器/虚拟摇杆的方法+源码
  16. 【C语言】动态内存的分配
  17. 蚂蚁金服智能推荐引擎解决方案与实践
  18. Python编程PTA题解——换硬币
  19. android软件无法联网,关于android软件wifi联网无法使用的问题
  20. 在Ubuntu16.04系统上更新FireFox浏览器(即火狐浏览器)到最新版本

热门文章

  1. templates是什么意思_什么?噪音可以用来降温做冰箱?
  2. 计算机安全的重要性 小论文,网络安全的重要性初中议论文
  3. mysql 读取oracle数据_Python中Pandas通过read_sql方法从Mysql或Oracle数据库中读取数据帧(DataFrame)...
  4. 获得对摄像头的访问权
  5. 如何检查数组是否有重复值
  6. 深圳职业技术学院计算机专业组代码,深圳职业技术学院代码是多少 有哪些优势专业...
  7. linux 快速启动程序,centos7快速启动应用程序教程
  8. python3实例车代码_Python编程pygame模块实现移动的小车示例代码
  9. php打水印汉字乱码,php 图片水印中文乱码解决方法
  10. coreos 搭建PHP,Linux_用Mac在CoreOS上搭建WordPress的教程,作者以自己的Mac笔记本为例, - phpStudy...