From a2e0b1eac2ea4f32292733dcdf10b8f03d70cb8b Mon Sep 17 00:00:00 2001 From: colben Date: Tue, 20 May 2025 19:57:01 +0800 Subject: [PATCH] update --- .../SingleNode/pgsql/conf.d/xxxx.conf.example | 2 + pgsql/Demo/SingleNode/pgsql/my.cnf | 19 --- pgsql/Demo/StreamReplication/README.md | 109 ++++++++++++++++++ .../Demo/StreamReplication/docker-compose.yml | 39 +++++++ .../pgsql1/conf.d/server.conf | 2 + pgsql/Dockerfile | 1 + pgsql/README.md | 1 + 7 files changed, 154 insertions(+), 19 deletions(-) create mode 100644 pgsql/Demo/SingleNode/pgsql/conf.d/xxxx.conf.example delete mode 100644 pgsql/Demo/SingleNode/pgsql/my.cnf create mode 100644 pgsql/Demo/StreamReplication/README.md create mode 100644 pgsql/Demo/StreamReplication/docker-compose.yml create mode 100644 pgsql/Demo/StreamReplication/pgsql1/conf.d/server.conf diff --git a/pgsql/Demo/SingleNode/pgsql/conf.d/xxxx.conf.example b/pgsql/Demo/SingleNode/pgsql/conf.d/xxxx.conf.example new file mode 100644 index 0000000..dbc9278 --- /dev/null +++ b/pgsql/Demo/SingleNode/pgsql/conf.d/xxxx.conf.example @@ -0,0 +1,2 @@ +listen_addresses = '*' + diff --git a/pgsql/Demo/SingleNode/pgsql/my.cnf b/pgsql/Demo/SingleNode/pgsql/my.cnf deleted file mode 100644 index 5652181..0000000 --- a/pgsql/Demo/SingleNode/pgsql/my.cnf +++ /dev/null @@ -1,19 +0,0 @@ -[mysqld] -mysqlx = OFF -skip-name-resolve = 1 -max-user-connections = 600 - -## this should be less than 80% of total memory -innodb-buffer-pool-size = xxxxG - -## this should be half of "innodb-buffer-pool-size" -innodb-buffer-pool-instances = xxxx - -# binlog -server-id = 1 -log-bin = /var/lib/mysql-bin/master -binlog-format = ROW -binlog-expire-logs-seconds = 172800 -gtid-mode = ON -enforce-gtid-consistency = TRUE - diff --git a/pgsql/Demo/StreamReplication/README.md b/pgsql/Demo/StreamReplication/README.md new file mode 100644 index 0000000..029d29f --- /dev/null +++ b/pgsql/Demo/StreamReplication/README.md @@ -0,0 +1,109 @@ +# 部署 PostgreSQL 流复制 + +- 按实际环境修改 + - docker-compose.yml + - pgsql1/conf.d/\*.cnf + - pgsql2/conf.d/\*.cnf + +- 创建目录 + ``` + grep '\> pgsql1/db/pg_hba.conf + #docker exec -u postgres pgsql1 pg_ctl reload + ``` + +- 增加主库配置 + ``` + echo ' +wal_level = hot_standby +max_wal_senders = 8 +wal_keep_size = 512 +wal_sender_timeout = 60s +max_connections = 100 +' > pgsql1/conf.d/replication.conf + +- 重启 pgsql1 数据库 + ``` + docker-compose restart pgsql1 + ``` + +- 登录 pgsql2 数据库,同步 pgsql1 的数据目录 + ``` + docker exec -u postgres pgsql2 mkdir -p /var/log/pgsql/db_pg1 + docker exec -u postgres pgsql2 \ + pg_basebackup \ + -h pgsql1 \ + -D /var/log/pgsql/db_pg1 \ + -p 5432 \ + -U replicator \ + -Fp -Xs -P -c fast + ``` + +- 停止并删除 pgsql2 容器,替换其数据目录,**注意数据目录权限** + ``` + docker-compose stop pgsql2 + docker-compose rm -f pgsql2 + rm -rf pgsql2/db + mv pgsql2/log/db_pg1 pgsql2/db + chmod 0750 pgsql2/db + ``` + +- 增加从库配置 + ``` + echo ' +primary_conninfo = 'host=pgsql1 port=5432 user=replicator' +recovery_target_timeline = latest +hot_standby = on +max_standby_streaming_delay = 30s +wal_receiver_status_interval = 10s +hot_standby_feedback = on +max_connections = 200 +max_worker_processes = 20 +' > pgsql2/conf.d/replication.conf + ``` + +- 启动 pgsql2 数据库 + ``` + docker-compose up -d pgsql2 + ``` + +- 登录 pgsql1 数据库,查看从库信息 + ``` + docker exec -u postgres pgsql1 \ + psql -c "select + client_addr, + usename, + backend_start, + application_name, + sync_state, + sync_priority + FROM pg_stat_replication;" + # 在 pgsql1 里创建数据库、表或更改数据,在 pgsql2 里可以看到 + ``` + diff --git a/pgsql/Demo/StreamReplication/docker-compose.yml b/pgsql/Demo/StreamReplication/docker-compose.yml new file mode 100644 index 0000000..b2f72ee --- /dev/null +++ b/pgsql/Demo/StreamReplication/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.7" + +services: + pgsql1: + image: harbor.colben.cn/general/pgsql:15 + container_name: pgsql1 + restart: "on-failure" + stop_grace_period: 32s + networks: + pgsql: + volumes: + - type: bind + source: ./pgsql1/db + target: /var/lib/pgsql/ + - type: bind + source: ./pgsql1/conf.d + target: /etc/pgsql/conf.d + - type: bind + source: ./pgsql1/log + target: /var/log/pgsql + + pgsql2: + image: harbor.colben.cn/general/pgsql:15 + container_name: pgsql2 + restart: "on-failure" + stop_grace_period: 32s + networks: + pgsql: + volumes: + - type: bind + source: ./pgsql2/db + target: /var/lib/pgsql/ + - type: bind + source: ./pgsql2/conf.d + target: /etc/pgsql/conf.d + - type: bind + source: ./pgsql2/log + target: /var/log/pgsql + diff --git a/pgsql/Demo/StreamReplication/pgsql1/conf.d/server.conf b/pgsql/Demo/StreamReplication/pgsql1/conf.d/server.conf new file mode 100644 index 0000000..dbc9278 --- /dev/null +++ b/pgsql/Demo/StreamReplication/pgsql1/conf.d/server.conf @@ -0,0 +1,2 @@ +listen_addresses = '*' + diff --git a/pgsql/Dockerfile b/pgsql/Dockerfile index 9ae5f5b..c359ac9 100644 --- a/pgsql/Dockerfile +++ b/pgsql/Dockerfile @@ -41,6 +41,7 @@ include = 'fixed-parameters.conf'\n\ data_directory = '/var/lib/pgsql'\n\ hba_file = '/var/lib/pgsql/pg_hba.conf'\n\ ident_file = '/var/lib/pgsql/pg_ident.conf'\n\ +unix_socket_directories = '/tmp'\n\ log_destination = 'stderr'\n\ logging_collector = on\n\ log_directory = '/var/log/pgsql'\n\ diff --git a/pgsql/README.md b/pgsql/README.md index 0facbcc..1f5eeb8 100644 --- a/pgsql/README.md +++ b/pgsql/README.md @@ -13,4 +13,5 @@ ## 案例 - [Demo/SingleNode/](Demo/SingleNode/): 单节点 +- [Demo/StreamReplication/](Demo/StreamReplication/): 流复制