Windows server配置PostgresSQL15数据库主从模式


很少有windows服务器创建PostgresSQL15主从的,经过实验后的总结。

1. 准备好两台服务器

主服务器:192.168.1.1
从服务器:192.168.1.2

2. 操作主服务器

2.1 修改pg_hba.conf

在PostgresSQL安装目录中,data文件夹内的pg_hba.conf文件添加从服务器地址及访问的用户

// 这边就设置所有用户,所有ip都可以交互
host    replication     all             0.0.0.0/0               md5

2.2 创建流复制用户

// 创建流复制用户replicator
create user replica replication login connection limit 5 password 'replica';

2.3 修改postgresql.conf配置文件

我这边将原来的postgresql.conf复制一份,直接将下面代码覆盖到postgresql.conf

// 覆盖postgresql.conf
# basic
listen_addresses = '*'                # 监听所有ip
port = 5432                           # 端口
max_connections = 1000                # 最大连接数
superuser_reserved_connections = 10   # 给超级用户预留的连接数
shared_buffers = 1GB                  # 共享内存,一般设置为内存的1/4
work_mem = 16MB                       # 设置在写入临时磁盘文件之前查询操作(例如排序或哈希表)可使用的最大内存容量
maintenance_work_mem = 256MB          # 在维护性操作(例如VACUUMCREATE INDEXALTER TABLE ADD FOREIGN KEY)中使用的 最大的内存量
timezone = 'Asia/Shanghai'            # 系统时区
hot_standby = on                      # 打开热备

# optimizer
default_statistics_target = 500       # 默认100ANALYZE在pg_statistic中存储的信息量,增大该值,会增加ANALYZE的时间,但会让解释计划更精准

# wal
max_wal_size = 1GB                    # 建议与shared_buffers保持一致
min_wal_size = 80MB                   # 建议max_wal_size/12.5
wal_log_hints = on                    # 控制WAL日志记录的方式,建议打开
wal_level = replica                   # wal日志写入级别,要使用流复制,必须使用replica或更高级别
wal_sender_timeout = 60s              # 设置WAL发送者在发送WAL数据时等待主服务器响应的超时时间

# archive
archive_mode = on                     # 
archive_command = 'copy "%p" D:\\pg_archive\\"%f"'   # 归档存储位置,自行修改

# log 近7天轮询
log_destination = 'csvlog'            # 日志格式
logging_collector = on                # 日志收集器
log_directory = 'pg_log'              # 日志目录 $PGDATA/pg_log
log_filename = 'postgresql.%a'        # 7天日志轮询
log_file_mode = 0600                  # 日志文件的权限
log_rotation_size = 0                 # 日志的最大尺寸,设置为零时将禁用基于大小创建新的日志文件
log_truncate_on_rotation = on         # 这个参数将导致PostgreSQL截断(覆盖而不是追加)任何已有的同名日志文件
log_min_duration_statement = 0        # 如果语句运行至少指定的时间量,将导致记录每一个这种完成的语句的持续时间
log_duration = on                     # 每一个完成的语句的持续时间被记录
log_lock_waits = on                   # 控制当一个会话为获得一个锁等到超过deadlock_timeout时,是否要产生一个日志消息
log_statement = 'mod'                 # 控制哪些 SQL 语句被记录。有效值是 none (off)、ddl、mod和 all(所有语句)。ddl记录所有数据定义语句,例如CREATEALTERDROP语句。mod记录所有ddl语句,外加数据修改语句例如INSERT, UPDATEDELETETRUNCATE,COPY FROM
log_timezone = 'Asia/Shanghai'        # 设置在服务器日志中写入的时间戳的时区

# sql
statement_timeout = 300000            # 语句执行超时时间 5分钟
idle_in_transaction_session_timeout = 300000   # 事务空闲超时时间 5分钟
idle_session_timeout = 1800000        # 会话空闲超时时间 30分钟
lock_timeout = 60000                  # 等锁超时时间 1分钟

2.4 创建归档存储位置

根据上方archive_command参数,创建归档存储文件夹,我这边就放到D盘的pg_archive文件夹了

2.5 重启Pg15服务

3 操作从服务器

3.1 复制data文件夹

3.2 删除data文件夹

3.2 运行命令获取主库的data

运行命令,输入之前创建用户的密码

// 运行命令 ip为主库ip -D 复制的位置
pg_basebackup -h 192.168.1.1 -p 5432 -U replica -D "D:\PostgreSQL\data" -p 5432 --wal-method=stream

3.3 修改postgresql.conf

由于之前从主服务器复制过来了配置文件,所以不需要修改很多

// 添加命令 主库的连接用户
primary_conninfo = 'host=192.168.1.1 port=5432 user=replica password=replica' #主库信息

3.4 data文件夹创建文件standby.signal

// 添加命令 主库的连接用户
standby_mode = on #on为从库
primary_conninfo = 'host=192.168.1.1 port=5432 user=replica password=replica' #主库信息
recovery_target_timeline = 'latest' #流复制同步最新数据

3.5 重启从库

4 测试是否成功

主从库查询:

select pg_is_in_recovery();
主库是f代表false ;备库是t,代表true

主库查询复制状态:

select * from pg_stat_replication;

从库查询wal日志接收状态:

select * from pg_stat_wal_receiver;

主库数据插入数据,查询从库是否存在

查看主库是D:\pg_archive下是否有归档数据

5 主备切换

原主库操作

1 停止主库
2 添加standby.signal文件,并根据3.3,3.4配置参数
3 重启

原备库操作

1 停止备库
2 删除standby.signal,删除postgresql.conf文件中的3.3操作
3 重启

<think>好的,用户想了解如何搭建PostgreSQL 15的主从复制架构。我需要先回忆一下相关知识,并确保步骤正确。根据之前的引用内容,主从复制涉及安装PostgreSQL配置主库和从库、设置复制用户、执行基础备份等步骤。 首先,用户的环境需要两个节点,主库和从库,操作系统可能是Rocky Linux或CentOS。引用[2]提到使用shell脚本安装,这可能简化安装过程。安装完成后,需要编辑postgresql.conf文件,调整参数如wal_level和max_wal_senders,如引用[3]所述。此外,pg_hba.conf需要允许从库连接,引用[3]和引用[4]都有涉及这部分。 然后,创建复制专用用户,并处理数据目录的权限。引用[4]提到使用pg_basebackup进行基础备份,并调整数据目录的权限。从库的recovery.conf或standby.signal文件配置也是关键,不过PostgreSQL 15可能已经改为使用standby.signal,需要确认。 还需要注意步骤中的细节,比如重启服务、验证复制状态。引用[5]提到流复制可以提高高可用性和读写分离,这也是用户可能关心的好处。用户可能遇到的问题包括配置参数错误、权限问题或网络连接问题,所以步骤中需要强调这些检查点。 现在需要将步骤结构化,分主库配置、从库配置,并确保命令正确无误。同时,引用相关引用来源,确保用户可以参考具体资料。最后,生成相关问题,帮助用户进一步学习。</think>### PostgreSQL 15 主从复制架构搭建指南 #### 一、环境准备 1. **操作系统**:推荐使用 Rocky Linux 9/CentOS 7 或更高版本 2. **节点规划**: - 主库:IP `10.10.0.41` - 从库:IP `10.10.0.42` 3. **安装 PostgreSQL 15** 通过脚本一键安装(引用[2])或手动安装: ```bash # 添加 PostgreSQL 官方仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装 PostgreSQL 15 sudo dnf install -y postgresql15-server postgresql15-contrib ``` --- #### 二、主库配置 1. **初始化数据库** ```bash sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo systemctl start postgresql-15 ``` 2. **修改配置文件 `postgresql.conf`** ```bash sudo vi /var/lib/pgsql/15/data/postgresql.conf ``` 修改以下参数(引用[3]): ```ini listen_addresses = '*' wal_level = replica max_wal_senders = 10 hot_standby = on ``` 3. **配置访问权限 `pg_hba.conf`** ```bash sudo vi /var/lib/pgsql/15/data/pg_hba.conf ``` 添加从库连接规则: ```ini host replication replica 10.10.0.42/32 scram-sha-256 ``` 4. **创建复制专用用户** ```sql sudo -u postgres psql CREATE ROLE replica WITH REPLICATION LOGIN PASSWORD 'replica_password'; ``` 5. **重启主库服务** ```bash sudo systemctl restart postgresql-15 ``` --- #### 三、从库配置 1. **执行基础备份** 在从库节点运行(引用[4]): ```bash sudo -u postgres pg_basebackup -h 10.10.0.41 -U replica -D /var/lib/pgsql/15/data -P --wal-method=stream --write-recovery-conf ``` 调整目录权限: ```bash sudo chown -R postgres:postgres /var/lib/pgsql/15/data sudo chmod 700 /var/lib/pgsql/15/data ``` 2. **配置 `standby.signal`** ```bash sudo -u postgres touch /var/lib/pgsql/15/data/standby.signal ``` 3. **修改 `postgresql.conf`** 确保从库配置包含: ```ini hot_standby = on ``` 4. **启动从库服务** ```bash sudo systemctl start postgresql-15 ``` --- #### 四、验证主从同步 1. **主库查询状态** ```sql SELECT client_addr, state, sent_lsn, write_lsn FROM pg_stat_replication; ``` 应显示从库 IP 和同步状态。 2. **从库验证** 检查日志文件: ```bash sudo tail -f /var/lib/pgsql/15/data/log/postgresql.log ``` 出现 `started streaming WAL` 表示同步成功[^5]。 --- #### 五、故障排查 1. **连接失败**:检查防火墙和 `pg_hba.conf` 规则 2. **权限问题**:确保 `replica` 用户密码正确且具有 `REPLICATION` 权限 3. **WAL 日志异常**:确认 `wal_level` 设置为 `replica`[^3] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值