Docker 部署 PostgreSQL 主从
以下是一个使用Docker部署PostgreSQL主从复制的简化示例。
首先,创建一个docker-compose.yml
文件来定义服务:
version: '3'
services:
master:
image: postgres:latest
environment:
POSTGRES_DB: master_db
POSTGRES_USER: master_user
POSTGRES_PASSWORD: master_password
ports:
- "5432:5432"
slave:
image: postgres:latest
environment:
POSTGRES_DB: slave_db
POSTGRES_USER: slave_user
POSTGRES_PASSWORD: slave_password
POSTGRES_REPLICA_MODE: 'on'
POSTGRES_REPLICA_ROLE: 'replica'
ports:
- "5433:5432"
depends_on:
- master
command: >
bash -c '
echo "host=master" >> /docker-entrypoint-initdb.d/replica.conf;
echo "username=master_user" >> /docker-entrypoint-initdb.d/replica.conf;
echo "password=master_password" >> /docker-entrypoint-initdb.d/replica.conf;
exec docker-entrypoint.sh postgres -c wal_level=logical -c max_wal_senders=2 -c max_replication_slots=2 -c max_connections=100;
'
在此配置中,您定义了两个服务:master
和 slave
。master
服务使用默认的PostgreSQL镜像,并暴露了5432端口。slave
服务也使用默认的PostgreSQL镜像,并暴露了5433端口,同时它设置了复制角色并依赖于master
服务。
通过command
部分,在slave
启动时,它会自动配置复制。
接下来,运行以下命令来启动服务:
docker-compose up -d
这将在后台启动PostgreSQL主从服务器。
注意:
- 在实际部署中,你需要确保
master_user
在master
数据库中有适当的复制权限。 - 环境变量中的密码应该是安全的,不应在配置中明文显示。
- 这个例子使用了Docker的默认网络,实际部署可能需要更复杂的网络配置。
- 确保你的数据库镜像和配置适合生产环境。
评论已关闭