PostgreSQL PG的流复制搭建

news/2024/7/9 19:38:39 标签: postgresql, 网络, 数据库

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。【PostgreSQL】PG的流复制搭建 - 课程体系 - 云贝教育icon-default.png?t=N7T8https://www.yunbee.net/Home/News/detail/article_id/510.html

一 、主备机器规划主机名

二 、创建流复制

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 如果把主库的参数修改如下:

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


http://www.niftyadmin.cn/n/5293586.html

相关文章

边缘计算网关:重新定义物联网数据处理

随着物联网(IoT)设备的爆炸式增长,数据处理和分析的需求也在迅速增加。传统的数据处理方式,将所有数据传输到中心服务器进行处理,不仅增加了网络负担,还可能导致数据延迟和安全问题。因此,边缘计…

js for和forEach 跳出循环 替代方案

1 for循环跳出 for(let i0;i<10;i){if(i5){break;}console.log(i) }在函数中也可以return跳出循环 function fn(){for(let i0;i<10;i){if(i5){return;}console.log(i)} } fn()for ... of效果同上 2 forEach循环跳出 break会报错 [1,2,3,4,5,6,7,8,9,10].forEach(i>…

web前端开发网页制作html/css结课作业

效果图展示&#xff1a; 注意事项&#xff1a; 引用JQuery文件地址和图片地址要更换一下。 百度网盘链接&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1wYkmLr7csjBwQY6GmlYm4Q?pwd4332 提取码&#xff1a;4332 html界面展示&#xff1a; main.css代码部…

NXP MC17XS6500高边驱动芯片功能的介绍

简介 本文主要介绍了高边驱动芯片MC17XS6500 的功能、特性。世平集团基于 FlagChips FC7300 HV BMS 方案&#xff0c;高边驱动芯片MC17XS6500 被用于驱动继电器的断开和闭合。在本文中介绍了 MC17XS6500 在正常模式和故障模式下&#xff0c;是如何控制 OUT 的输出。 1、功能…

深度学习框架:Tensorflow和pytorch、PaddlePaddle比较

Tensorflow和pytorch、PaddlePaddle都是非常优秀的深度学习框架&#xff0c;它们各自有着独特的优势和特点。下面是它们之间的一些比较&#xff1a; 易用性&#xff1a; PyTorch&#xff1a;以简洁、直观的设计思想著称&#xff0c;易于学习和使用。它采用动态图模式&#xf…

GitHub Copilot 终极详细介绍

编写代码通常是一项乏味且耗时的任务。现代开发人员一直在寻找新的方法来提高编程的生产力、准确性和效率。 像 GitHub Copilot 这样的自动代码生成工具可以使这成为可能。 GitHub Copilot 到底是什么&#xff1f; GitHub Copilot 于 2021 年 10 月推出&#xff0c;是 GitHub 的…

挑战Python100题(7)

100+ Python challenging programming exercises 7 Question 61 Print a unicode string "hello world". Hints: Use ustrings format to define unicode string. 打印一个unicode字符串“helloworld”。 提示:使用u“字符串”格式定义unicode字符串。 Solution…

oracle-存储结构

文件包括 控制文件.ctl、数据文件.dbf、日志文件.log这三类放在存储上。 参数文件&#xff1a;空间的划分&#xff0c;进程的选用&#xff08;.ora&#xff09; oracle启动的时候需要读一下&#xff0c;数据库启动后&#xff0c;参数文件并不关闭&#xff0c;但即使文件丢了&a…