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

上一篇博客中,我们了解了如何创建有状态集 MariaDB 应用程序。此外,我们在这篇博客中了解了 MariaDB 中的复制工作原理。现在,我们将尝试创建一个已复制的有状态集应用程序。这篇博客的良好参考来源是Kubernetes 文档以及来自阿里云的一个示例,在此表示感谢。

配置复制

为了复制 MariaDB 应用程序,我们将创建一个有状态集,它将包含一个单独的初始化容器和一个应用程序容器。

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

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

我们的下载页面已经自动为您推荐了其中一个镜像来下载我们的二进制文件。仓库配置工具也一样;请参阅 https://mariadb.org.cn/download

这篇博客文章旨在向您介绍我们自 2021 年 12 月以来一直在测试的一个新系统,我们相信它现在已准备好面向公众采用。

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

是的,我们正在招聘! 

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

一份有挑战性的工作

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

一个复杂的代码库

现有代码库要求很高。取决于您如何看待它,如果您非常了解它,它会非常高效;如果您不了解,它会有很多依赖项。

使用容器进行 MariaDB 复制

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

致敬 CONNECT 引擎的 Olivier Bertrand

请与 MariaDB 基金会一起,向 CONNECT 存储引擎的开发者 Olivier Bertrand 提供一些经济上的认可!我们将在为 Olivier Bertrand 终身 MariaDB 贡献奖已拨付的 5000 欧元基础上,额外匹配您的捐款,总额最高 5000 欧元。

什么是 CONNECT?

Olivier Bertrand 是一位无名英雄。他是 CONNECT 存储引擎的最初贡献者,至今仍是其主要开发者。正如其描述性名称所示,CONNECT 存储引擎使 MariaDB Server 用户能够连接到除 MariaDB Server 本身之外的各种数据库。

MariaDB Server 文档(PDF 版)

MariaDB Server 文档现已发布为单个 PDF 文件,可离线浏览。下载这超过 3000 页的文档,一睹为快吧!

迟到总比不到好

有些事情需要很长时间!2014 年,Jira 上有一个请求,要求将 MariaDB Server 知识库以一个 PDF 文件形式提供。那已经是七年多前的事了。MDEV-6881,您从编号就可以看出来——我们现在已经远超 MDEV-28000 了。

这个请求一直在我们脑海中。现在促成此事的原因是,我们试着用 Python 进行了一些尝试,发现将一种格式转换为另一种格式(包括 PDF)相对容易。

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

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

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

MariaDB 与 K8s:使用持久卷部署 MariaDB 和 WordPress

在上一篇博客MariaDB 与 K8s:创建一个 Secret 并在 MariaDB 部署中使用它中,我们使用了 Secrets 资源来隐藏机密的 root 用户数据;在该系列之前的博客MariaDB 与 K8s:容器/Deployment 之间的通信中,我们在一个 Pod 中创建了两个容器(即 MariaDB 和 phpmyadmin)。那种部署方式没有任何持久卷。

在这篇博客中,我们将为 MariaDB 和 WordPress 应用程序分别创建独立的 Deployment,并为两者创建一个 Service 以便它们能够相互连接。此外,我们还将在 MariaDB Deployment 的 Pod 中创建 Volume。