已經測試通過
文檔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; #查詢當前主庫用幾個備庫