使用 bitnami/postgresql-repmgr 镜像快速设置 PostgreSQL HA

这篇博客介绍了如何利用 bitnami/postgresql-repmgr Docker 镜像快速设置 PostgreSQL 高可用(HA)集群。内容涵盖 PostgreSQL HA 的概念,获取镜像的方法,数据持久化,容器间的连接,配置过程,包括初始化实例、设置密码、创建集群,以及保护 PostgreSQL 流量和维护升级等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

image

什么是 PostgreSQL HA?

此 PostgreSQL 集群解决方案包括 PostgreSQL 复制管理器(replication manager),这是一种用于管理 PostgreSQL 集群上的复制(replication)和故障转移(failover)的开源工具。

获取此镜像

获取 Bitnami PostgreSQL HA Docker 镜像的推荐方法是从 Docker Hub Registry 中提取预构建的镜像。

$ docker pull bitnami/postgresql-repmgr:latest

要使用特定版本,您可以拉取版本化标签。 您可以在 Docker Hub Registry 中查看可用版本的列表

$ docker pull bitnami/postgresql-repmgr:[TAG]

如果您愿意,您也可以自己构建镜像。

$ docker build -t bitnami/postgresql-repmgr:latest 'https://github.com/bitnami/bitnami-docker-postgresql-repmgr.git#master:14/debian-10'

持久化您的应用程序

如果删除容器,所有数据都将丢失,下次运行镜像时,数据库将重新初始化。 为避免这种数据丢失,您应该挂载一个即使在容器被删除后仍将持续存在的卷。

对于持久性,您应该在 /bitnami/postgresql 路径上挂载一个目录。 如果挂载的目录是空的,它将在第一次运行时被初始化。

$ docker run \
    -v /path/to/postgresql-repmgr-persistence:/bitnami/postgresql \
    bitnami/postgresql-repmgr:latest

此存储库中的 docker-compose.yml 文件已经配置了持久性。

注意:由于这是一个非 root 容器,因此挂载的文件和目录必须具有 UID 1001 的适当权限。

连接到其他容器

使用 Docker 容器网络,您的应用程序容器可以轻松访问在容器内运行的 PostgreSQL 服务器,反之亦然。

连接到同一网络的容器可以使用容器名称作为主机名相互通信。

使用命令行

在此示例中,我们将创建一个 PostgreSQL 客户端实例,该实例将连接到与客户端在同一 docker 网络上运行的服务器实例。

Step 1: 创建 network
$ docker network create my-network --driver bridge
Step 2: 在您的 network 中启动 postgresql-repmgr 容器

使用 docker run 命令的 --network <NETWORK> 参数将容器附加到 my-network 网络。

$ docker run --detach --rm --name pg-0 \
  --network my-network \
  --env REPMGR_PARTNER_NODES=pg-0 \
  --env REPMGR_NODE_NAME=pg-0 \
  --env REPMGR_NODE_NETWORK_NAME=pg-0 \
  --env REPMGR_PRIMARY_HOST=pg-0 \
  --env REPMGR_PASSWORD=repmgrpass \
  --env POSTGRESQL_PASSWORD=secretpass \
  bitnami/postgresql-repmgr:latest
Step 3: 运行你的 PostgreSQL client 实例

最后,我们创建一个新的容器实例来启动 PostgreSQL client 并连接到上一步中创建的服务器:

$ docker run -it --rm \
  --network my-network \
  bitnami/postgresql:10 \
  psql -h pg-0 -U postgres

使用 Docker Compose

如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。 但是,我们将明确定义一个名为 my-network 的新 bridge 网络。 在此示例中,我们假设您希望从您自己的自定义应用程序镜像连接到 PostgreSQL 服务器,该镜像在以下代码段中由服务名称 myapp 标识。

version: '2'

networks:
  my-network:
    driver: bridge

services:
  pg-0:
    image: 'bitnami/postgresql-repmgr:latest'
    networks:
      - my-network
    environment:
      - POSTGRESQL_PASSWORD=custompassword
      - REPMGR_PASSWORD=repmgrpassword
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_NODE_NETWORK_NAME=pg-0
      - REPMGR_NODE_NAME=pg-0
      - REPMGR_PARTNER_NODES=pg-0
  myapp:
    image: 'YOUR_APPLICATION_IMAGE'
    networks:
      - my-network

重要的:

  1. 请使用您的应用程序镜像更新上述代码段中的 YOUR_APPLICATION_IMAGE 占位符
  2. 在您的应用程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值