MySQL High Availability

主从或主主半同步复制

半同步复制优化


MGR

Group Replication全同步复制

相对于MySQL源生复制和semi-sync半同步复制的差异

  1. 全同步复制,主备无延迟,一个节点宕机后其他两个节点可以立即提供服务,而semi-sync需要应用(执行)完所有relay log,并依赖第三方高可用软件实现数据不丢失;

  2. 事务冲突检测保证数据一致性,多个节点可以同时读写数据,可以极大简化数据访问;

  3. 行级别并行复制,MySQL 5.7/MariaDB 10.0之前slave sql线程只有一个,这个长期饱受诟病,是导致slave落后master的主要原因。

参考链接:https://blog.csdn.net/poxiaonie/article/details/73505948

优点

  1. 真正的多主架构,任何节点都可以进行读写,无需进行读写分离;(注:生产环境建议只在一台机器上写,由于集群是乐观锁并发控制,事务冲突的情况会在commit阶段发生。如果有两个事务在集群中不同的节点上对同一行写入并提交,失败的节点将回滚,客户端返回报错,作为DBA你不想被一群开发投诉的话,还是默默的开启Single-Primary写入模式)

  2. MGR使用的Paxos协议,性能更好,即使MGR集群节点数再多,性能也能平稳。解决了Gelera实际只能用三个节点,网络抖动造成的性能和稳定性问题;

  3. 支持多个操作系统平台,而Galera仅支持Linux系统

  4. 无集中管理,可以在任何时间点失去任何一个节点,集群将正常工作不受影响;

  5. 节点宕机不会导致数据丢失;对应用透明。

缺点

  1. 加入新节点,开销大,需要复制完整的数据。
  2. 不能有效的解决写扩展问题,磁盘空间满了,无法自动扩容,不能像MongoDB分片那样自动移动chunk做balance
  3. 有多少个节点就有多少份重复的数据
  4. 由于事务提交需要跨节点通讯(分布式事务),写入会比主从复制慢
  5. 对网络要求非常高,如果网络出现波动或机房被ARP攻击,造成两个节点失联,Group Replication集群发生脑裂,服务将不可用。
  6. 集群自身不提供VIP机制,也没有像MongoDB副本集那样提供JAVA/PHP客户端API接口实现故障切换(需要开发自己写,成本较高),需要结合第三方HaProxy软件(建议2块网卡做bond0)+自定义脚本实现秒级故障切换,另通过代理方式,性能会降低,因为多了一层网络转发。

限制

  1. 仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;
  2. 必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
  3. COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景
  4. 目前一个MGR集群最多支持9个节点
  5. 不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
  6. 二进制日志不支持binlog event checksum
  7. 只支持ipv4网络
  8. 不支持Savepoints,不支持SERIALIZABLE隔离级别在Multi-Primary多主模式,不支持外键在Multi-Primary多主模式
  9. 整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,比如硬盘故障(RAID10坏了一块盘),那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

Group Replication的特性和注意事项

  1. 全同步复制,事务要么在所有节点都提交,要么都回滚;
  2. 多主复制,可以在任意节点进行写操作;
  3. 在从服务器上并行应用事件,真正意义上的并行复制;
  4. 节点自动配置–故障节点自动从集群中移除,当故障节点再次加入集群,无需手工备份当前数据库并拷贝至故障节点;
  5. 应用程序的兼容性:无需更改应用程序,原生的MySQL接口;
  6. 生产环境上集群推荐配置3个节点; 每个节点都包含完整的数据副本;
  7. 各个节点的同步复制,通过GTID binlog ROW实现。

Keepalived/Heartbeat


MHA

MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序完全透明。

MHA Node运行在每台MySQL服务器上,主要作用是切换时处理二进制日志,确保切换尽量少丢数据。


共享存储


DRBD磁盘复制

DRBD是一种基于软件、基于网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等进行数据镜像,当用户将数据写入本地磁盘时,还会将数据发送到网络中另一台主机的磁盘上,这样的本地主机(主节点)与远程主机(备节点)的数据就可以保证实时同步。

优点

  1. 两节点即可,部署简单,切换逻辑简单;
  2. 相比于SAN储存网络,价格低廉;
  3. 保证数据的强一致性;

缺点

  1. 对io性能影响较大;
  2. 从库不提供读操作;

Galera


POAXS


Percona XtraDB Cluster


MariaDB Galera Cluster

参考链接

https://zhuanlan.zhihu.com/p/25960208

https://blog.csdn.net/wulantian/article/details/72652005

http://database.51cto.com/art/201801/563545.htm