PostgreSQL PG的流复制搭建

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。【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.hqwc.cn/news/308202.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP的网络层(即IP层)之IP地址和网络掩码,在视频监控系统中的配置和应用

在给客户讲解我们的AS-V1000视频监控平台的时候,有的客户经常会配置错误IP地址的掩码和网关,导致出现一些网路问题。而在视频监控系统中,IP地址和子网掩码是用于标识网络中设备的重要标识符。IP地址被用来唯一地标识一个网络设备,…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的,但是kafka不支持这种直接的用法,所以我们需要独立实现这个功能,以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务,这个检…

杰发科技AC7840——EEPROM初探

0.序 7840和7801的模拟EEPROM使用不太一样 1.现象 按照官方Demo,在这样的配置下,我们看到存储是这样的(连续三个数字1 2 3)。 使用串口工具的多帧发送功能 看不出多少规律 修改代码后 发现如下规律: 前四个字节是…

github鉴权失败

问题: 如上图所示 git push 时发生了报错,鉴权失败; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥,勾选repo栏,选择有效期,为密钥命…

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态,简称多态。 物的多态 同一个人在不同人面前,角色不同 如: 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情,在不同情况下展现不同 如: 吃饭 中国人 筷子 …

springboot系列——IDEA创建项目并运行

springboot Spring Boot是为了简化Spring应用程序的开发和部署而产生的。 Spring Boot提供了一种基于约定优于配置的开发模式。它自动配置了Spring应用程序所需的各种组件和依赖,并提供了简单易用的命令行工具来构建和运行应用程序。 Spring Boot还提供了一套开箱…

【FFI】N-API的JS堆对象生命周期管理

N-API的JS堆对象生命周期管理 N-API是Node API的简写,同时也是nodejs的JS VM(链)接入原生模块.node文件的应用程序二进制接口(i.e. ABI)。借助N-API引入的抽象隔离,升级nodejs运行时(虚拟机) 【编译】不要求…

Jetson Orin安装riva以及llamaspeak,使用 Riva ASR/TTS 与 Llama 进行实时交谈,大语言模型成功运行笔记

NVIDIA 的综合语音 AI 工具包 RIVA 可以处理这种情况。此外,RIVA 可以构建应用程序,在本地设备(如 NVIDIA Jetson)上处理所有这些内容。 RIVA 是一个综合性库,包括: 自动语音识别 (ASR&#x…

《深入理解JAVA虚拟机笔记》运行时栈帧、方法分派、动态类型

运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈…

白话机器学习的数学-2-分类

1、设置问题 图片分类:只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开: 这次分类的目的就是找到这条线。 2、内积 找到一条线,这是否意味着我们要像学习回归时那样,求出一次函数的斜率…

使用rust读取usb设备ACR122U的nfc卡片id

rust及其高效和安全著称,而且支持跨平台,所以就想使用这个rust开发一个桌面端程序,来读取nfc设备的nfc卡片的id信息,下面就做一个最简单的入门教程吧,也是我写的第三个rust应用。 当你电脑上安装好了rust环境之后&…

人工智能_机器学习083_聚类评价指标_调整兰德系数_算法公式原理解析_手写代码使用兰德系数对聚类结果评分---人工智能工作笔记0123

然后我们再来看一下另一个评价聚类指标的系数,可以看到 兰德系数 上面RI= a+b/C2 ... 首先要知道这里的C,就是实际的类别,就是我们在业务上知道的类别数,然后K表示聚类以后的结果 当然当C==K 一样的时候,说明聚类效果是最好的对吧. a表示在C中被划分为同一类,也就是,比如一组…