kubernetes - MariaDB 服务器与 MariaDB Galera 集群 HA 复制
问题描述
我打算在我的 kubernetes 集群上部署 HA 数据库集群。我是数据库新手,对各种数据库术语感到困惑。我决定使用 MariaDB,我找到了两个图表,MariaDB和MariaDB Galera Cluster。
我知道两者都可以实现相同的目标,但是两者之间的主要区别是什么?在什么情况下我应该使用或者?
提前致谢!
解决方案
我不是专家,所以请谨慎对待我的解释(并仔细检查)
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 正在该特定节点上运行?
推荐阅读
- r - 使用 stringdist 进行字符串匹配
- vb.net - VB中的交互式贝塞尔曲线
- python - 带有while循环的Recvall在python中的两个设备之间不起作用
- scrapy - 如何向 Scrapy spider 添加旋转代理?
- c# - 如何禁用 RadmulticolumnCombobox WPF 中的项目?
- asp.net-core - 在 Identity Server 4 中验证 JWT 不记名令牌
- python - 当我使用 pytorch 时,出现错误:"" IndexError: index 4 is out of bounds for axis 0 with size 4 ""
- amazon-web-services - AWS Neptune 连接失败 - 使用 CURL 命令从 S3 存储桶将数据加载到 Neptune 集群
- node.js - 使用简单的 Express 应用程序完成测试运行后,Jest 测试没有退出(一秒钟)
- tensorflow - 在 Yocto 中为 armv7ahf 交叉编译 Coqui + TFLite:共享对象中不允许 R_ARM_TLS_LE32 重定位