在同一台服务器上使用Docker部署PostgreSQL主从复制
PostgreSQL是一个开源的关系数据库管理系统,因其强大的功能和灵活性广受欢迎。在许多应用场景中,设置数据库的主从复制是常见的需求。本文将介绍如何在同一台服务器上使用Docker快速部署PostgreSQL主从复制,并通过代码示例进行说明。
环境准备
首先,确保你的服务器上已安装Docker。可以通过以下命令验证Docker是否已安装:
docker --version
如果没有安装,可以参考Docker的[官方文档](
创建Docker网络
为了让主节点和从节点相互通信,我们需要先创建一个Docker网络:
docker network create pg-network
启动主节点
接下来,我们将创建并启动PostgreSQL主节点。使用以下命令启动主节点:
docker run -d \
--name pg-master \
--network pg-network \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=yourpassword \
-e POSTGRES_DB=mydatabase \
-p 5432:5432 \
postgres:latest
在上述命令中,我们设置了PostgreSQL的用户名、密码和数据库名称。主节点会监听5432端口。
配置主节点为准备从节点
在主节点上,我们需要启用 WAL 归档和复制配置。连接到主节点的容器,并编辑postgresql.conf
和pg_hba.conf
文件:
docker exec -it pg-master bash
然后编辑 postgresql.conf
:
echo "wal_level = replica" >> /var/lib/postgresql/data/postgresql.conf
echo "max_wal_senders = 3" >> /var/lib/postgresql/data/postgresql.conf
echo "wal_keep_size = 1024" >> /var/lib/postgresql/data/postgresql.conf
接着编辑 pg_hba.conf
:
echo "host replication postgres 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf
完成配置后,重启主节点:
docker restart pg-master
启动从节点
现在我们将创建并启动PostgreSQL的从节点。使用以下命令启动从节点:
docker run -d \
--name pg-slave \
--network pg-network \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=yourpassword \
-p 5433:5432 \
postgres:latest
连接到从节点的容器,并执行以下命令进行配置:
docker exec -it pg-slave bash
执行以下命令以设置主节点的信息:
echo "standby_mode = 'on'" >> /var/lib/postgresql/data/recovery.conf
echo "primary_conninfo = 'host=pg-master user=postgres password=yourpassword'" >> /var/lib/postgresql/data/recovery.conf
重启从节点:
docker restart pg-slave
验证主从复制
现在,我们可以使用以下命令验证主从节点的复制状态:
在主节点中,运行:
docker exec -it pg-master psql -U postgres -c "SELECT * FROM pg_stat_replication;"
在从节点中,运行:
docker exec -it pg-slave psql -U postgres -c "SELECT pg_is_in_recovery();"
如果一切配置正确,你将在主节点上看到从节点的状态,并在从节点上得到 true
的结果。
序列图
为了更直观地展示主从复制的流程,以下为序列图:
sequenceDiagram
participant M as 主节点
participant S as 从节点
M->>S: 发送WAL日志
S->>M: 请求WAL日志
M->>S: 返回WAL日志
S->>S: 应用WAL日志
结论
通过使用Docker,我们轻松地在同一台服务器上部署了PostgreSQL的主从复制。这种方法不仅便捷,也便于管理和维护。通过合理的配置,你可以在生产环境中高效地使用主从架构,以提升应用的可用性和性能。希望本文能够为你的PostgreSQL部署提供帮助。