我有本地的Kubernetes集群,我想在其中部署主从postgres实例,并在它们之间设置流复制.我遵循了下面的Postgres文档来实现这一点:

https://www.postgresql.org/docs/16/warm-standby.html#STREAMING-REPLICATION. https://www.postgresql.org/docs/16/runtime-config-replication.html.

当前情况如下,从postgres实例写入以下错误:database system identifier differs between the primary and standby.我计算出,为了解决这个问题,从postgres实例需要首先使用pg_basebackup从主实例复制数据文件夹.我也这样做了,目前我在我的从实例上的以下文件夹/var/lib/postgresql/main中有该副本.但是,我不理解应该如何更改放置在/var/lib/postgresql/data中的当前数据文件夹,以及当前由postgres从postgres实例使用的文件夹.请建议一下如何处理这件事.理想情况下,最好将这个新复制的文件夹放在中央位置,并在所有Postgres实例中重复使用它

UPDATE:个 我还try 设置持久化卷并在状态集中使用它,如下所示,但在这种情况下,容器不起作用:

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

和庄严的设置:

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

推荐答案

单从您的构件来看,您似乎需要两个持久化卷和声明:一个用于main,另一个用于standby.您还应该将StatefulSet中的副本设置为2.

最好使用具有完整生命周期管理的Postgres运算符(如Kubegres).如果不需要其他复杂的运算符,您甚至可以从中找出您的构件中缺少了什么,并只创建普通的YAML构件.

强烈建议使用操作员,因为它提供自动备份和故障转移支持.如果没有操作员,您将需要手动执行它们.

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

PostgreSQL pg_dump 创建 sql 脚本,但它不是 sql 脚本:有没有办法让 pg_dump 创建标准的 sql 脚本?

Nodemon - 安装期间clean exit - waiting for changes before restart

如何从元组列表中 Select 与多列匹配的行?

表或列名不能以数字开头?

Nodejs应用程序的node-postgres vs pg-promise

PostgreSQL 在 mySQL 中的 date_trunc

MAC OS X 上的 Postgres 权限被拒绝

如何在 PostgreSQL 中创建 guid

Postgres 默认按 id 排序 - worldship

在 PostgreSQL 中显示正在运行的查询的全文

在 Windows 10 中执行时,Docker 容器关闭并给出data directory has wrong ownership错误

如何判断 PostgreSQL 事务中的待处理操作

Postgres Npgsql 连接池

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

在 postgresql 中获取上个月的数据

在 postgres 中导出为 CSV 并使用 GZIP 压缩

用于将布尔列排序为 true、null、false 的 SQL

GRANT SELECT 特权使用一个语句对所有序列

Ruby 中 DateTime 的毫秒分辨率