MySQL HA - Go语言中文社区

MySQL HA


  本博文介绍的MySQL集群高可用架构适用于中小型企业,如图所示,包括MySQL服务高可用和Mycat高可用。

这里写图片描述

  Mycat是基于阿里Cobar而研发的一款优秀的企业级分布式数据服务中间件,核心功能是数据库的分库分表,并以完全透明的方式向用户提供服务。Mycat在数据库和应用之间提供代理,数据源被切分到不同数据库中的不同分片上之后,应用读取数据时只需与Mycat进行交互,Mycat会完成数据源的切换,事物处理,数据聚合和结果返回。对于最终使用数据源的业务逻辑来说,看到的只是Mycat呈现的一个完整的支持标准SQL语句的数据库,而无需关心后端具体使用了哪种类型数据库系统,很大程度上简化了应用程序的工作,应用程序能够将原本需要花费在处理分片数据读取时的大量精力专注于业务逻辑,向用户提供高质量的服务。

这里写图片描述

  Mycat整体架构如下图所示,Mycat实现了MySQL通信协议与支持JDBC规范,能够与MySQL、Oracle、SQL Server、PostgreSQL、DB2等主流数据库服务通信。Mycat使用NIO/AIO方式与上下层通信,并发量大幅度提升,并支持对结果集的Order By排序,Group By以及limit等聚合功能。Mycat收到一个SQL操作任务时,首先对这个SQL语句进行解析,之后查找配置文件中是否配置此SQL操作所涉及到表的分片规则,如果配置,则根据分片字段和规则函数得到该SQL对应的分片列表,在这些分片上执行相应SQL操作,最后收集和合并所有分片返回的结果数据,并将最终结果返回给客户端。

这里写图片描述

  HAProxy是一个向应用提供基于TCP(4层)或HTTP(7层)协议代理功能的免费开源软件,相比于LVS(Linux Virtual Server)HAProxy的配置更加简单且功能丰富,提供多机热备健康检测和应用负载均衡服务。
  Keepalived是一个提供类似第三层、第四层、第五层交换机功能的软件。

MySQL服务高可用

  MySQL服务高可用采用Master-Master双主互备方案,实现当一个主库故障停机时,另一个主库立刻接管,以对用户完全透明的方式提供不间断服务。Master-Master双主高可用服务需要考虑的重点是要保证主备数据服务节点之间的数据同步一致。
  MySQL数据同步过程中主服务节点将对数据库进行的所有更改操作都记录在Binlog(Binary Log,二进制日志文件)中,主服务节点执行一次事务之后,通过复制线程将Binlog推送给从服务节点。从服务节点启动时开启I/O线程主动拉取主服务节点上需要更新执行的Binlog中的事务,本地SQL线程根据主服务节点Binlog中的记录在本地数据库中执行相同事务操作来保持数据的一致性。默认情况下MySQL使用异步方式进行主从服务间的Binlog同步,这种方式中MySQL主服务节点在执行事务操作后,将Binlog通过复制线程传输出去之后不管从服务节点是否接收到此次传输的Binlog,立即向客户端返回结果。异步复制虽然能够快速响应客户端请求,但是考虑极端情况,主库在事务提交之后故障宕机,此时备机因为网络原因并没有收到此次主库发送的Binlog,会导致主备库故障切换之后事务丢失,新的MySQL主服务节点上数据的不完整。因此采用Loss-less半同步复制(Loss-less Semi-Synchronous Replication)方式。

这里写图片描述

  Loss-less半同步复制方式支持通过设置rpl_semi_sync_master_wait_point参数值为AFTER_SYNC提供无数据丢失的半同步复制。MySQL主服务节点将本次事务的Binlog发送至从服务节点,确保至少一个从服务节点已经接受到本次Binlog之后,才会提交本次事务,向客户端返回事务处理结果,解决AFTER_COMMIT模式下导致的MySQL主从服务节点数据不一致问题,主服务节点故障宕机后,保证对于已经提交的事务而言,备机节点上的数据是同步一致的。在半同步复制发生超时,MySQL主服务节点会临时关闭半同步复制而转入异步复制模式,如果在一个半同步复制超时时间间隔之内,主服务节点收到了备机服务节点的响应,则主备服务节点数据同步重新切换到Loss-less半同步复制模式。
  MySQL双主互备中Mycat提供数据库负载均衡、后端节点健康检查等功能服务,主备服务故障切换工作交由Mycat来完成。在Mycat中配置代表主备服务节点的writeHost,Mycat默认将第一个writeHost作为写节点,如果第一个writeHost故障停机,Mycat会在心跳监测失败的情况下自动将所有DML操作语句发送至可用的备服务节点上执行,宕机的服务节点恢复后,将作为新主服务节点的从节点运行。Mycat能够根据不同情况对多个互备的主库配置不同的心跳和主从切换方式,如用户可以通过配置文件中的heartbeat元素来配置心跳检测语句(heartbeat sql)。

Mycat高可用

  采用HAProxy+Keepalived方案实现Mycat集群的高可用,如本博文一开始给出的图所示。HAProxy充当Mycat服务代理,当一个Mycat服务节点失效时,HAProxy能够自动将数据服务路由到集群中的其他可用Mycat节点上,并在Mycat服务失效节点恢复后,自动将其加入到Mycat集群中,从而保证Mycat服务的高可用。
  Keepalived主要解决HAProxy单点制约所带来的MySQL集群服务稳定性问题。将Keepalived和HAProxy部署在同一台服务器上,Keepalived对HAProxy服务节点的状态进行监控,并实现VIP漂移。当Keepalived检测到一个HAProxy服务节点故障宕机后,会自动将故障节点从系统中剔除,并能够在HAProxy服务失效节点恢复正常后,自动将其加入进来继续为Mycat提供代理服务。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/z45689/article/details/75217763
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 23:01:35
  • 阅读 ( 1006 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢