mysql内部人员视图组复制功能

由于MySQL的高性能、可扩展性和可用性,它在网络应用中广受欢迎,并已成为支持高流量社交媒体门户、电子商务应用和快速增长的组织的it平台的基础。

使用最新的MySQL 5。7.17更新版本,MySQL组复制现在可以在Oracle Cloud上使用,并为MySQL数据库提供本机的、内置的高可用性。

mysql内部人员视图组复制功能

为了更深入地了解MySQL组复制的好处和使用案例,我们有幸采访了MySQL组复制的团队负责人Nuno Carvalho,并了解了他的内部观点。

问:嗨,努诺,你能给我们介绍一下你自己的背景,告诉我们你在MySQL做什么吗?

答:当然! 在来MySQL之前,我是葡萄牙米尼奥大学的研究生和研究员。 我的工作集中于设计和实现技术来提高分布式系统的可伸缩性。 五年前,我作为MySQL复制团队的开发人员加入了甲骨文。 有一天,我得到了一个从事组复制的机会,我的小团队承担了实现它的任务。 目前,我是甲骨文公司的首席软件工程师和MySQL复制服务团队主管。 我的团队负责MySQL组复制插件。

问:在我们深入探讨组复制之前,你能告诉我们什么是MySQL复制,以及为什么它是MySQL如此受欢迎的特性吗?

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

  1. 有效:通过将数据复制到多个位置,我们可以避免单点故障的问题。

  2. 可量测性:应用程序可以通过向副本发送读取操作并允许主服务器仅处理写入操作来满足更多请求。

  3. 克服单一服务器的限制:最终,所有大用户的数据都将不再适合单一服务器。 解决方案是在多台服务器之间分割数据,并且需要复制来处理数据流,以便分割能够有效地运行。

MySQL复制非常容易设置,而且性能非常好,所以MySQL开发人员和数据库管理员喜欢使用这一特性来扩展并为他们的MySQL环境提供高可用性。

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

答:MySQL复制是一种异步复制,所以为了避免混淆传统的MySQL复制和新的MySQL组复制,我将把现有的MySQL复制称为“MySQL异步复制”。

如前所述,许多MySQL开发人员和数据库管理员使用MySQL异步复制来进行横向扩展—使用主服务器来处理所有写操作和读操作的副本。 在这种情况下,如果由于任何原因主服务器出现故障或需要停机进行维护或升级,数据库管理员必须手动将主服务器故障切换到其中一个副本,将写流量定向到新的主服务器,并配置所有副本以从该服务器进行复制。 一旦以前出现故障的服务器重新联机,数据库管理员必须手动将服务器重新添加到复制拓扑中,并对其进行适当配置。

如果您只有一个主副本和两个副本,这不是一个大问题,但是考虑一下当您的拓扑中有几十个或几百个副本,甚至是多层复制时的情况:手动处理所有这些任务对于数据库管理员来说变得非常复杂、耗时并且容易出错。 随着MySQL用户数量的增长,MySQL在关键业务应用中的使用及其在组织中的影响也在增长。 数据同步 拥有一个容错MySQL系统的要求成为了我们的客户以及甲骨文公司的MySQL工程团队的一个高度优先事项。 因此,我的团队开始了创建MySQL组复制的旅程。

问:很高兴听到产品开发背后的故事,这实际上是我们今天话题的一个很好的过渡:什么是MySQL组复制,它是如何工作的?

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

MySQL组复制可以在两种模式下运行:

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

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

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

答:尽管MySQL组复制提供了与单个服务器相同的外观和感觉,但它在传输层有了全新的实现。

MySQL异步复制在主服务器和它的辅助服务器之间使用典型的传输控制协议连接,这些操作是不协调的。 例如,如果一个主服务器有两个辅助服务器,要确保数据同时复制到两个辅助服务器上并不容易。 这使得管理人员处理故障转移成为一个非常复杂的过程。

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

问:MySQL组复制如何帮助数据库管理员?

答:当使用MySQL异步复制时,当机器出现故障或在主服务器上进行定期维护时,数据库管理员负责手动处理故障和主故障转移。 通过MySQL组复制中内置的组成员管理,这些任务将被自动管理,无论是出于维护等目的有意删除成员,还是由于机器故障而意外删除成员。 MySQL组复制提供数据一致性保证、冲突检测和处理、节点故障检测和数据库故障转移相关操作,所有这些都不需要手动干预或定制工具。 出现问题时,该组有能力管理必要的故障转移和自我修复。

这是数据库管理员任务自动化的一大进步。 通过MySQL组复制,数据库管理员不仅节省了他们在计划维护期间手动配置必要故障转移的时间;更重要的是,它免除了数据库管理员在紧张的灾难恢复期间正确配置故障转移和其他必要设置的负担。 由于故障转移过程是自动化的,因此在服务器出现故障的情况下,故障转移时间大大缩短。 对于MySQL异步复制,当主服务器出现故障时,故障转移需要5秒到1分钟或更长时间才能完成,这取决于工作负载,主要取决于如何检测主服务器故障。 使用MySQL组复制,由于我们有一组服务器,如果其中一个出现故障,故障转移会立即由该组自动处理。 这在高可用性方面是一个巨大的进步,而且没有单点故障。

问:开发人员如何从MySQL组复制中受益?

从开发人员的角度来看,实现MySQL组复制(使用单主模式(的最佳部分是在应用程序级别几乎不需要任何更改! 代码变化很小,应用程序的可用性更高,这有多好? 当底层基础设施从单个服务器移动到由MySQL组复制管理的一组服务器时,现有的应用程序可以很容易地进行调整,开发人员可以预期数据库、性能模式以及其他MySQL组件的通常行为。

考虑尝试MySQL组复制的开发人员需要注意的一点是:考虑到体系结构中的分布式方式,由于并发操作之间的冲突,事务可能会在提交时回滚。 例如,如果您有一组三个事务,当两个事务并行发布到两个不同的服务器,并且它们接触同一行时,其中一个事务将回滚,只有一个事务被提交。 当您用组复制替换单个服务器时,开发人员应该意识到这一点。

另一个利益集团复制开发商的报价保证了耐用性。 MySQL组复制只在提交到达组中的大多数服务器时才确认提交。 因此,即使一些服务器出现故障,数据也不会丢失,因为大多数服务器已经有了数据。 这对开发者来说非常非常重要。

问:MySQL用户的反馈是什么?

答:MySQL群组复制从2016年12月才开始普遍使用,所以我们的大多数用户要么在测试这个特性,要么在他们的试点项目中使用它。 到目前为止,我们已经从那些早期采用者那里听到了很多积极的反馈。 他们特别喜欢这一事实,即该特性非常易于使用和部署,应用程序中几乎不需要任何更改。 我们还收到了来自用户的非常有用的输入,我们正在使用这些输入来使MySQL组复制更加强大和用户友好。

问:现在MySQL组复制也可以在Oracle MySQL云服务中使用。 您预计在云中拥有这一功能会带来哪些额外好处?

答:有了甲骨文MySQL云服务中的MySQL组复制,最大和最直接的好处是用户可以在一个地方拥有他们需要的所有东西。 只需点击几下鼠标,我们的用户就可以在最佳硬件上以最佳配置访问最新最棒的MySQL复制技术。 最终用户将能够轻松创建弹性、高可用性、容错的MySQL复制部署。

这里有一个很好的例子:有了我前面提到的关于MySQL组复制的所有强大功能,一些数据库管理员可能对尝试它非常感兴趣,但是他们可能会犹豫不决,因为他们将不得不购买5台机器并部署5台机器来利用拥有一个(5个成员(组的好处。 考虑到只为测试MySQL组复制而购买和配置5台机器所需的时间和金钱,尝试这一新功能的想法似乎没有那么吸引人。 另一方面,在甲骨文MySQL云服务中进行MySQL组复制,整个过程变得非常简单。 这些数据库管理员只需点击几个按钮,在甲骨文云中请求五个MySQL实例,服务就可以在几分钟内完成—比获得和配置五个物理服务器快得多! 在我看来,这个场景对许多甚至大多数客户来说都是完美的。

问:用户可以期待哪些未来的改进?

答:我们一直在努力使MySQL组复制和MySQL复制更容易使用,性能更高。 对于MySQL组复制,我们目前正在致力于两个方面的性能增强:第一是在启用MySQL组复制时,将性能开销或影响降至最低;另一个是进一步增加我们可以在一个小组中支持的成员数量。

问:你想和我们分享什么临别赠言吗?

答:MySQL群组复制是一项巨大的团队工作,很高兴看到它已经被客户使用,并听到他们的积极反馈。 很高兴能积极参与这款产品的创作。

谢谢你,努诺,分享你对MySQL组复制的见解! 要了解更多信息,请访问MySQL高可用性信息页面,获取演示文稿、文档和其他资源。