MariaDB 与 K8s:如何在 K8s 中复制 MariaDB

上一篇博客中,我们了解了如何创建有状态集 MariaDB 应用。此外,我们还在本篇博客中了解了 MariaDB 中的复制工作原理。现在,我们将尝试创建一个复制的有状态集应用。本文的良好参考资料包括 Kubernetes 文档以及来自阿里云的示例。

配置复制

要复制 MariaDB 应用,我们将创建一个有状态集,它将由一个 init 容器和一个应用容器组成。

一个镜像管理器系统,用于简化 MariaDB 二进制文件和软件包的分发

MariaDB 基金会依靠公共镜像向全球分发二进制文件和软件包。完整的列表可以在 https://mirmon.mariadb.org 查看。如果您想自愿成为镜像提供者,请查看 https://mariadb.com/kb/en/mirror-sites-for-mariadb/

我们的下载页面会为您自动推荐一个镜像来下载我们的二进制文件。存储库配置工具也是如此;请参见 https://mariadb.org.cn/download

这篇博文的目的是向您介绍一个我们自 2021 年 12 月以来一直在测试的新系统,我们认为它现在已准备好供公众采用。

疫情期间的一次员工会议

上一次 MariaDB 基金会员工见面是在两年多以前,即 2020 年 2 月的 FOSDEM 大会上。因此,毫不意外,我们 2022 年的首要目标之一就是举行一次面对面的员工会议。是时候润滑社交关系、在没有连接问题的情况下一起工作、并提醒自己在一个 Covid 不再是首要问题的世界里工作和生活是怎样的了。

换句话说:我们计划了一次后疫情时代的员工会议。

结果却大不相同。

选择场地

但让我们从头开始,从最初的兴奋开始。

我们正在招聘:高级 MariaDB 开发者 / 代码评审员

是的,我们正在招聘!

我们正在招聘一个非常有趣的职位:MariaDB Server 的高级开发者,主要任务是合并社区代码贡献。

一份要求很高的工作

这是一份要求很高的工作。MariaDB Server 的代码库庞大而复杂,成为一名优秀的 C / C++ 开发者只是能够为其做出贡献的起点。您还需要理解数据库以及现有的代码库架构。

一个要求很高的代码库

现有的代码库要求很高。根据你看待它的方式,它要么非常高效(如果你非常了解它),要么有很多依赖关系(如果你不了解)。

使用容器进行 MariaDB 复制

在本博客中,我们将演示如何使用二进制日志(一种创建二进制日志文件和包含数据库所有更改(包括数据和结构)记录的索引的方法),将一个运行在 Docker 容器中的 MariaDB 数据库(我们称其为主库)复制到一个或多个运行在 Docker 容器中的 MariaDB 服务器(我们称其为副本)。您可以在这里找到关于复制工作原理的概述,并可以在这里找到如何设置复制。一个示例可以在这个 GitHub 脚本中找到。

贡献,我们的生命线

贡献是 MariaDB 基金会的生命线。我们的三位一体包含核心价值观:采用(MariaDB Server)、开放性(MariaDB Server 代码库)和持续性(我们的运营和活动),所有这些都围绕着 MariaDB Server。我们依靠财务赞助商为我们的活动提供资金,但我们收到的代码贡献的财务价值远远超过总赞助支付。自 MariaDB Server 启动以来,每年都是如此。

认可代码贡献

MariaDB 基金会尚未充分认可我们的贡献价值这一事实。

中国对于 MariaDB Server 具有巨大潜力

我们 2022 年 4 月的董事会会议选举了两名经验丰富的新投票董事会成员。其中一位是阿里巴巴云 RDS 开源数据库总监彭祥(Sean)。我很高兴与他进行了一次炉边谈话(Fireside Chat),我们对此进行了录制并发布到了 YouTube 上。请继续阅读他为 MariaDB 基金会在中国发展提出的建议。

一位拥有适合 MariaDB 基金会的简历的人

对于那些记不住、读不出或写不出他的中文本名彭祥的人来说,Sean 是他为自己起的称呼,他是 MariaDB 基金会宝贵的资源。

在 K8s 中创建有状态集 MariaDB 应用

上一篇博客中,我们创建了一个无状态应用,使用 K8s 资源 Deployment 进行部署。这允许复制应用,但在 Pod 重启时数据会丢失,意味着没有数据一致性。在同一篇博客中,我们使用了 PersistentVolumeClaim 进行 PersistentVolume 的动态供应。但我们使用了适用于无状态应用的 Deployment,对于每个副本都应有自己的持久卷的有状态集应用 (Statefulset) 来说,这种方式是*不推荐的*。实现这一点的正确方法是通过 Statefulset 资源,本文将对此进行介绍。

在 K8s 中,可以创建一个有状态应用,例如数据库,它需要将数据保存到持久磁盘存储中供服务器/客户端/其他应用使用,以跟踪其状态并能够在分布式系统中进行复制和使用。