Docker部署 PostgreSQL 12.4主从环境
以下是一个使用Docker部署PostgreSQL 12.4主从环境的示例。
首先,创建一个docker-compose.yml
文件,内容如下:
version: '3.7'
services:
master:
image: postgres:12.4
environment:
POSTGRES_DB: 'mydb'
POSTGRES_USER: 'myuser'
POSTGRES_PASSWORD: 'mypassword'
volumes:
- pgdata_master:/var/lib/postgresql/data
ports:
- "5432:5432"
slave:
image: postgres:12.4
environment:
POSTGRES_DB: 'mydb'
POSTGRES_USER: 'myuser'
POSTGRES_PASSWORD: 'mypassword'
POSTGRES_REPLICA_USER: 'replica'
POSTGRES_REPLICA_PASSWORD: 'replicapassword'
volumes:
- pgdata_slave:/var/lib/postgresql/data
ports:
- "5433:5432"
depends_on:
- master
volumes:
pgdata_master:
pgdata_slave:
然后,在该docker-compose.yml
文件所在目录下运行以下命令来启动服务:
docker-compose up -d
这将会启动一个PostgreSQL主实例(master)和一个PostgreSQL从实例(slave)。
接下来,您需要设置从实例以连接到主实例。这通常涉及到在从实例上执行基于语句的复制。您可以通过Docker执行进入PostgreSQL从实例的交互式shell来执行这些步骤:
docker-compose exec slave psql -U myuser -d mydb
然后在psql提示符下运行以下SQL命令:
ALTER ROLE replica WITH REPLICATION PASSWORD 'replicapassword';
CREATE PUBLICATION pub_mydb FOR ALL TABLES;
SELECT * FROM pg_publication;
然后,在主实例中,获取二进制文件的位置:
SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) FROM pg_stat_replication;
然后在从实例中运行:
STANDBY_MODE = 'on';
primary_conninfo = 'host=master port=5432 user=myuser password=mypassword';
trigger_file = '/tmp/trigger_file';
确保将host=master
替换为Docker网络中主实例的主机名或IP地址。
这样,您就设置了一个基本的PostgreSQL 12.4主从环境。根据实际情况,您可能需要进一步配置复制权限、SSL、连接池等。
评论已关闭