上面的例子,一个主库,三个从库,通过 replication,主库生成 binlog,然后发给从库,从
库写入 relaylog,然后将其提交到自身数据库中,实现主从数据同步。
对于数据库之上的业务层来说,基于 MySQL 的主从复制集群,单点写入主库 ,在数据同步
到从库后,查询可以从任何一个从库读取数据,以读写分离的方式,大大降低主库的运行负载,
同时提升了从库的资源利用。
优点:
1. 通过读写分离实现横向扩展的能力,写入和更新操作在主库上进行,从库中进行数据
的读取操作,通过增加从库的个数,能够极大的增强数据库的读取能力;
2. 数据安全,因为副本可以暂停复制过程,所以可以在副本上运行备份服务而不会破坏
相应的源数据;
3. 方便进行数据分析,可以在主库中创建实时数据,数据的分析操作在从库中进行,不
会影响到源数据库的性能;
缺点:
1. 不过 MySQL Replication 有个严重的缺点就是主从同步延迟。
Semi-Sync 半同步复制
MySQL 有三种同步模式,分别是:
1. 异步复制:MySQL 中默认的复制是异步的,主库在执行完客户端提交的事务后会立
即将结果返回给客户端,并不关心从库是否已经接收并且处理。存在问题就是,如果
主库的日志没有及时同步到从库,然后主库宕机了,这时候执行故障转移,在从库中
选主,可能会存在选出的主库中数据不完整;
2. 全同步复制:指当主库执行完一个事务,并且等到所有从库也执行完成这个事务的时
候,主库在提交事务,并且返回数据给客户端。因为要等待所有从库都同步到主库中
的数据才返回数据,所以能够保证主从数据的一致性,但是数据库的性能必然受到影
响;
3. 半同步复制:是介于全同步和全异步同步的一种,主库至少需要等待一个从库接收并
写入到 Relay Log 文件即可,主库不需要等待所有从库给主库返回 ACK。主库收到
ACK ,标识这个事务完成,返回数据给客户端。
MySQL 中默认的复制是异步的,所以主库和从库的同步会存在一定的延迟,更重要的是异步
复制还可能引起数据的丢失。全同步复制的性能又太差了,所以从 MySQL 5.5 开始,
MySQL 以插件的形式支持 semi-sync 半同步复制。
MHA
MHA(Master High Availability Manager and Tools for MySQL)是一套优秀的作为
MySQL 高可用性环境下故障切换和主从提升的高可用软件。
这个工具专门用于监控主库的状态,当发现 master 节点故障的时候,会自动提升其中拥有最
新数据的 slave 节点成为新的 master 节点,在此期间,MHA 会通过其他从节点获取额外的
信息来避免数据一致性问题。MHA 还提供了 master 节点的在线切换功能,即按需切换
master-slave 节点。MHA 能够在 30 秒内实现故障切换,并能在故障切换过程中,最大程度
的保证数据一致性。
相关文档
评论