代码示例:
要在Docker上部署PostgreSQL的主从复制,可以遵循以下步骤:
-
创建网络(如果需要跨容器通信):
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.12.1 mynet
-
运行主数据库容器:
docker run --name pg_master --restart=always \ --network=mynet --ip 172.18.12.100 \ -v /path/to/master/data:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD=yourpassword \ -p 5432:5432 \ -d postgres:tag
其中
/path/to/master/data
是宿主机上用于存储数据的目录,yourpassword
是数据库的密码,tag
是PostgreSQL镜像的标签。 -
配置主数据库:
- 进入容器:
docker exec -it pg_master bash
- 创建复制用户:
CREATE ROLE replica login replication encrypted password 'replicationpassword';
- 编辑
pg_hba.conf
文件,允许从数据库连接:host replication replica 172.18.12.101/32 trust
- 编辑
postgresql.conf
文件,设置主数据库的参数:listen_addresses = '*' wal_level = replica archive_mode = on archive_command = '/bin/date' max_wal_senders = 5 wal_keep_segments = 20
- 进入容器:
-
运行从数据库容器:
docker run --name pg_slave --restart=always \ --network=mynet --ip 172.18.12.101 \ -v /path/to/slave/data:/var/lib/postgresql/data \ -e POSTGRES_PASSWORD=yourpassword \ -p 5433:5432 \ -d postgres:tag
其中
/path/to/slave/data
是宿主机上用于存储从数据库数据的目录。 -
初始化从数据库:
- 进入从数据库容器:
docker exec -it pg_slave bash
- 删除现有的数据(如果有):
rm -rf /var/lib/postgresql/data/*
- 使用
pg_basebackup
从主数据库初始化数据:pg_basebackup -h 172.18.12.100 -U replica -D /var/lib/postgresql/data -X stream
- 进入从数据库容器:
-
配置从数据库:
- 创建
recovery.conf
文件:standby_mode = 'on' primary_conninfo = 'host=172.18.12.100 port=5432 user=replica password=replicationpassword' recovery_target_timeline = 'latest'
- 编辑
postgresql.conf
文件,设置从数据库的参数:wal_level = replica hot_standby = on
- 创建
-
重启从数据库容器:
docker restart pg_slave
-
验证主从复制状态:
- 进入主数据库容器:
docker exec -it pg_master psql -U postgres
- 查询复制状态:
SELECT * FROM pg_stat_replication;
- 进入主数据库容器:
以上步骤提供了一个基本的框架,具体参数和步骤可能需要根据实际情况进行调整。务必确保所有的路径、密码和IP地址都正确无误,并且符合你的网络配置。记得在生产环境中使用更安全的密码和配置。
喜欢本文,请点赞、收藏和关注!