暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文]将 PostgreSQL 迁移到 Kubernetes

原创 Sergey Proni 2021-08-16
443

越来越多的公司正在采用 Kubernetes。对某些人来说,它是关于前沿的,对某些人来说,它是一个明确的战略和业务转型。世界各地的开发人员和运营团队都在努力移动对容器和 Kubernetes 不是云原生友好的应用程序。

迁移数据库始终是一个挑战,它会给企业带来风险和停机时间。今天,我将展示使用Percona Distribution for PostgreSQL Operator以最少的停机时间将 PostgreSQL 数据库迁移到 Kubernetes 是多么容易

目标

要执行迁移,我将使用以下设置:

将 PostgreSQL 迁移到 Kubernetes

  1. 部署在本地或云中某处的 PostgreSQL 数据库。它将是源头。
  2. Percona Operator 在其中部署和管理 PostgreSQL 集群(目标)和pgBackRest Pod 的Google Kubernetes Engine (GKE) 集群
  3. PostgreSQL 备份和预写日志上传到某个对象存储桶(在我的情况下为 GCS)
  4. pgBackRest Pod 从桶中读取数据
  5. pgBackRest Pod 持续将数据恢复到 Kubernetes 中的 PostgreSQL 集群

数据应持续同步。最后,我想关闭在本地运行的 PostgreSQL,只将集群保留在 GKE 中。

移民

先决条件

要复制设置,您将需要以下内容:

  • 在某处运行的 PostgreSQL(v 12 或 13)
  • 安装了 pgBackRest
  • Google Cloud Storage 或任何 S3 存储桶。我的例子将是关于 GCS 的。
  • Kubernetes集群

配置源

在一些 Linux 机器上运行了Percona Distribution for PostgreSQL版本 13。

1.配置pgBackrest

  • pg1-path 应该指向 PostgreSQL 数据目录
  • repo1-type 设置为 GCS 因为我们希望我们的备份去那里
  • 密钥在 /tmp/gcs.key 文件中。可以通过 Google Cloud UI 获取密钥。在此处阅读更多相关信息
  • 备份将存储在 sp-test-1 存储桶中的 on-prem-pg 文件夹中

2. 编辑 postgresql .conf 配置以通过 pgBackrest 启用存档

更改配置后需要重启。

3. 操作员需要在data目录下postgresql .conf文件。有一个空文件就足够了:

4. primaryuser 必须在来源创建,以确保复制由运营商设置正确。

配置目标

1. 在 Kubernetes 上部署 Percona Distribution for PostgreSQL Operator。此处的文档中阅读有关它的更多信息

2. 编辑主要的自定义资源清单——deploy/cr.yaml。

  • 我不会更改集群名称并将其保留为 cluster1
  • 集群将在待机模式下运行,这意味着它将同步来自 GCS 存储桶的数据。spec .standby设置 true
  • 配置 GCS 本身。 spec .backup部分看起来像这样( bucketrepoPath与上面的 pgBackrest 配置相同)
  • 我希望在我的 PostgreSQL 集群中至少有一个副本。设置 规范.pgReplicas .hotStandby .size 1。

3. 操作员应该能够通过 GCS 进行身份验证。要做到这一点,我们需要创建一个名为机密对象 < CLUSTERNAME > -靠背-回购-配置GCS -关键数据。它应该与我们在 Source 上使用的键相同。此处查看此秘密的示例

4. 通过创建 Secret 对象来创建用户: postgresprimaryuser(我们在 Source 上创建的那个)。此处查看用户 Secrets 的示例密码应与源上的相同

5. 现在让我们通过应用cr .yaml在 Kubernetes 上部署我们的集群

验证和故障排除

如果一切正常,您应该在主 Pod 日志中看到以下内容:

更改 Source 上的一些数据并确保它正确同步到 Target 集群。

常见问题

以下错误消息表明您忘记在数据目录中创建 postgresql .conf文件:

有时很容易忘记创建主 用户 并在日志中看到以下内容:

错误或丢失的对象存储凭据将触发以下错误:

切换

一切看起来都很好,是时候执行转换了。在这篇博文中,我只介绍了数据库方面,但不要忘记您的应用程序应该重新配置为指向正确的 PostgreSQL 集群。在切换之前停止应用程序可能是个好主意。

1. 停止源PostgreSQL集群,确保没有数据写入

2. 将目标集群提升为主集群。为此,请删除 spec .backup .repoPath deploy / cr .yaml 中将spec .standby更改 false ,然后应用更改:

PostgreSQL 将自动重新启动,您将在日志中看到以下内容:

结论

部署和管理数据库集群并非易事。最近发布的 Percona Distribution for PostgreSQL Operator 自动化了第 1 天和第 2 天的操作,并将在 Kubernetes 上运行 PostgreSQL 变成了一个顺利而愉快的旅程。

随着 Kubernetes 成为默认控制平面,开发人员和运维团队最常见的任务是执行迁移,这通常会变成一个复杂的项目。这篇博文表明,数据库迁移是一项简单的任务,停机时间最短。

我们鼓励您试用我们的运营商。请参阅我们的github 存储库并查看文档

发现错误或有功能想法?随意在JIRA 中提交

对于一般问题,请在社区论坛中提出主题

您是一名开发人员并希望做出贡献吗?请阅读我们的CONTRIBUTING.md并发送拉取请求。

Percona Distribution for PostgreSQL 在单个发行版中提供来自开源社区的最佳和最关键的企业组件,经过设计和测试可以协同工作。

立即下载 PostgreSQL 的 Percona 发行版!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论