陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235 / 19906632509 / 19906733890 / 19905812933(微信同号)

客服微信

【PostgreSQL】PG的流复制搭建

作者:炎燚小寶
发布时间:2023-12-21 11:46
浏览量:884

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

一 主备机器规划主机名


二 创建流复制


2.1 修改主机配置(两台主机都修改)



2.2 在主库设置

1) 初始化新数据库


2) 启动数据库


3)建立同步用户


4)配置$PGDATA/data/pg_hba.conf


注意:备库也做同样的配置(注意修改主机名),为了后面的主备切换

5)配置$PGDATA/data/postgres.conf

6)重启让配置生效

2.3 在备库设置

1)不需要初始化,直接从主库备份就行



2)备库修改配置文件


3)配置$PGDATA/data/pg_hba.conf

4)创建备库文件 standby.signal

touch standby.signal

5)重启让配置生效


三、验证

3.1 查看主备进程




3.2 主库切换日志

查看备库WAL日志同步情况


3.3 查看当前备库状态:



3.4 主库查询


sync_state表示同步模式
sent_lsn表示发送日志的起点
reply_time表示应用日志的起点


3.5 备库数据库日志内容


四、主从切换

这里建议把wal保留参数调大,保证切换过程中,原备库的日志和原主库的日志LSN同步

▪ min_wal_size

▪ wal_keep_size


4.1 停止主库



4.2 备库上执行命令,提升为主备



4.3 修改postgresql.auto.conf


重启数据库,查看后台进程,此时未发现walsender进程



4.4 在新备库上(原主库)创建一个 standby.signal文件,添加如下内容:



4.5 在新备库的 postgresql.auto.conf 文件中添加如下内容:


注意/home/postgres/.pgpass 其实没有没有这个文件,不需要创建。


4.6 启动新备库:



4.7 验证主备库是否能够同步

在主库进行 dml 操作,发现备库能够正常同步,切换成功。


五、实时同步

上面的配置是异步同步,对于主库的性能影响是最小的,但是会丢数据,我们可以把复制配置成实时同步。

当设置同步复制时:

• 最小化延迟

• 确保您有冗余延迟

• 同步复制比异步复制代价更高同步时是通过一个关键的参数 application_name 来实现的。


5.1 配置主库 postgres.conf,添加如下内容:



5.2 重启主库



5.3 修改备库 standby.signal 配置文件

在原来的内容中添加 application_name 内容



5.4、修改备库 postgresql.auto.conf

添加 application_name 内容,实际上备库是以这个文件为主,上面修改的 standby.signal 并不生效:


5.5 重启备库,查看后台日志信息:

consistent recovery state reached at 0/21000188


5.6 在主库查看同步状态:


状态显示为实时同步。


5.7 验证备库关闭


备库关闭之后,主库执行DML操作HANG住。


5.8 多个从库的配置

如果我们配置了多个备库,而且进行实时同步,假如只要保证前面的备库能够实时就可以,那么可以进行如下设置:


如果只要保证其中任何的备库同步成功,可以进行如下设置:



六、添加节点

6.1 修改 standby.signal 和postgres.auto.conf 文



6.2 修改主库的 postgres.conf,添加如下一行:




6.3 重启主库,查看复制状态:



6.4 验证同步

主要备库的任何一个节点无法同步,都会影响主库的事务操作。但是发现正常的一个备库节点能够同步,即使主库处于停留状态,由此证明主库已经把事务传递到备库了,只是有备库没有同步,所以处于等待状态。


6.5 如果把主库的参数修改如下:



实验证明,如果第二个备库节点发生故障无法同步,不会影响主库事务操作。