无法在kubernetes中设置postgres复制

rekjcdws  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(78)

我有一个本地的kubernetes集群,我想在这里部署主示例和从示例,并在它们之间设置流式复制。我遵循下面的postgres文档来实现这一点:
https://www.postgresql.org/docs/16/warm-standby.html#STREAMING-REPLICATION www.example.com
当前状态如下,从postgres示例写入以下错误:database system identifier differs between the primary and standby .我发现为了解决这个问题,从postgres示例需要首先使用pg_basebackup从主示例复制数据文件夹。我也这样做了,现在我在下面的文件夹/var/lib/postgresql/main中的从属示例上有该副本。但是,我不明白我应该如何改变当前的数据文件夹,它被放置在/var/lib/postgresql/data中,并且当前被postgres从postgres示例使用。请建议如何处理这一点。理想情况下,最好将这个新的copper文件夹放在中心位置,并为所有postgres示例重用它

**UPDATE:**我也尝试过设置持久化卷,并在statefulset中使用它,如下所示,但在这种情况下容器不起作用:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-data-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /path/to/data/folder/on/my/host/machine

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

和statefulset:

apiVersion: v1
kind: StatefulSet

spec:
  containers:    
  - name: slave-postgres
    image: postgres:latest
    volumeMounts:
    - name: postgres-data
      mountPath: /var/lib/postgresql/data

  volumes:
  - name: postgres-data
    persistentVolumeClaim:
      claimName: postgres-data-pvc
zu0ti5jz

zu0ti5jz1#

仅仅通过查看工件,似乎您需要两个持久性卷和声明:一个用于main,另一个用于standby。您还应该在StatefulSet中将副本设置为2
最好使用像Kubegres这样具有完整生命周期管理的Postgres操作符。你甚至可以从中找出你的工件中缺少了什么,如果你不需要其他复杂的操作符,就创建普通的YAML工件。

注意

强烈建议使用Operator,因为它提供自动备份和故障转移支持。如果没有操作员,则需要手动执行这些操作。

相关问题