docker 下postgresql12的集群搭建

已经测试通过

文档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; #查询当前主库用几个备库
posted @ 2021-01-28 17:58  过错  阅读(1744)  评论(0编辑  收藏  举报