使用Docker部署PostgreSQL主从复制

在现代数据库环境中,数据的可用性和可靠性至关重要。PostgreSQL(简称Pgsql)是一个功能强大和开源的关系数据库管理系统,支持主从复制功能。这项功能可以帮助我们实现数据的高可用性,通过将数据从主数据库实时同步到一个或多个从数据库,来保证数据的备份和负载均衡。本文将介绍如何通过Docker来部署PostgreSQL的主从复制,并展示相关的代码示例。

PostgreSQL主从复制的概念

在PostgreSQL中,主从复制是通过将数据从主数据库(Primary)复制到从数据库(Replica)实现的。从数据库会监听主数据库的变更,并在发生任何变更时进行同步。这样,当主数据库出现故障时,从数据库可以作为备用数据库迅速接管,保证数据的可用性。

Docker环境准备

首先,为了在Docker中部署PostgreSQL主从复制,我们需要准备Docker环境。如果你还没有安装Docker,请先去[Docker官方网站](

创建Docker网络

为了让主从数据库能够相互访问,我们需要创建一个Docker网络:

docker network create pg-network

接下来,我们将分别部署主数据库和从数据库。

部署主数据库

我们可以使用以下命令部署PostgreSQL主数据库,记得替换为你自己的数据库密码:

docker run --name pg-primary \
  --network=pg-network \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=yourpassword \
  -e POSTGRES_DB=mydb \
  -p 5432:5432 \
  -d postgres:latest

配置主数据库

步骤 1:修改PostgreSQL配置

为了启用复制功能,我们需要在主数据库中进行一些配置。进入主数据库容器:

docker exec -it pg-primary bash

然后编辑PostgreSQL配置文件 postgresql.conf(通常在 /var/lib/postgresql/data/ 下):

echo "wal_level = replica" >> /var/lib/postgresql/data/postgresql.conf
echo "max_wal_senders = 3" >> /var/lib/postgresql/data/postgresql.conf
echo "wal_keep_segments = 64" >> /var/lib/postgresql/data/postgresql.conf

接下来,编辑 pg_hba.conf 文件(在同一目录下)以允许从服务器连接:

echo "host replication all 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf
步骤 2:重启数据库

保存更改并退出容器,然后重启主数据库:

docker restart pg-primary

部署从数据库

使用以下命令来创建从数据库实例:

docker run --name pg-replica \
  --network=pg-network \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=yourpassword \
  -e POSTGRES_DB=mydb \
  -d postgres:latest

配置从数据库

进入从数据库容器并进行配置:

docker exec -it pg-replica bash

创建一个复制槽,使用以下命令:

pg_basebackup -h pg-primary -D /var/lib/postgresql/data -U admin -P --wal-method=stream

postgresql.conf 文件中,添加以下行以设置从数据库:

echo "hot_standby = on" >> /var/lib/postgresql/data/postgresql.conf

添加主数据库连接信息到 recovery.conf 文件:

echo "standby_mode = on" > /var/lib/postgresql/data/recovery.conf
echo "primary_conninfo = 'host=pg-primary port=5432 user=admin password=yourpassword'" >> /var/lib/postgresql/data/recovery.conf
重启从数据库

保存更改并退出容器,重启从数据库:

docker restart pg-replica

验证配置

使用以下命令连接到主数据库并查看活动的从数据库:

docker exec -it pg-primary psql -U admin -d mydb -c "SELECT * FROM pg_stat_replication;"

如果一切正常,你应该可以看到从数据库的状态。

流程示意图

下面是描述主从数据同步过程的饼状图:

pie
    title 数据同步过程
    "主数据库" : 50
    "从数据库" : 50

数据库交互示意图

使用以下序列图来展示主从数据库间的互动:

sequenceDiagram
    participant Primary as 主数据库
    participant Replica as 从数据库
    Primary->>Replica: 数据变更
    Replica-->>Primary: 确认接收
    Primary->>Primary: 日志写入
    Replica-->>Replica: 更新数据

结尾

通过以上步骤,你成功地在Docker中部署了PostgreSQL主从复制,并配置了主数据库与从数据库的交互。这种架构提供了高可用性和数据备份,可以有效防止数据丢失。使用Docker的方式部署数据库,既简洁又高效,是当前流行的技术方案。希望本文对你了解和使用PostgreSQL主从复制有所帮助!