主从或主主半同步复制
半同步复制优化
MGR
Group Replication全同步复制
相对于MySQL源生复制和semi-sync半同步复制的差异
全同步复制,主备无延迟,一个节点宕机后其他两个节点可以立即提供服务,而semi-sync需要应用(执行)完所有relay log,并依赖第三方高可用软件实现数据不丢失;
事务冲突检测保证数据一致性,多个节点可以同时读写数据,可以极大简化数据访问;
行级别并行复制,MySQL 5.7/MariaDB 10.0之前slave sql线程只有一个,这个长期饱受诟病,是导致slave落后master的主要原因。
参考链接:https://blog.csdn.net/poxiaonie/article/details/73505948
优点
真正的多主架构,任何节点都可以进行读写,无需进行读写分离;(注:生产环境建议只在一台机器上写,由于集群是乐观锁并发控制,事务冲突的情况会在commit阶段发生。如果有两个事务在集群中不同的节点上对同一行写入并提交,失败的节点将回滚,客户端返回报错,作为DBA你不想被一群开发投诉的话,还是默默的开启Single-Primary写入模式)
MGR使用的Paxos协议,性能更好,即使MGR集群节点数再多,性能也能平稳。解决了Gelera实际只能用三个节点,网络抖动造成的性能和稳定性问题;
支持多个操作系统平台,而Galera仅支持Linux系统
无集中管理,可以在任何时间点失去任何一个节点,集群将正常工作不受影响;
节点宕机不会导致数据丢失;对应用透明。
缺点
- 加入新节点,开销大,需要复制完整的数据。
- 不能有效的解决写扩展问题,磁盘空间满了,无法自动扩容,不能像MongoDB分片那样自动移动chunk做balance
- 有多少个节点就有多少份重复的数据
- 由于事务提交需要跨节点通讯(分布式事务),写入会比主从复制慢
- 对网络要求非常高,如果网络出现波动或机房被ARP攻击,造成两个节点失联,Group Replication集群发生脑裂,服务将不可用。
- 集群自身不提供VIP机制,也没有像MongoDB副本集那样提供JAVA/PHP客户端API接口实现故障切换(需要开发自己写,成本较高),需要结合第三方HaProxy软件(建议2块网卡做bond0)+自定义脚本实现秒级故障切换,另通过代理方式,性能会降低,因为多了一层网络转发。
限制
- 仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;
- 必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
- COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景
- 目前一个MGR集群最多支持9个节点
- 不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
- 二进制日志不支持binlog event checksum
- 只支持ipv4网络
- 不支持Savepoints,不支持SERIALIZABLE隔离级别在Multi-Primary多主模式,不支持外键在Multi-Primary多主模式
- 整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,比如硬盘故障(RAID10坏了一块盘),那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
Group Replication的特性和注意事项
- 全同步复制,事务要么在所有节点都提交,要么都回滚;
- 多主复制,可以在任意节点进行写操作;
- 在从服务器上并行应用事件,真正意义上的并行复制;
- 节点自动配置–故障节点自动从集群中移除,当故障节点再次加入集群,无需手工备份当前数据库并拷贝至故障节点;
- 应用程序的兼容性:无需更改应用程序,原生的MySQL接口;
- 生产环境上集群推荐配置3个节点; 每个节点都包含完整的数据副本;
- 各个节点的同步复制,通过GTID binlog ROW实现。
Keepalived/Heartbeat
MHA
MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序完全透明。
MHA Node运行在每台MySQL服务器上,主要作用是切换时处理二进制日志,确保切换尽量少丢数据。
共享存储
DRBD磁盘复制
DRBD是一种基于软件、基于网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像,当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步。
优点
- 两节点即可,部署简单,切换逻辑简单;
- 相比于SAN储存网络,价格低廉;
- 保证数据的强一致性;
缺点
- 对io性能影响较大;
- 从库不提供读操作;
Galera
POAXS
Percona XtraDB Cluster
MariaDB Galera Cluster
参考链接
https://zhuanlan.zhihu.com/p/25960208