使用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主从复制有所帮助!