gpt4 book ai didi

postgresql - 如何将 repmgr 与 dockerized Postgresql 一起使用?

转载 作者:行者123 更新时间:2023-11-29 13:47:30 25 4
gpt4 key购买 nike

我正在尝试创建具有复制和自动故障转移功能的 Postgresql 设置。我希望它是可重用的、可扩展的和可移植的,所以我尝试使用 docker 来运行 Postgres。我也不想重新发明轮子,所以我尝试使用 repmgr 作为设置 postgres 复制时推荐的工具。

在第一台机器上,我使用 docker-compose 和简单的 Dockerfile 启动了主节点。然后我添加了 bash 脚本以在容器启动后运行。看起来 master 设置正确。

然后在第二台机器上我尝试运行待机状态。我在 docker 中启动了 postgres 并进行了试验。正如我们在 repmgr github repo 上看到的那样,要运行备用,我需要使用 repmgr 命令克隆 master,该命令在内部使用 pg_basebackup。 Pg_basebackup 不会让我将 db 克隆到非空目录 (pgdata),因此我需要在克隆之前删除由 dockerized postgres 创建的 pgdata。当我这样做时,容器会死掉,因为唯一的服务 postgres 当然会在没有其文件的情况下死掉。所以之后我不能运行 repmgr 命令,因为里面没有运行它的容器:)

所以我尝试创建另一个 Dockerfile 仅供备用。里面的 pgdata 被删除,然后 repmgr 克隆 master,然后 postgres 正常启动。没有错误。但是当我登录到主机并验证复制是否正在运行时 - 它没有。

  1. 是否可以为 dockerized postgres 运行 repmgr?
  2. 如果是,怎么做?我做错了什么?
  3. 如果没有,我如何在不手动配置每个服务器的情况下创建 postgres 集群复制?你知道,不是把服务器当作宠物,而是当作牛等 :)

我使用和创建的文件:docker-compose.yml(主备节点):

version: '3'
services:
db:
build:
context: .
volumes:
- ${DATABASE_STORAGE_PATH}:/var/lib/postgresql/data
env_file:
- .env
environment:
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- ${DB_PORT}:5432

主 Dockerfile:

FROM postgres:9.6.4

# install repmgr
RUN apt-get update \
&& apt-get install -y repmgr
# COPY conf files
COPY repmgr.conf .
COPY postgres.replication.conf /var/lib/postgresql/data/pgdata/
RUN echo "include '/var/lib/postgresql/data/pgdata/postgres.replication.conf'" >> /var/lib/postgresql/data/pgdata/postgresql.conf

CMD ["postgres"]

当 postgres 容器(主)处于事件状态时运行的 Bash 脚本:

#!/bin/bash
CONTAINER_ID="replicatest2_db_1"

docker exec -d $CONTAINER_ID createuser -s repmgr -U postgres
docker exec -d $CONTAINER_ID createdb repmgr -O repmgr -U postgres
docker exec -d $CONTAINER_ID su postgres -c 'repmgr -f repmgr.conf master register'

备用docker-compose也是一样。备用 Dockerfile:

FROM postgres:9.6.4

# install repmgr
RUN apt-get update \
&& apt-get install -y repmgr
# COPY repmgr conf
COPY repmgr.conf .

RUN rm -rf /var/lib/postgresql/data/pgdata
RUN su postgres -c "repmgr -h {master-host} -p {master-port} -U repmgr -d repmgr -D /var/lib/postgresql/data/pgdata -f repmgr.conf standby clone"

CMD ["postgres"]

最佳答案

您可以使用 pg-dock ,通过 pg-dock,您可以使用 repmgr 运行 dockerized postgres 集群,否则您可以探索该项目并了解其工作原理。

祝你好运。

关于postgresql - 如何将 repmgr 与 dockerized Postgresql 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com