postgresql - 如何将 Postgres DB 从一个 Kubernetes 集群移动到另一个

标签 postgresql kubernetes google-kubernetes-engine kubernetes-helm kubernetes-statefulset

我有一个大型 (300Gb) Postgres 数据库在 GKE 集群(状态集、SSD 卷)上运行。我需要将此数据库移动到另一个 GKE 集群。

完成它的最简单方法是什么?

我尝试使用管道 pg_dump/pg_restore 来完成它,但它需要很长时间,而且由于某种原因,并不是所有的约束/触发器都被重新创建。

是否有任何适当的方法可以优雅地“关闭”在 Kubernetes 中运行的 Postgres 服务器并直接复制 /pgdata 文件夹(从一个卷到另一个卷)?

其他想法? 发送

最佳答案

关于如何解决这个问题,我几乎没有什么想法(从最可能到最不可能列出):

  1. 记住在使用pg_dump 时使用正确的格式。默认纯格式可能无法与 pg_restore 一起正常工作。尝试使用 pg_dump 指定不同的格式或使用 psql -f xxx.tar 而不是 pg_restore。请记住,这可能需要一段时间。

  2. 您可以使用一种工具来协助您。例如pghoard .

  3. 您可以对您的数据库进行去皮备份,并尝试通过 Google Cloud Storage 作为对象进行复制。

  4. 您可以尝试手动创建 PVC,将 pod 附加到这些 PVC,然后将您的数据集复制到这些 pod 上。

  5. 最后,您可以尝试创建一个 Init 容器,稍后将其用于您的新集群。

我建议从第 1 点开始,因为我认为这是最可能的解决方案。如果这还不够,请尝试列表中后面的点。

如果有帮助,请告诉我。

关于postgresql - 如何将 Postgres DB 从一个 Kubernetes 集群移动到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56614100/

相关文章:

c# - 如何在c#中使用kubernetes-client创建k8s部署?

node.js - Kubernetes 通过基于时间的触发器扩展 pod

nginx - 暴露内部私有(private)集群 nginx 入口

docker - 如何在 Kubernetes 中模拟 '--volumes-from'

sql - 涉及三个不同表的 SELECT 语句

kubernetes - 指向文件的环境变量的Configmap

sql - 计算表中重复行的总数

go - 无法通过 kubectl logs 命令检索 go 客户端中的 POD 日志

sql - 如何多重拆分字符串(WHERE IN 查询)

postgresql - Postgres 的列名或表名什么时候需要引号,什么时候不需要?