首页 > 解决方案 > MariaDB 服务器与 MariaDB Galera 集群 HA 复制

问题描述

我打算在我的 kubernetes 集群上部署 HA 数据库集群。我是数据库新手,对各种数据库术语感到困惑。我决定使用 MariaDB,我找到了两个图表,MariaDBMariaDB Galera Cluster

我知道两者都可以实现相同的目标,但是两者之间的主要区别是什么?在什么情况下我应该使用或者?

提前致谢!

标签: kubernetesmariadbkubernetes-helmhigh-availabilitybitnami

解决方案


我不是专家,所以请谨慎对待我的解释(并仔细检查)

MariaDB 的 Chart 和 MariaDB Galera Cluster 的 Chart 的主要区别在于第一个将部署标准的主从(或主从)数据库,而第二个是弹性主主(或主-主)数据库簇。

更详细的含义如下:

MariaDB Chart将部署一个 Master StatefulSet和一个 Slave StatefulSet,它们将生成(使用默认值)一个主 Pod 和 2 个从 Pod。一旦您的数据库启动并运行,您就可以连接到主服务器并写入或读取数据,然后将这些数据复制到从服务器上,以便您拥有可用数据的安全副本。

副本可用于读取数据,但只有主 Pod 才能在数据库中写入新数据。如果 Pod 崩溃.. 或运行 Pod 的 Kubernetes 集群节点出现故障,您将无法写入新数据,直到 master 的 Pod 再次启动并运行(这可能需要手动干预).. 或者如果您执行故障转移,将其他 Pod 提升为新的临时主节点(这也需要手动干预或使用代理或虚拟 ips 等进行一些设置)。

相反,Galera Cluster Chart将部署更具弹性的东西。使用默认值,它将创建一个带有 3 个 Pod 的StatefulSet。每个 Pod 都可以读取和写入数据,几乎充当主节点。

这意味着,如果其中一个 Pod 因某种原因停止工作,另外两个将继续为数据库提供服务,就好像什么都没发生一样,从而使整个事情变得更有弹性。当 Pod(停止工作)重新启动并运行时,它将从其他 Pod 获取新的/不同的数据,并保持同步。

为了换取整个基础设施的弹性(如果 Galera Cluster 解决方案能够提供极好的弹性而没有缺点,那就太容易了),多主应用程序有一些缺点,更常见的是在操作,需要保持一切同步和一致......并增加了复杂性,这通常可能会带来头痛。

Galera Cluster 还有其他一些限制,例如表的显式 LOCKS 不起作用或所有表都必须声明主键。您可以在此处找到完整列表 ( https://mariadb.com/kb/en/mariadb-galera-cluster-known-limitations/ )

在两种解决方案之间做出决定主要取决于以下问题:

  • 如果您的 Kubernetes 集群节点之一发生故障,您是否有必要让数据库继续工作(并且可供您的应用程序使用),就像什么都没发生一样,即使它的一个 Pod 正在该特定节点上运行?

推荐阅读