一, MHA 概述
MHA(Mater High Availability)是一套非常流行和实用的 MySQL 高可用解决方案软件, 保证 MySQL 主从复制集群中主库的高可用性, 保证集群业务不受影响. 当 master 异常宕机后, MHA 能够保证在 1~30s 的时间内实现故障转移, 选择一个最优 slave 升为最新 master, 同时保持数据一致性的状态, 以及将整个集群的所有数据损失降到最低. 因此 MHA 方案十分受欢迎.
二, MHA 架构
MHA 由 Manager(管理节点)和 Node(数据节点)组成. Manager 服务可以运行在一台独立服务器 (虚拟机) 上管理多个主从集群, 也可以是某一个从节点或者应用服务器节点, 而 Node 服务需要运行在每一个 MySQL 服务器上. Manager 会定时通过主库上的 Node 服务监控主库, 确保主库出现故障时可自动 (或指定) 将最优从库升为新主库, 让所有从库与最新 master 保持正常.
三, MHA 原理
1, 选择新主库
MHA 选择最优从库升为主库(根据其他从库 binlog 位置点最新的或半同步的从库)
2, 数据一致性
如果主库可进行 SSH 连接 MHA 会将主库内的所有 binlog 日志保存下来, 若连接不上直接放弃.
以选择好的新主库 binlog 位置点为基准, 通过 relay log 进行补全, 使其它从库与主库一致.
宕机主库的 binlog 日志恢复到所有数据库节点上.
3, 角色切换
选择最优从库提升为正式主库.
保证完整的主从复制状态
注释: 应用访数据集群时可以采用 keepalived .
三, MySQL 复制
异步复制(Asynchronous replication)
MySQL 默认的复制即是异步的, 主库在执行完客户端提交的事务后会立即将结果返给给客户端, 并不关心从库是否已经接收并处理, 这样就会有一个问题, 主如果 crash 掉了, 此时主上已经提交的事务可能并没有传到从上, 如果此时, 强行将从提升为主, 可能导致新主上的数据不完整.
全同步复制(Fully synchronousreplication)
指当主库执行完一个事务, 所有的从库都执行了该事务才返回给客户端. 因为需要等待所有从库执行完该事务才能返回, 所以全同步复制的性能必然会收到严重的影响.
半同步复制(Semisynchronous replication)
介于异步复制和全同步复制之间, 主库在执行完客户端提交的事务后不是立刻返回给客户端, 而是等待至少一个从库接收到并写到 relay log 中才返回给客户端. 相对于异步复制, 半同步复制提高了数据的安全性, 同时它也造成了一定程度的延迟, 这个延迟最少是一个 TCP/IP 往返的时间. 所以, 半同步复制最好在低延时的网络中使用.
异步复制
MySQL-MHA 架构图
MySQL MHA 应用实践(基础知识)
来源: http://www.bubuko.com/infodetail-3127737.html