在你开发你的应用程序之前,建立一个计划是一个最佳做法。从定义主要业务目标开始,收集需求,评估潜在的技术堆栈,并了解整合。在这个过程结束时,你应该有一个应用程序参考架构的大纲,作为实现基础设施组件的蓝图,并定义数据如何在这些组件之间流动。
在这个例子中,我们将回顾一个使用Galera for MySQL和MariaDB的数据库设计。数据库是许多应用程序的关键任务组件。这种宝贵的资产依赖于冗余来保持你的工作负载。单点故障会对业务运营、正常运行时间协议和整体用户体验产生负面影响。
使用参考架构作为指导,你可以建立有弹性的数据库和应用程序部署,随着你的业务增长而横向扩展(不停机)。
什么是参考架构?
参考架构是可重复使用的技术图表,其中包含了实施解决方案的通用设计原则和行业最佳实践。一个高度抽象的云计算参考架构描绘了各种计算实例、负载均衡器、存储、软件定义网络等之间的连接--你的数据库的价值使其成为这里的重点领域。
数据库和参考架构
主要目标是增加冗余度,防止数据库成为单点故障。根据应用和工作负载的限制,有不同的方法来实现这一目标。例如,一个应用程序可能通过在主-次复制模型中拆分读和写来获得更好的性能。如果需要扩大写操作的规模,则需要采用多主的策略。
其他考虑因素包括数据量、ACID兼容性、故障切换/选择过程(手动或自动)、预期的客户连接数以及所选择的数据库技术。这些考虑因素将形成数据库解决方案,并形成这些部分如何在你的参考架构中一起工作的大画面。
何时使用加莱拉
Galera是一个免费和开源的高可用性数据库解决方案,管理简单,不依赖单一的云供应商。如果你的数据库技术是MySQL,或其分叉之一,如MariaDB或Percona,我们强烈推荐Galera作为一个持久和可移植的解决方案。
加莱拉集群的优势
- 节点故障- 在节点故障的情况下,通过调用一个加权的法定人数来选举一个主要的组件,防止大脑分裂的情况。
- 多主体、主动-主动集群- 对集群中的任何节点进行读写。
- 数据一致性- 使用基于认证的同步复制来保证ACID的合规性。
- 自动节点供应--当故障节点恢复时,或当新节点加入集群时,它们会使用状态快照传输(SST)或增量状态传输(IST)自动与主组件的状态保持同步。
加莱拉集群的局限性
- 不支持MyISAM- 只支持InnoDB引擎。对其他表类型的写入,包括系统表,是不被复制的。
- 表的格式化-- 没有主键的表不能被删除或正确复制。
- 逻辑考虑-- 应用逻辑可能需要重写以避免使用显式表锁。
- 写入可扩展性-- 所有节点都必须在提交前证明它们可以写入,因此写入性能随着集群的增长而下降。我们建议将集群的规模保持在三个节点,足以拥有法定人数和最佳写入性能。
消除单点故障
让我们以传统的LEMP堆栈为例,应用软件和数据库已经被分离到不同的计算实例中,为将来的扩展做准备。这种设置可能看起来像这样:
关注点的分离是一种最佳做法,当然也有助于支持可扩展性;但缺乏冗余使数据库和应用服务器都成为单点故障。我们可以在这个结构上进行改进,以消除这些单点故障,建立整体的参考架构。
使用VLAN 和云防火墙进行简单的 Galera 群集设置
Galera 集群将数据库层增加到三个节点,并在它们之间进行同步复制。我们可以使用 LinodeVLAN 将复制流量与公共网络和共享专用网络隔离开来,并使用Cloud Firewall 限制来自VLAN 外部的访问。Galera 节点共享一个浮动 IP 地址,这样如果其中一个节点出现故障,另一个节点就能接手向不知情的应用服务器提供请求服务。
数据库层现在是高度可用的。接下来要关注的是解决应用服务器的问题。这个过程对于以下情况来说是很简单的 无状态的应用来说是很简单的,但是对于那些有状态的应用来说,需要额外考虑的是 有状态.根据状态的维护方式,你可能需要重构代码和/或用Unison或Gluster等工具实现文件复制。在这个例子中,假设除了临时会话文件,应用程序的状态是由数据库维护的。
负载平衡和应用复制
负载平衡为应用程序提供了高可用性和横向可扩展性,但单个负载平衡器实例也会产生单点故障。冗余仍然是这一实施方案的关键组成部分。LinodeNodeBalancers 提供了高可用性的开箱即用解决方案,可促进会话粘性、健康监控以及将客户端请求分发到一组后端应用节点。
如果一个应用服务器发生故障,NodeBalancer将开始只引导流量到健康节点。一旦不健康的节点恢复,它将像以前一样恢复平衡连接。这使得添加、删除或更新应用服务器变得很容易,而且由于Galera提供的主动-主动解决方案,任何应用节点都可以读/写任何数据库节点。
Linode的解决方案工程团队分享框架、指南和工具,比如这个框架、指南和工具,以便在开发应用程序时牢记最佳实践。阅读更多关于Galera集群所提供的高可用性优势。如果你已经准备好在Linode上开始构建,请查看我们的指南,用Galeria、Debian 和Ubuntu 设置MariaDB集群。
注释