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

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

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

Java

    2.3.高可用架构优化

    将双节点数据库扩展到多节点数据库,或者多节点数据库集群。可以根据自己的需要选择一主两从、一主多从或者多主多从的集群。

    由于半同步复制,存在接收到一个从机的成功应答即认为半同步复制成功的特性,所以多从半同步复制的可靠性要优于单从半同步复制的可靠性。并且多节点同时宕机的几率也要小于单节点宕机的几率,所以多节点架构在一定程度上可以认为高可用性是好于双节点架构。

    但是由于数据库数量较多,所以需要数据库管理软件来保证数据库的可维护性。可以选择MMM、MHA或者各个版本的proxy等等。常见方案如下:

    2.3.1.MHA+多节点集群

Java

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

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

    MHA也可以扩展到如下的多节点集群:

Java

    优点:

    可以进行故障的自动检测和转移;

    可扩展性较好,可以根据需要扩展MySQL的节点数量和结构;

    相比于双节点的MySQL复制,三节点/多节点的MySQL发生不可用的概率更低

    缺点:

    至少需要三节点,相对于双节点需要更多的资源;

    逻辑较为复杂,发生故障后排查问题,定位问题更加困难;

    数据一致性仍然靠原生半同步复制保证,仍然存在数据不一致的风险;

    可能因为网络分区发生脑裂现象;

    2.3.2.zookeeper+proxy

Java

    Zookeeper使用分布式算法保证集群数据的一致性,使用zookeeper可以有效的保证proxy的高可用性,可以较好的避免网络分区现象的产生。

    优点:

    较好的保证了整个系统的高可用性,包括proxy、MySQL;

    扩展性较好,可以扩展为大规模集群;

    缺点:

    数据一致性仍然依赖于原生的mysql半同步复制;

    引入zk,整个系统的逻辑变得更加复杂;

    2.4.共享存储

    共享存储实现了数据库服务器和存储设备的解耦,不同数据库之间的数据同步不再依赖于MySQL的原生复制功能,而是通过磁盘数据同步的手段,来保证数据的一致性。

    2.4.1.SAN共享储存

    SAN的概念是允许存储设备和处理器(服务器)之间建立直接的高速网络(与LAN相比)连接,通过这种连接实现数据的集中式存储。常用架构如下:

Java

    使用共享存储时,MySQL服务器能够正常挂载文件系统并操作,如果主库发生宕机,备库可以挂载相同的文件系统,保证主库和备库使用相同的数据。

    优点:

    两节点即可,部署简单,切换逻辑简单;

    很好的保证数据的强一致性;

    不会因为MySQL的逻辑错误发生数据不一致的情况;

    缺点:

    需要考虑共享存储的高可用;

    价格昂贵;

    2.4.2.DRBD磁盘复制

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

Java

    当本地主机出现问题,远程主机上还保留着一份相同的数据,可以继续使用,保证了数据的安全。

    DRBD是linux内核模块实现的快级别的同步复制技术,可以与SAN达到相同的共享存储效果。

    优点:

    两节点即可,部署简单,切换逻辑简单;

    相比于SAN储存网络,价格低廉;

    保证数据的强一致性;

    缺点:

    对io性能影响较大;

    从库不提供读操作;

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

有用
分享