我有一个本地的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
1条答案
按热度按时间zu0ti5jz1#
仅仅通过查看工件,似乎您需要两个持久性卷和声明:一个用于
main
,另一个用于standby
。您还应该在StatefulSet
中将副本设置为2
。最好使用像Kubegres这样具有完整生命周期管理的Postgres操作符。你甚至可以从中找出你的工件中缺少了什么,如果你不需要其他复杂的操作符,就创建普通的YAML工件。
注意
强烈建议使用Operator,因为它提供自动备份和故障转移支持。如果没有操作员,则需要手动执行这些操作。