已经测试通过
文档https://hub.docker.com/r/bitnami/postgresql
一 创建主节点
docker run --name postgresql-master -e POSTGRESQL_REPLICATION_MODE=master -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_DATABASE=my_database -e POSTGRESQL_REPLICATION_USER=my_repl_user -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password -p 8932:5432 bitnami/postgresql:latest
postgresql-master 容器名
POSTGRESQL_REPLICATION_MODE 表示是主节点
POSTGRESQL_USERNAME 数据库用户名
POSTGRESQL_PASSWORD 数据库密码
POSTGRESQL_DATABASE 数据库名
POSTGRESQL_REPLICATION_USER 用于主从复制的用户名
POSTGRESQL_REPLICATION_PASSWORD 用于主从复制的密码
-p 8932:5432 端口映射 因为我是在同一主机上的两个docker
bitnami/postgresql:latest 镜像
二 创建从节点
docker run --name postgresql-slave --link postgresql-master:master -e POSTGRESQL_REPLICATION_MODE=slave -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_MASTER_HOST=192.168.26.22 -e POSTGRESQL_MASTER_PORT_NUMBER=8932 -e POSTGRESQL_REPLICATION_USER=my_repl_user -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password bitnami/postgresql:latest
postgresql-slave 容器名
postgresql-master:master 链接到网络 直接用ip访问就不需要了
POSTGRESQL_REPLICATION_MODE 表示是从节点
POSTGRESQL_USERNAME 数据库用户名
POSTGRESQL_PASSWORD 数据库密码
POSTGRESQL_MASTER_HOST 主节点的ip地址
POSTGRESQL_MASTER_PORT_NUMBER 主节点的端口
POSTGRESQL_REPLICATION_USER 用于主从复制的用户名
POSTGRESQL_REPLICATION_PASSWORD 用于主从复制的密码
-p 8932:5432 端口映射 因为我是在同一主机上的两个docker
bitnami/postgresql:latest 镜像
另一个镜像使用方法 没试
参考 https://github.com/sameersbn/docker-postgresql
一 创建主节点
docker run --name postgresql-master -itd --restart always
--env DB_USER=dbuser --env DB_PASS=dbuserpass --env DB_NAME=dbname
--env REPLICATION_USER=repluser --env REPLICATION_PASS=repluserpass
sameersbn/postgresql:12-20200524
二 创建从节点
docker run --name postgresql-slave01 -itd --restart always --link postgresql-master:master
--env REPLICATION_MODE=slave --env REPLICATION_SSLMODE=prefer
--env REPLICATION_HOST=master --env REPLICATION_PORT=5432
--env REPLICATION_USER=repluser --env REPLICATION_PASS=repluserpass
sameersbn/postgresql:12-20200524
三 创建快照节点
docker run --name postgresql-snapshot -itd --restart always
--link postgresql-master:master
--env REPLICATION_MODE=snapshot --env REPLICATION_SSLMODE=prefer
--env REPLICATION_HOST=master --env REPLICATION_PORT=5432
--env REPLICATION_USER=repluser --env REPLICATION_PASS=repluserpass
sameersbn/postgresql:12-20200524
四 创建恢复备份
默认备份文件到/srv/docker/backups/postgresql.XXXXXXXXXXXX ,然后容器会关闭。如果需要恢复 ,重启容器就行了。
docker run --name postgresql-backup -it --rm
--link postgresql-master:master
--env REPLICATION_MODE=backup --env REPLICATION_SSLMODE=prefer
--env REPLICATION_HOST=master --env REPLICATION_PORT=5432
--env REPLICATION_USER=repluser --env REPLICATION_PASS=repluserpass
--volume /srv/docker/backups/postgresql.$(date +%Y%m%d%H%M%S):/var/lib/postgresql
sameersbn/postgresql:12-20200524
五 保存日志到文件
docker run --name postgresql -itd --restart always
sameersbn/postgresql:12-20200524 -c logging_collector=on
六管理工具
docker run -d -p 5433:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=test@123.com -e PGADMIN_DEFAULT_PASSWORD=123456 dpage/pgadmin4
#查看当前备库状态:
#t :true,意味着处于recovery状态
#f :false,意味着处于正常服务状态
select pg_is_in_recovery();
select * from pg_stat_replication; #查询当前主库用几个备库