如何使用dockerized PostgreSQL的repmgr?

我正在尝试使用复制和自动故障转移来创buildPostgresql安装程序。 我希望它是可重用,可扩展和可移植的,所以我试图使用docker来运行Postgres。 我也不想重新发明轮子,所以我试图使用repmgr,因为它是设置postgres复制时推荐的工具。

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

然后在第二台机器上,我尝试运行待机。 我开始在docker工作postgres和实验。 正如我们可以在repmgr github repo上阅读的那样 ,为了运行standby,我需要使用内部使用pg_basebackup的repmgr命令克隆master。 Pg_basebackup不会让我把数据库克隆到非空目录(pgdata),所以我需要在克隆之前删除由dockerized postgres创build的pgdata。 当我这样做时,容器就死了,因为当然唯一的服务,postgres,没有文件死亡。 所以我不能运行repmgr命令,因为没有容器来运行它:)

所以我试着创build另一个Dockerfile只有standbies。 内部pgdata被删除,然后repmgr克隆主,然后postgres正常启动。 没有错误。 但是,当我login到主机,并validation复制是否正在运行 – 它不是。

  1. 是否有可能为dockerized postgres运行repmgr?
  2. 如果是这样,怎么样? 我究竟做错了什么?
  3. 如果没有,我怎样才能创buildpostgres集群复制,而无需手动configuration每个服务器? 你知道,不把服务器当宠物,而是当作牛等:)

我使用和创build的文件: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"] 

Bash脚本运行时,postgres容器(主)是活着的:

 #!/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构成是相同的。 备用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集群,否则您可以探索该项目并了解事情是如何工作的。

祝你好运。

Interesting Posts