同一台服务器下postgresql主从数据库配置

本文详细介绍了在同一台Windows服务器上设置postgresql主从数据库的步骤,包括前期准备、主数据库和从数据库的配置操作,重点在于指定不同的data文件夹和端口,以及通过pg_basebackup进行数据备份。

昨天写了一篇window下基于两台服务器配置postgresql主从数据库的说明(基于windows平台的postgresql主从数据库配置),但考虑到不是所有人都有两台服务器可以使用,因此今天会介绍下在同一台windows服务器下配置postgresql主从数据库的步骤。

  重点之处:

 pg_ctl start -D "D:\Program Files\PostgreSQL\10\data" -o "-p 5432"
pg_ctl start -D "D:\Program Files\PostgreSQL\10\data2" -o "-p 5433"

可以注意上边两行代码,他们的区别是指定了不同的data文件夹以及端口,这便是基于同一服务器的核心。

 

以下配置说明开始:

一,前期准备

首先我的服务器为:

192.168.218.31

端口为:

5432(主),5433(从)

注意:

主数据库操作的文件均是data文件夹下的;

从数据库操作的文件均是data2文件夹下的,data2的创建我后边会讲到,这个不用急。

 二,主数据库操作 (以下操作与上一篇文章的配置有共同之处,相同处我就直接复制了)

1. 配置pg_hba.conf文件

 文件具体位置取决于安装目录,我的是在D:\Program Files\PostgreSQL\10\data下。

 在文件末尾增加一下代码,目的是增加了名为replica的用户,以进行数据库同步的操作。填写的ip为从数据库的地址(本机地址)。

host    replication     repl
<think>嗯,用户这次是明确要求一个基于两服务器PostgreSQL主从集群部署教程,而且特别提到参考之前的引用内容。看来用户是在搭建生产环境或测试环境,需要简洁实用的方案。用户之前提供的引用其实挺全面的,涵盖了主从复制配置的不同实现方式:引用1是传统的主从复制指南,引用2提到docker容器化部署,引用3展示了异步复制的验证方法,引用4涉及故障切换操作,引用5强调权限配置要点。不过用户这次明确要求两物理服务器的部署方案,所以应该聚焦在传统方式上。注意到用户上次提问时我给出的高可用方案(Patroni)可能有些复杂,这次用户只要主从复制,所以需要简化。但作为专业建议,还是应该提一下高可用选项作为扩展方案。用户可能是运维工程师或开发人员,正在搭建数据库基础设施。ta连续两次询问集群部署,说明项目已经进入实施阶段,时间应该比较紧张。需要把关键步骤和常见避坑点说清楚,比如主从节点的时间同步和密码安全这种容易忽略的细节。技术要点要突出:1.主节点必须开启wal_level=replica(引用1/3)2.pg_hba.conf的replication规则是复制的关键(引用5)3.pg_basebackup是最安全的初始同步方式(引用2)4.standby.signal文件的创建标识了从库角色(现代PG版本特性)操作上需要重点强调:-主节点创建replication用户时要避免使用postgres超级用户(引用2)-同步模式下可能导致主库阻塞的风险(引用3的async配置)-配置后必须重启主库使参数生效(引用1)最后验证部分要给出直观的SQL命令,像用户引用3里展示的pg_stat_replication查询就很实用。故障切换方案虽然用户没要求,但作为完整方案应该包含(引用4的pg_ctlpromote操作)。对了,所有命令行必须标注清楚执行位置(主库/从库),这点在引用2的docker操作中体现得很好。用户可能在多服务器之间操作,容易混淆节点。</think> 以下是基于两服务器的 **PostgreSQL 主从复制集群部署教程**,结合引用内容整理的关键步骤: --- ### **一、环境准备** | **节点** | **IP** | **角色** | |----------|---------------|----------| | 节点A | 192.168.1.10 | 主库 | | 节点B | 192.168.1.11 | 从库 | **要求**: - 所有节点时间同步(`ntp/chrony`) - PostgreSQL 版本一致(以 v14 为例) - 防火墙开放端口:`5432`(数据库)、`8008`(监控) --- ### **二、主库配置(节点A)** #### 1. **修改 `postgresql.conf`** ```bash # 启用流复制 wal_level = replica max_wal_senders = 10 hot_standby = on # 同步提交(可选异步)[^3] synchronous_commit = remote_write ``` #### 2. **修改 `pg_hba.conf`** ```bash # 允许从库复制流 host replication repuser 192.168.1.11/32 md5 # 从库IP ``` #### 3. **创建复制用户** [^2] ```sql CREATE ROLE repuser LOGIN REPLICATION ENCRYPTED PASSWORD 'rep123'; ``` #### 4. **重启服务** ```bash sudo systemctl restart postgresql-14 ``` --- ### **三、从库配置(节点B)** #### 1. **清空数据目录** ```bash rm -rf /var/lib/pgsql/14/data/* ``` #### 2. **从主库同步数据** ```bash pg_basebackup -h 192.168.1.10 -U repuser \ -D /var/lib/pgsql/14/data -Ft -Xs -P -v ``` #### 3. **创建 `standby.signal` 文件** [^1] ```bash touch /var/lib/pgsql/14/data/standby.signal ``` #### 4. **配置 `postgresql.auto.conf`** ```ini primary_conninfo = 'host=192.168.1.10 port=5432 user=repuser password=rep123' ``` --- ### **四、启动与验证** #### 1. **启动从库** ```bash sudo systemctl start postgresql-14 ``` #### 2. **主库检查复制状态** [^3] ```sql SELECT client_addr, state, sync_state FROM pg_stat_replication; ``` **输出示例**: ``` client_addr | state | sync_state ---------------+-----------+------------ 192.168.1.11 | streaming | async ``` #### 3. **从库验证只读** ```sql SELECT pg_is_in_recovery(); -- 返回 `t` 表示只读模式 ``` --- ### **五、故障切换(主库宕机时)** [^4] 1. 在从库执行提升为主库: ```bash sudo -u postgres pg_ctl promote -D /var/lib/pgsql/14/data ``` 2. 检查新主库状态: ```bash sudo -u postgres pg_controldata | grep 'Database cluster state' # 输出 `in production` 表示提升成功 ``` --- ### **关键注意事项** 1. **异步 vs 同步复制**: - 异步:`synchronous_commit = off`(高性能,可能丢数据)[^2] - 同步:`synchronous_standby_names = 's1'`(强一致,性能损失) 2. **密码安全**: - 使用强密码 + `pg_hba.conf` IP白名单 [^5] 3. **监控**: - 定期检查 `pg_stat_replication` 和复制延迟 --- **
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值