Java教程:MySQL高可用方案对比(一)

开课吧开课吧锤锤2021-02-25 16:45

    互联网发展至今也不过几十年,但是却是近几年最火热得行业,无论是软件本身行业,还是由它衍生得行业,都是火热得不行,这导致越来越多得人开始涉足这个行业,人群越来越大,对程序员的需求就越来越多,虽然很多人从事着程序员工作,但是市场的需要远远大于市场上存在的人才,所以对于这样一个高薪,高就业的行业,在当今社会中,是不可多的机会。

Java

    1.概述

    我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:

    Ø如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。

    Ø用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。

    Ø当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。

    关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。

    2.高可用方案

    2.1.主从或主主半同步复制

    使用双节点数据库,搭建单向或者双向的半同步复制。在5.7以后的版本中,由于losslessreplication、logical多线程复制等一些列新特性的引入,使得MySQL原生半同步复制更加可靠。

    常见架构如下:

Java

    通常会和proxy、keepalived等第三方软件同时使用,即可以用来监控数据库的健康,又可以执行一系列管理命令。如果主库发生故障,切换到备库后仍然可以继续使用数据库。

    优点:

    架构比较简单,使用原生半同步复制作为数据同步的依据;

    双节点,没有主机宕机后的选主问题,直接切换即可;

    双节点,需求资源少,部署简单;

    缺点:

    完全依赖于半同步复制,如果半同步复制退化为异步复制,数据一致性无法得到保证;

    需要额外考虑haproxy、keepalived的高可用机制。

    2.2.半同步复制优化

    半同步复制机制是可靠的。如果半同步复制一直是生效的,那么便可以认为数据是一致的。但是由于网络波动等一些客观原因,导致半同步复制发生超时而切换为异步复制,那么这时便不能保证数据的一致性。所以尽可能的保证半同步复制,便可提高数据的一致性。

    该方案同样使用双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。

    可参考的优化方案如下:

    2.2.1.双通道复制

Java

    半同步复制由于发生超时后,复制断开,当再次建立起复制时,同时建立两条通道,其中一条半同步复制通道从当前位置开始复制,保证从机知道当前主机执行的进度。另外一条异步复制通道开始追补从机落后的数据。当异步复制通道追赶到半同步复制的起始位置时,恢复半同步复制。

    2.2.2.binlog文件服务器

Java

    搭建两条半同步复制通道,其中连接文件服务器的半同步通道正常情况下不启用,当主从的半同步复制发生网络问题退化后,启动与文件服务器的半同步复制通道。当主从半同步复制恢复后,关闭与文件服务器的半同步复制通道。

    优点:

    双节点,需求资源少,部署简单;

    架构简单,没有选主的问题,直接切换即可;

    相比于原生复制,优化后的半同步复制更能保证数据的一致性。

    缺点:

    需要修改内核源码或者使用mysql通信协议。需要对源码有一定的了解,并能做一定程度的二次开发。

    依旧依赖于半同步复制,没有从根本上解决数据一致性问题。

    以上内容由开课吧老师叶戈尔提供,更多Java教程尽在开课吧广场Java教程频道。

有用
分享