Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南
1、环境规划
IP地址 | 主机名 | 角色 |
192.168.52.15 | postgresql01 | 主库 |
192.168.52.17 | postgresql02 | 从库 |
2、安装docker
2.1、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.2、配置docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3、安装docker
yum install -y docker-ce
2.4、修改docker配置文件
mkdir /etc/docker -p
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.credclouds.com",
"https://k8s.credclouds.com",
"https://quay.credclouds.com",
"https://gcr.credclouds.com",
"https://k8s-gcr.credclouds.com",
"https://ghcr.credclouds.com",
"https://do.nark.eu.org",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.1panel.live",
"https://docker.rainbond.cc"
],
"data-root": "/etc/docker"
}
EOF
2.5、启动docker
systemctl daemon-reload
systemctl enable docker --now
systemctl restart docker
2.6、安装docker-compose
#下载docker-compose文件
curl -L "https://github.com/docker/compose/releases/download/v2.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#给他一个执行权限
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#查看是否安装成功
docker-compose --version
3、拉取postgresql镜像
docker pull postgres:14.5
4、创建db网络
docker network create --driver bridge dbnet
5、创建数据目录
mkdir /data/postgresql/data -p
chmod -R 777 /data/postgresql/data
6、docker-compose.yml文件编写
主库文件:
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
postgresql:
image: postgres:14.5
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
从库文件:
sudo tee /data/postgresql/docker-compose.yml <<-'EOF'
version: '3.0'
services:
postgresql:
image: postgres:14.5
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
7、启动postgresql服务
cd /data/postgresql
docker-compose up -d
docker-compose ps
8、部署主库
docker exec -it postgresql01 /bin/bash
su - postgres
psql
CREATE ROLE replica login replication encrypted password 'replica@123';
\du #列出数据库用户和角色
exit
配置postgresql.conf
vi /data/postgresql/data/postgresql.conf
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
host replication replica 192.168.52.17/32 trust
9、部署从库
docker exec -it postgresql02 /bin/bash
在容器中运行相关命令:
rm -rf /var/lib/postgresql/data/*
# 如果退出了,则再次进入
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
exit
docker restart postgresql02
# 查看/data/postgresql/data下的 postgresql.auto.conf
10、查看进程
# 主机查看主数据库
ps -ef|grep postgres
# 从机查看从数据库
docker ps |grep postgres
11、测试同步
# 在主机容器中
docker exec -it postgresql01 /bin/bash
su - postgres
psql
create database test12;
\list
# 在从机查看已经同步
docker exec -it postgresql02 /bin/bash
su - postgres
psql
\list