docker搭建postgresql主从数据库
本文介绍了在Docker环境下搭建PostgreSQL主从数据库的详细步骤。使用两个节点(192.168.1.226主库和192.168.1.227从库),通过创建dbnet网络连接。配置docker-compose.yml文件后,主库设置包括创建replica角色、修改postgresql.conf和pg_hba.conf配置文件;从库通过pg_basebackup命令同步主库数据。最后测试验证
pg主从数据库搭建
选择两个数据库节点
192.168.1.226 postgres_master 主库
192.168.1.227 postgres_slaver 从库
创建db网络(两个节点均执行)
docker network create dbnet (docker network create --driver bridge dbnet)
一、配置docker-compose.yml文件
1.主节点
cat docker-compose.yml
version: '3.0'
services:
postgresql:
image: postgres:15.1
restart: always
container_name: postgres_master
environment:
POSTGRES_PASSWORD: postgres
working_dir: /postgresql
networks:
- dbnet
ports:
- "0.0.0.0:5433:5432"
volumes:
- ./pg/data:/var/lib/postgresql/data
networks:
dbnet:
external: true
2.从库
cat docker-compose.yml
version: '3.0'
services:
postgresql:
image: postgres:15.1
restart: always
container_name: postgres_slaver
environment:
POSTGRES_PASSWORD: postgres
working_dir: /postgresql
networks:
- dbnet
ports:
- "0.0.0.0:5433:5432"
volumes:
- ./pg/data:/var/lib/postgresql/data
networks:
dbnet:
external: true
二、部署主库
1.启动容器
docker-compose up --build -d postgresql
2.进入主库
docker exec -it postgres_master /bin/bash
3.在容器中执行
# 切换为postgres用户
su postgres
# 运行 psql
psql
# 创建 replica 角色
CREATE ROLE replica login replication encrypted password 'replica'; #创建用户
#列出数据库用户和角色
\du
exit;
4.配置 postgresql.conf
# 在宿主机目录 ./pg/data 下编辑 postgresql.conf
vi postgresql.conf
改为如下内容
listen_addresses = '*'
archive_mode = on
archive_command = '/bin/date'
max_connections = 300
max_wal_senders = 32
wal_sender_timeout = 60s
wal_keep_size = 16
wal_level = replica
5. 配置 pg_hba.conf
# 新增配置
# 在宿主机目录 ./pg/data 下编辑 pg_hba.conf
vi pg_hba.conf
host replication replica 192.168.1.227/32 trust
重启数据库
docker restart postgres_master
三、部署从库
1.启动数据库
docker-compose up --build -d postgresql
2.进入容器
docker exec -it postgres_slaver /bin/bash
3.在容器中运行命令
# 此时可能会退出容器,只需要重新登入进去即可
rm -rf /var/lib/postgresql/data/*
# 注 此操作之后立即 运行 pg_basebackup 否则容易报错 无法备份
# 如果退出了,则再次进入
docker exec -it postgres_slaver /bin/bash
# 进入容器之后运行
pg_basebackup -R -D /var/lib/postgresql/data -P -h 192.168.1.226 -p 5433 -U replica
# 显示 26288/26288 kB (100%), 1/1 tablespace
# 退出容器重启 docker
docker restart postgres_slaver
## 查看 ./pg/data 下的 postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replica passfile=''/root/.pgpass'' channel_binding=prefer host=192.168.1.226 port=5433 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
四、查看进程
主库节点
ps -ef | grep postgres
从库节点
ps -ef|grep postgres
五、测试同步
# 在主机容器中
postgres=# create database test12;
CREATE DATABASE
postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
test12 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(5 rows)
# 在从机查看已经同步
postgres=# \list
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
test12 | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(5 rows)
更多推荐
所有评论(0)