环境介绍
Linux主机,安装两个docker postgres 容器,并实现主从配置。
数据库版本:12
主库端口:5433
从库端口:5434
主节点操作
(1)创建工作目录
mkdir -p /home/hadoop/data/pg/master
(2)拉取镜像并启动容器
docker run -d \ -p 5433:5432 \ -e POSTGRES_PASSWORD=postgres \ -v /home/hadoop/data/pg/master/:/var/lib/postgresql/data \ --name pg12master \ -h pg12master \ -e LANG="C.UTF-8" \ -e 'TZ=Asia/Shanghai' \ -m 256m \ --memory-swap -1 \ postgres:12
(3)修改配置文件
pg_hba.conf
# "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust host replication all 0.0.0.0/0 md5 host replication repuser 172.17.0.0/24 md5 host all all 0.0.0.0/0 md5
postgresql.conf
wal_level = logical archive_mode = on archive_command = '/bin/date' max_wal_senders = 10 wal_keep_segments = 16 synchronous_standby_names = '*'
(4)基础数据备份
进入master容器,备份基础数据。
[root@bigdata3 ~]# docker exec -it pg12master /bin/bash root@pg12master:/# pg_basebackup -R -D /var/lib/postgresql/slave -Fp -Xs -v -P -h 172.17.0.1 -p 5433 -U postgres Password: postgres pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed pg_basebackup: write-ahead log start point: 0/B000028 on timeline 1 pg_basebackup: starting background WAL receiver pg_basebackup: created temporary replication slot "pg_basebackup_193" 24729/24729 kB (100%), 1/1 tablespace pg_basebackup: write-ahead log end point: 0/B000100 pg_basebackup: waiting for background process to finish streaming ... pg_basebackup: syncing data to disk ... pg_basebackup: base backup completed root@pg12master:/#
将容器中的基础数据下载到本地。
docker cp pg12master:/var/lib/postgresql/slave /home/hadoop/data/pg
从节点操作
(1)启动从节点容器
docker run -d \ --ip 172.17.0.5 \ -p 5434:5432 \ --name pg12slave \ -h pg12slave \ -e LANG="C.UTF-8" \ -e 'TZ=Asia/Shanghai' \ -e "POSTGRES_DB=postgres" \ -e "POSTGRES_USER=postgres" \ -e "POSTGRES_PASSWORD=postgres" \ -v /home/hadoop/data/pg/slave:/var/lib/postgresql/data \ -m 256m \ --memory-swap -1 \ postgres:12
注意:IP地址为Docker的IP。
检查测试
检查主库是否可以检查到从库。
docker exec -it -u postgres pg12master /bin/bash postgres@pg12master:/$ psql psql (12.3 (Debian 12.3-1.pgdg100+1)) Type "help" for help. postgres=# select * from pg_stat_replication; pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_l ag | flush_lag | replay_lag | sync_priority | sync_state | reply_time -----+----------+---------+------------------+--------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-------- ---+-----------+------------+---------------+------------+------------------------------- 149 | 16384 | repuser | walreceiver | 172.17.0.1 | | 51752 | 2021-11-25 15:21:28.80868+08 | | streaming | 0/A004518 | 0/A004518 | 0/A004518 | 0/A004518 | | | | 1 | sync | 2021-11-25 18:42:51.27092+08 (2 rows) postgres=#
使用Navcat连接主库,建表,并查看从库是否自动建表。