使用Docker搭建PostgreSQL主从复制
PostgreSQL是一款功能强大的开源关系数据库管理系统,其主从复制特性使得数据的冗余与备份变得简单。在这篇文章中,我们将使用Docker搭建一个基于PostgreSQL的主从复制环境,并提供相应的代码示例。
什么是主从复制?
在数据库的主从复制架构中,主服务器负责处理所有的写请求,并将这些请求的变更同步到一个或多个从服务器。从服务器则用于读取请求,提供负载均衡,同时也作为数据备份的一种方式。
环境准备
首先,确保你的机器上已经安装了Docker。我们将创建以下两个服务:一个主服务器(Master)和一个从服务器(Replica)。
创建Docker网络
为了让主从服务器互相通信,我们需要创建一个Docker网络:
docker network create pg-network
启动主服务器
接下来,我们将启动PostgreSQL的主服务器。可以使用以下命令:
docker run -d \
--name pg-master \
--network pg-network \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
postgres
在这个命令中,我们设置了PostgreSQL的用户名、密码以及数据库名。
启动从服务器
然后,我们需要启动一个从服务器。以下命令用于启动从服务器:
docker run -d \
--name pg-replica \
--network pg-network \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-p 5433:5432 \
postgres
配置主从复制
在主服务器上配置
连接到主服务器容器并修改postgresql.conf
文件:
docker exec -it pg-master bash
在容器中,我们需要设置以下参数:
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 pg-replica md5" >> /var/lib/postgresql/data/pg_hba.conf
重启主服务器使配置生效:
pg_ctl reload
在从服务器上配置
连接到从服务器:
docker exec -it pg-replica bash
在容器内,使用以下命令创建一个recovery.conf
文件:
echo "standby_mode = 'on'" > /var/lib/postgresql/data/recovery.conf
echo "primary_conninfo = 'host=pg-master port=5432 user=postgres password=mysecretpassword'" >> /var/lib/postgresql/data/recovery.conf
echo "trigger_file = '/tmp/postgresql.trigger'" >> /var/lib/postgresql/data/recovery.conf
重启从服务器容器即可:
pg_ctl reload
验证主从复制
在主服务器上创建一张表:
CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(50));
然后在从服务器上执行以下命令,确认数据已复制:
SELECT * FROM test_table;
类图
以下是PostgreSQL主从复制的类图示例:
classDiagram
class Master {
+start()
+createDatabase()
+acceptConnections()
}
class Replica {
+start()
+connectToMaster()
+syncData()
}
Master <|-- Replica : replicates
总结
通过上述步骤,我们成功地利用Docker搭建了PostgreSQL的主从复制环境。主服务器负责数据的写入,而从服务器则负责数据的读取和备份。这样的架构,不仅提升了系统的可用性,还增强了数据的安全性。希望这篇文章能够帮助你更好地理解和搭建PostgreSQL的主从复制!