什么是 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
重要的:
- 请使用您的应用程序镜像更新上述代码段中的 YOUR_APPLICATION_IMAGE 占位符
- 在您的应用程序