1、准备环境
| IP地址 | 主机名 | 角色 |
|---|---|---|
| 10.16.12.115 | postgresql01 | 主库 |
| 10.16.12.116 | postgresql02 | 从库 |
3、拉取postgresql镜像
bash
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4
4、创建db网络
bash
docker network create --driver bridge dbnet
5、创建数据目录
bash
mkdir /data/postgresql/data -p
chmod -R 777 /data/postgresql/data
docker-compose.yml文件编写
主库文件:
bash
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
postgresql:
image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4
restart: always
container_name: postgresql01
environment:
POSTGRES_PASSWORD: admin@123
working_dir: /postgresql
networks:
- dbnet
ports:
- "5432:5432"
volumes:
- /data/postgresql/data:/var/lib/postgresql/data
networks:
dbnet:
external: true
EOF
从库文件:
bash
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
postgresql:
image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:16.4
restart: always
container_name: postgresql02
environment:
POSTGRES_PASSWORD: admin@123
working_dir: /postgresql
networks:
- dbnet
ports:
- "5432:5432"
volumes:
- /data/postgresql/data:/var/lib/postgresql/data
networks:
dbnet:
external: true
EOF
启动postgresql服务
bash
cd /data/postgresql
docker-compose up -d
docker-compose ps
部署主库
bash
docker exec -it postgresql01 /bin/bash
su - postgres
psql
CREATE ROLE replica login replication encrypted password 'replica@123';
bash
修改postgresql.conf
vi /data/postgresql/data/postgresql.conf
```bash
listen_addresses = '*'
archive_mode = on
archive_command = '/bin/date'
max_connections = 1024
max_wal_senders = 32
wal_sender_timeout = 60s
wal_keep_size = 16
wal_level = replica
修改pg_hba.conf
vi /data/postgresql/data/pg_hba.conf
bash
host replication replica 0.0.0.0/32 trust
部署从库
bash
docker exec -it postgresql02 /bin/bash
在容器中运行相关命令:
rm -rf /var/lib/postgresql/data/*
如果退出了,则再次进入
bash
docker exec -it postgresql02 /bin/bash
su - postgres
pg_basebackup -R -D /var/lib/postgresql/data -P -h 192.168.52.15 -p 5432 -U replica
bash
docker restart postgresql02
# 查看/data/postgresql/data下的 postgresql.auto.conf
、查看进程
主机查看主数据库
bash
ps -ef|grep postgres
从机查看从数据库
bash
docker ps |grep postgres
测试同步
在主机容器中
bash
docker exec -it postgresql01 /bin/bash
su - postgres
psql
create database test12;
\list
在从机查看已经同步
bash
docker exec -it postgresql02 /bin/bash
su - postgres
psql
\list
关闭selinux
bash
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0