技术开发 频道

MySQL内部开发人员如何看待MySQL组复制?

  【IT168 评论】MySQL因为高性能、可扩展性和可用性被广泛应用于Web应用程序,成为支持高流量社交媒体、电商应用程序以及快速成长企业的IT平台基础。在MySQL 5.7.17版本中,MySQL Group Replication可在Oracle Cloud上使用,并为MySQL数据库提供本机内置高可用性。

  为了更深入地了解MySQL Group Replication的优点和用例,我们很高兴采访了MySQL Group Replication的团队负责人Nuno Carvalho,并从他的视角来解读组复制。

  问:Nuno,可以简单介绍一下自己及现在从事的工作内容?

  Nuno:加入MySQL之前,我是葡萄牙米尼奥大学的研究生和研究员,工作重点是设计和实现提高分布式系统可扩展性的技术。五年前,作为MySQL Replication团队的开发人员加入Oracle,并且有机会参与组复制的任务。

  目前,我是Oracle的首席软件工程师和MySQL复制服务团队负责人,团队负责MySQL Group Replication插件。

  问:您是如何理解MySQL Replication?为什么它会是MySQL的流行功能?

  Nuno:MySQL复制是一种在几个服务器之间传播数据的简单有效的方法,有三个主要目标:

  可用性:通过将数据复制到多个位置来避免单点故障问题。

  可伸缩性:应用程序可以通过向副本发送读取操作并允许主服务器仅处理写入操作来提供更多请求。

  克服单一服务器限制:所有大用户都将达到他们的数据不再适合单个服务器的程度。解决方案是在多个服务器之间对数据进行分片,并且需要复制来处理数据流,以便有效地进行切分。

  MySQL复制非常容易设置并且性能非常好,因此MySQL开发人员和DBA喜欢使用此功能来扩展,并为其MySQL环境提供高可用性。

  问:现有的MySQL复制已经是一个很好的解决方案,那么是什么触发了MySQL Group Replication的发展?

  Nuno:MySQL复制是异步复制,因此为了避免传统MySQL复制和新MySQL组复制之间的混淆,我将推动现有的MySQL复制——“MySQL异步复制”向前发展。

  如前所述,许多MySQL开发人员和DBA都使用MySQL异步复制进行扩展,即使用主服务器处理所有写入和读取操作的副本。在这种情况下,如果因为某种原因主服务器出现故障或需要关闭以进行维护或升级,那么DBA必须手动将主服务器故障转移到其中一个副本,将写入流量定向到新主服务器,并配置所有副本。一旦先前失败的服务器再次重新联机,DBA必须手动将服务器添加回复制拓扑并进行适当配置。

  如果只有一个主副本和两个副本,这不是一个大问题,但考虑到拓扑中有数十个或数百个副本甚至多个复制层的情况:手动处理所有这些任务就变得非常复杂,而且容易出错。

  随着MySQL用户数量的增长,MySQL对业务关键型应用程序的使用以及它在组织内的占用空间也在增长。具有容错MySQL系统的请求成为客户以及Oracle MySQL工程团队的高优先级工作。也因此,我的团队开始了创建MySQL组复制的工作。

  问:很高兴能够听到产品开发背后的故事,其实今天的主题是:什么是MySQL Group Replication以及它是如何工作的?

  Nuno:MySQL Group Replication是一个MySQL数据库插件,它使开发人员和DBA能够创建弹性、高可用性、容错复制拓扑。它是一种管理一组服务器并将其呈现为单个服务器的机制,因为同一组中的所有服务器执行相同的操作并具有相同的数据。拥有相同数据集的多个副本可以最大限度地降低丢失数据的风险。

  MySQL Group Replication可以在两种模式下运行:

  1.单主模式:在这种模式下,一次只有一台服务器接受更新,因此它几乎就像是任何一台服务器的直接替代品,但具有内置的高可用性。在主服务器发生故障的情况下,该组会自动选择新的主服务器,并且服务不会中断,因为所有操作都在后台进行。

  2.多主模式:在此模式下,所有服务器都可以接受更新,即使它们是同时发布的。内置的组成员资格服务使组的视图保持一致,并且在任何给定的时间点都可用于所有服务器。服务器可以离开或加入组,视图也会相应更新。在服务器意外离开组的情况下,内置故障检测机制将检测此事件并通知组视图已更改。当服务器加入时,该组将通过分布式恢复阶段,以便在处理请求之前向组提供更新。所有这些操作都是自动完成的,无需人工干预。

  问:MySQL Group Replication与其他MySQL复制机制有何不同?

  Nuno:MySQL组复制虽然在外观和使用感受方面与单个服务器相同,但它在传输层中有一个全新的实现。

  MySQL异步复制在主服务器与其辅助服务器之间是典型TCP连接,并且这些操作不协调。

  例如,如果一个主服务器有两个辅助服务器,那么确保数据同时复制到两个辅助服务器并不简单,处理故障对于管理员来说也会是一个非常复杂的过程。

  另一方面,MySQL Group Replication基于Paxos实现,它确保所有服务器以相同的顺序接收相同的数据集。这允许我们在组之间建立逻辑时钟,因此可以根据该时钟控制所有操作,例如实时组成员资格或单主模式中的主要选举。通过这种实现,使得MySQL Group Replication与典型的MySQL异步复制相比,在耐用性方面表现更好。

  问:MySQL Group Replication如何帮助DBA?

  Nuno:当使用MySQL异步复制时,DBA负责在计算机出现故障或主服务器的计划维护期间手动处理故障和转移主要故障。通过MySQL Group Replication中的内置组成员资格管理,自动管理任务,有效避免故意删除成员或因计算机故障而导致的意外删除。

  MySQL Group Replication提供数据一致性保证、冲突检测和节点故障检测以及与数据库故障转移相关的操作,无需手动干预或自定义工具。发生问题时,该组可以管理必要的故障转移并自行修复。

  以上是自动化DBA任务的重要一步。使用MySQL Group Replication,DBA不仅可以节省在计划维护期间手动配置必要故障转移所需的时间。更重要的是,它消除了DBA在压力灾难恢复期间正确配置故障转移和其他必要设置的负担。由于故障转移过程是自动进行的,因此在服务器发生故障时,故障转移时间会显着缩短。

  对于MySQL异步复制,当主服务器发生故障时,故障转移完成需要5秒到1分钟或更长时间,具体取决于工作负载以及检测到主要故障的方式。使用MySQL Group Replication,如果一组服务器中的某个服务器出现故障,则组会立即自动处理故障转移。

  问:开发人员如何从MySQL Group Replication中受益?

  从开发人员的角度来看,使用单主模式实现MySQL组复制的非常好的部分是在应用程序级别,几乎不需要进行任何更改,只需对代码进行少量的更改就可以为应用程序提供更高的可用性。当底层基础架构从单个服务器移动到由MySQL Group Replication管理的一组服务器时,可以轻松调整现有应用程序,开发人员可以期待InnoDB,Performance Schema以及其他MySQL组件的常见行为。

  考虑尝试MySQL Group Replication的开发人员的快速说明:由于架构中的分布式方式,事务可能会因为并发操作之间的冲突而在提交时回滚。例如,如果您有一个三人组,当两个事务并行发布到两个不同的服务器并且它们触及同一行时,其中一个将回滚,只有一个将被提交。这是开发人员在使用组复制替换单个服务器时应注意的差异。

  Group Replication为开发人员提供的另一个好处是保证耐用性。MySQL Group Replication只有在到达组中的大多数服务器时才会确认提交。因此,即使某些服务器发生故障,数据也不会丢失,因为大多数服务器已经拥有它。这对开发人员来说真的非常重要。

  问:MySQL用户的反馈如何?

  Nuno:MySQL Group Replication自2016年12月起才开始普遍使用,因此我们的大多数用户要么是在测试此功能,要么是在他们的试验计划中使用它。到目前为止,我们已经听到了那些早期采用者的大量积极反馈。他们特别喜欢这个功能的易于使用和部署,几乎不需要在应用程序中进行任何更改。我们还收到了来自用户非常有用的信息,我们正在使用它来使MySQL Group Replication更加强大和用户友好。

  问:现在,MySQL群组复制也可以在Oracle MySQL云服务中使用。通过在云中使用此功能,您可以预见哪些额外的好处?

  Nuno:在Oracle MySQL云服务中提供MySQL组复制最大和最直接的好处是用户可以在一个地方集中所有需要的东西。只需点击几下,我们的用户就可以通过非常好的配置在非常好的硬件上访问最新、最强大的MySQL复制技术。最终用户将能够轻松创建弹性、高可用性、容错的MySQL复制部署。

  我之前提到的有关MySQL Group Replication的所有强大功能,一些DBA可能非常感兴趣,但尝试却会犹豫,因为他们必须购买五台机器并部署,才能体验拥有5人小组的好处,考虑到仅购买和配置五台机器以测试MySQL Group Replication所需的时间和金钱,这个想要尝试的想法就可能熄火了。另一方面,在Oracle MySQL Cloud Service中使用MySQL Group Replication,整个过程变得非常简单。DBA只需要点击几个按钮并在Oracle Cloud中请求五个MySQL实例,该服务就可以在几分钟内完成,比获取和配置五个物理服务器快得多!

  问:用户期待未来的增强功能?

  Nuno:目前我们正在为MySQL Group Replication进行两个性能增强方面的工作:第一个方面是使启用MySQL Group Replication时的性能开销或影响最小化;另一个方面是进一步增加一个组中可以支持的成员数量。

0
相关文章