跳到主要内容
博客数据库用于MySQL和MariaDB的Galera数据库参考架构

适用于 MySQL 和 MariaDB 的 Galera 数据库参考架构

用于MySQL的Galera数据库头像

在你开发你的应用程序之前,建立一个计划是一个最佳做法。从定义主要业务目标开始,收集需求,评估潜在的技术堆栈,并了解整合。在这个过程结束时,你应该有一个应用程序参考架构的大纲,作为实现基础设施组件的蓝图,并定义数据如何在这些组件之间流动。

在这个例子中,我们将回顾一个使用Galera for MySQL和MariaDB的数据库设计。数据库是许多应用程序的关键任务组件。这种宝贵的资产依赖于冗余来保持你的工作负载。单点故障会对业务运营、正常运行时间协议和整体用户体验产生负面影响。 

使用参考架构作为指导,你可以建立有弹性的数据库和应用程序部署,随着你的业务增长而横向扩展(不停机)。

什么是参考架构?

参考架构是可重复使用的技术图表,其中包含了实施解决方案的通用设计原则和行业最佳实践。一个高度抽象的云计算参考架构描绘了各种计算实例、负载均衡器、存储、软件定义网络等之间的连接--你的数据库的价值使其成为这里的重点领域。

数据库和参考架构

主要目标是增加冗余度,防止数据库成为单点故障。根据应用和工作负载的限制,有不同的方法来实现这一目标。例如,一个应用程序可能通过在主-次复制模型中拆分读和写来获得更好的性能。如果需要扩大写操作的规模,则需要采用多主的策略。

其他考虑因素包括数据量、ACID兼容性、故障切换/选择过程(手动或自动)、预期的客户连接数以及所选择的数据库技术。这些考虑因素将形成数据库解决方案,并形成这些部分如何在你的参考架构中一起工作的大画面。

何时使用加莱拉

Galera是一个免费和开源的高可用性数据库解决方案,管理简单,不依赖单一的云供应商。如果你的数据库技术是MySQL,或其分叉之一,如MariaDB或Percona,我们强烈推荐Galera作为一个持久和可移植的解决方案。

加莱拉集群的优势

  • 节点故障- 在节点故障的情况下,通过调用一个加权的法定人数来选举一个主要的组件,防止大脑分裂的情况。
  • 多主体、主动-主动集群- 对集群中的任何节点进行读写。
  • 数据一致性- 使用基于认证的同步复制来保证ACID的合规性。
  • 自动节点供应--当故障节点恢复时,或当新节点加入集群时,它们会使用状态快照传输(SST)或增量状态传输(IST)自动与主组件的状态保持同步。

加莱拉集群的局限性

  • 不支持MyISAM- 只支持InnoDB引擎。对其他表类型的写入,包括系统表,是不被复制的。
  • 表的格式化-- 没有主键的表不能被删除或正确复制。
  • 逻辑考虑-- 应用逻辑可能需要重写以避免使用显式表锁。
  • 写入可扩展性-- 所有节点都必须在提交前证明它们可以写入,因此写入性能随着集群的增长而下降。我们建议将集群的规模保持在三个节点,足以拥有法定人数和最佳写入性能。

消除单点故障

让我们以传统的LEMP堆栈为例,应用软件和数据库已经被分离到不同的计算实例中,为将来的扩展做准备。这种设置可能看起来像这样:

图示:一台应用服务器和MySQL数据库服务器使用一个VLAN安全连接。

关注点的分离是一种最佳做法,当然也有助于支持可扩展性;但缺乏冗余使数据库和应用服务器都成为单点故障。我们可以在这个结构上进行改进,以消除这些单点故障,建立整体的参考架构。

带有VLAN和云防火墙的简单Galera集群设置

一个Galera集群将数据库层增加到三个节点,在它们之间进行同步复制。我们可以使用Linode VLAN将复制流量与公共网络和共享私人网络隔离,并使用云防火墙限制VLAN之外的访问。Galera节点共享一个浮动的IP地址,这样,如果一个节点出现故障,另一个节点就能接手为不知情的应用服务器提供请求。

图示:一个应用服务器指向一个浮动IP,它连接到一个MySQL Galera数据库集群,为生产数据库提供同步复制。所有组件都包含在一个VLAN中。

数据库层现在是高度可用的。接下来要关注的是解决应用服务器的问题。这个过程对于以下情况来说是很简单的 无状态的应用来说是很简单的,但是对于那些有状态的应用来说,需要额外考虑的是 有状态.根据状态的维护方式,你可能需要重构代码和/或用UnisonGluster等工具实现文件复制。在这个例子中,假设除了临时会话文件,应用程序的状态是由数据库维护的。

负载平衡和应用复制

负载平衡给你的应用程序提供了高可用性和水平可扩展性,但单一的负载平衡器实例也创造了一个单点故障。冗余仍然是该实施方案的一个关键组成部分。Linode NodeBalancers提供了一个高可用的、开箱即用的解决方案,以促进会话粘性、健康监测以及将客户端请求分配给一组后端应用节点。

图示:一个负载均衡器在两个应用服务器之间分配流量,这两个服务器都连接到生产数据库的Galera集群。图中显示了三个复制。所有组件都包含在同一个VLAN中。

如果一个应用服务器发生故障,NodeBalancer将开始只引导流量到健康节点。一旦不健康的节点恢复,它将像以前一样恢复平衡连接。这使得添加、删除或更新应用服务器变得很容易,而且由于Galera提供的主动-主动解决方案,任何应用节点都可以读/写任何数据库节点。

Linode的解决方案工程团队分享框架、指南和工具,比如这个框架、指南和工具,以便在开发应用程序时牢记最佳实践。阅读更多关于Galera集群所提供的高可用性优势。如果你已经准备好在Linode上开始构建,请查看我们的指南,用Galeria、Debian 和Ubuntu 设置MariaDB集群。


注释

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*