主从复制如何工作

  1. 在主库把数据记录到binlog(二进制日志)。

  2. 备库开IO线程把binlog复制到自己的relaylog(中继日志)。

  3. 备库读取中继日志,重放到备库上。

半同步复制

半同步复制可以确保备库拥有主库数据的拷贝,减少了数据丢失的危险。

半同步复制在提交过程中增加了一个延迟:提交事务时,在客户端接收到查询结束反馈前必须保证二进制日志已经传输到一台备库上。

  • 半同步不会阻塞主库上的事务提交,只有通知客户端被延迟了。

  • 备库在接收到事务后发送ack而不是完成事务后发送。

  • 如果备库一直没有回应,会超时转化为异步复制模式。

配置步骤

在master服务器上

开启binlog开启gtid。

建立同步所用的数据库账号。

使用master_data参数备份数据库。

把备份文件传输到slave。

在slave上操作

开启binlog开启gtid。

恢复master上的备份数据库。

使用change master配置链路。

使用start slave启动复制。

GTID和日志点

日志点复制

  • slave请求master的增量日志依赖于日志偏移量。

  • 配置链路时需要指定参数。

  • 支持MMM和MHA。

GTID复制

  • 全局事务ID唯一,GTID=source_id:transaction_id。

  • slave增量同步master的数据依赖于其未同步的事务ID。

  • 配置链路时,slave根据已经同步的事务ID继续自动同步。

  • 支持MHA。

复制方式选择

  • 兼容老版本和MMM选择日志点复制。

  • 其他选择GTID复制。

‌MMM架构和MHA架构

MMM和MHA架构的作用

  • 对主从复制集群中的master的健康监控。

  • 当master宕机后把写VIP迁移到新的master。

  • 重新配置集群中的其他slave对新的master同步。

MMM的主从复制架构

  • MMM是perl语言开发的用于管理MySQL主主同步架构的工具包。

  • 主要作用:管理MySQL的主主复制拓扑,在主服务器失效时,进行主备切换和故障转移。

  • MMM无法完全的保证数据一致性,所以适用于对数据的一致性要求不是很高的场景。(因为主备上的数据不一定是最新的,可能还没从库的新。解决方法:开启半同步)。

  • VIP是基于ARP协议,因此所有节点必须处于同一局域网。

MMM架构的故障转移步骤

  • SLAVE:

    • 已复制日志的恢复。

    • 使用Change Master命令配置新主。

  • 主备:

    • 关掉read_only。

    • 迁移写VIP到新主。

MMM架构的配置步骤

配置主主复制的集群架构。

安装centos的yum扩展包。

安装所需的perl支持包。

安装mmm工具包。

配置并启用mmm服务。

MMM优点

  • 提供了读写VIP的配置。

MMM缺点

  • 故障切换会丢事务(主备使用半同步复制解决)。

  • 不支持GTID。

  • 社区不活跃。

MHA故障转移步骤

  • 选出最新更新的slave。

  • 尝试从宕机的master保存二进制日志。

  • 应用差异的中继日志给到其他slave。

  • 应用从master保存的二进制日志。

  • 提升选举的slave为新的master。

  • 配置其他slave向新的master同步。

MHA需要的资源

1主DB。

2-N从DB。

n+2IP地址。

监控用户。

复制用户。

MHA配置步骤

配置一主多从的复制架构。

安装centos的yum扩展源和依赖包。

配置集群内各主机的ssh免认证。

各节点安装mha_node软件。

管理节点安装mha_manager。

配置并启动mha管理进程。

MHA优点

  • 基于gtid和日志点。

  • 选举最合适的slave成为master。

MHA缺点

  • 需要自行开发写vip脚本。

  • 只监控master。

适用场景

  • 使用gtid。

  • 一主多从。

  • 更少的数据丢失场景。

‌如何减小主从复制的延迟

主从复制延迟的原因

  • 执行了大事务(解决:化为多个小事务)。

解决方法

  • 多线程复制。

  • 使用MGR复制架构(类似PXC)。

MGR架构

  • MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用解决方案,以插件形式提供。

  • MGR基于分布式Paxos协议,实现组复制,保证数据一致性。有故障检测和自动选主功能。

  • 提供单主模式与多主模式,多主模式支持多点写入。

  • 基于ROW格式的二进制日志文件和GTID特性。

实现原理

MGR由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。

引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。组复制依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案(迫真)。

单主模式

MGR优缺点:

  • 组内成员基本无延迟。

  • 支持多写,读写服务高可用。

  • 数据强一致,不丢事务。

MGR缺点:

  • 单主模式很难确认下一个primary。

  • 只能gtid,日志格式必须为row。

场景

  • 主从延迟敏感。

  • 数据强一致。

  • 读写高可用。

‌如何解决读写负载大的问题

读负载大

  • 读写分离加slave。

  • 数据库中间层做负载均衡。

写负载大

  • Mycat分库分表。

扩展知识:VIP与脑裂

VIP的工作原理是,

  • 为当期主机配置一个虚拟网卡,如eth0:0,该网卡绑定了唯一的MAC地址和虚拟IP地址VIP
  • 局域网内的主机欲与该VIP通信时,先通过ARP协议取到该VIP对应的MAC地址,再将VIP与MAC地址的对应关系缓存在其主机上
  • 后续通信时,使用上一步骤取到的MAC作为报文的MAC地址

VIP切换的原理是,

  • 将旧master绑定的虚拟网卡注销掉
  • 在新的master注册新的虚拟网卡(产生了新的MAC地址)
  • 通知局域网节点更新VIP与MAC的对应关系,后续通信采用新MAC地址

脑裂的原因,在于旧master节点没有正常将VIP摘掉,这时局域网机器通过ARP获取VIP的MAC时,就可能取到旧的MAC地址,导致与旧master通信。什么情况会出现这种情况呢?旧master由于上层交换机故障,未与manager节点正常通信,此时VIP是没有摘除掉的,过了一段时间上层交换机恢复了就会导致此问题。

https://zhangjunjia.github.io/2019/03/16/mysql-mmm-mha/

https://www.pianshen.com/article/13731481649/

Re

MySQL高可用架构-MMM、MHA、MGR、PXC的更多相关文章

  1. (转)MySQL高可用架构之MHA

    MySQL高可用架构之MHA  原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...

  2. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  3. MySQL高可用架构之MHA

    简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...

  4. 转一下大师兄的"MySQL高可用架构之MHA"

    简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...

  5. MySQL高可用架构之MHA(转)

    简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...

  6. mysql高可用架构之-MHA学习

    此博文参考  博主:mysql高级DBA yayun  完成 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司 ...

  7. MySQL高可用架构-MMM环境部署记录

    MMM介绍MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理 ...

  8. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  9. MySQL高可用架构之MHA 原理与实践

    MHA简介 关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能.MHA在监控到mas ...

随机推荐

  1. 编译ffmpeg(第一次),实现JPG转MP4

    ffpmeg网址:http://ffmpeg.org/ ffmpegapi文档:http://ffmpeg.org/doxygen/trunk/index.html 因为这是JPG转MP4,所以不涉及 ...

  2. linux(1)------vmvear虚拟机安装linux

    1.VMvare14(个人下载,软件付费,自行解决) 2.CentOS下载           https://www.centos.org/download/    官方网址,后期会跳转本地镜像站 ...

  3. ☕【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(上)

    TestNG介绍 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方便. 详细使用说明请参考官方链接:https://testng ...

  4. RapidSVN设置diff和edit工具

      菜单栏 -> View -> Preferences -> Programs选择相应的配置页即可   需要配置的路径,默认都在 /usr/bin目录下的 editor可以用ged ...

  5. Windows内核基础知识-8-监听进程、线程和模块

    Windows内核基础知识-8-监听进程.线程和模块 Windows内核有一种强大的机制,可以在重大事件发送时得到通知,比如这里的进程.线程和模块加载通知. 本次采用链表+自动快速互斥体来实现内核的主 ...

  6. 数据导出生成word附件使用POI的XWPFTemplate对象

    比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...

  7. sort-uniq-tr-cut命令 对文件处理相关操作

    目录: 一.sort命令 二.uniq命令 三.tr命令 四.cut命令 五.eval命令 一.sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序 语法格式 sort [选项] ...

  8. Xshell 为什么会出现中文乱码?

    在网上下载xshell并成功安装了,但是当登录服务器查看中文时却出现了乱码的现象呢?这是怎么回事呢?本集小编就同大家详细讲讲. 图1:使用中文命名文档 现象: 登录服务器查看中文却出现乱码 原因分析: ...

  9. vue开发流程

    在安装node.js 测试安装  在cmd 下输入node   如查能正确输出命令提示符,表明安装好node 测试安装npm -v   如果能成功出现版本信息表示安装好npm 安装配置 G码云   或 ...

  10. PTA——c++基本输入输出

    1.使用提取符(<<)可以输出各种基本数据类型的变量的值,也可以输出指针值.(T) 2.预定义的插入符从键盘上接收数据是不带缓冲区的.(F) 3.使用操作符setw对数据进行格式输出时,需 ...