概述

今天主要分享一下PG主从异步流复制搭建相关的一些理论内容,仅供参考。


一、PostgreSQL通过WAL日志构建高可靠性原理

PostgrepSQL在数据目录的子目录pg_xlog子目录中维护了一个WAL日志文件,可以把WAL日志备份到另外一台备份服务器,通过重做WAL日志的方式在备服务器上恢复数据(类似Oracle的redo日志)。

WAL日志复制到另外一台备份服务器可以有两种方式:

1、 WAL日志文件复制

此种方式是写完一个WAL日志后,才把WAL日志文件拷贝到备份数据库中。这样通常备份会落后主库一个WAL日志文件,当主数据库发生故障时,主数据库的WAL文件并没有填充完毕未传输(默认16MB)、或者时延等原因导致WAL文件没有传输完毕,会导致被数据库可能存在一定的数据丢失。此种方式是postgreSQL9.0前版本主要提供的WAL日志复制机制。

采用此方式的WAL复制,需要:

  • 主数据库的wal_level配置为archive或以上。
  • PostgreSQL 9.1之后提供了一个很方便的工具pg_basebackup,使用完成一次基础备份到备数据库。
  • 后续产生WAL文件,可以通过archive_command参数调度命令传输至备机。

2、流复制(Streaming Replication)

2.1、概念

流复制是PostgreSQL 9.0之后才提供的新的传递WAL日志的方法。通过流复制,备库不断的从主库同步相应的数据,并在备库apply每个WAL record,这里的流复制每次传输单位是WAL日志的record。它的好处是只要主库一产生日志,就会马上传递到备库,同WAL日志文件相比有更低同步延迟。

同时PostgreSQL9.0之后提供了Hot Standby能力,备库在应用WAL record的同时也能够提供只读服务。

PostgreSQL物理流复制按照同步方式分为两类:

1)异步流复制

2)同步流复制

2.2、主备总体架构

PostgreSQL的流复制最多支持1主8备、支持级联复制(主->备1,备1->备2)。

PG主备流复制的核心部分由walsender,walreceiver和startup三个进程组成。

walsender进程是用来发送WAL日志记录的,执行顺序如下:

 PostgresMain()->exec_replication_command()->StartReplication()->WalSndLoop()->XLogSendPhysical()

walreceiver进程是用来接收WAL日志记录的,执行顺序如下:

 sigusr1_handler()->StartWalReceiver()->AuxiliaryProcessMain()->WalReceiverMain()->walrcv_receive()

startup进程是用来apply日志的,执行顺序如下:

 PostmasterMain()->StartupDataBase()->AuxiliaryProcessMain()->StartupProcessMain()->StartupXLOG()

2.3、walsender和walreceiver进程流复制过程

walsender和walreceiver交互主要分为以下几个步骤:

1)walreceiver启动后通过recovery.conf文件中的primary_conninfo参数信息连向主库,主库通过连接参数replication=true启动walsender进程。

2)walreceiver执行identify_system命令,获取主库systemid/timeline/xlogpos等信息,执行TIMELINE_HISTORY命令拉取history文件。

3)执行wal_startstreaming开始启动流复制,通过walrcv_receive获取WAL日志,期间也会回应主库发过来的心跳信息(接收位点、flush位点、apply位点),向主库发送feedback信息(最老的事务id),避免vacuum删掉备库正在使用的记录。

4)执行walrcv_endstreaming结束流复制,等待startup进程更新receiveStart和receiveStartTLI,一旦更新,重新进入2/3/4步骤。

2.4、PG流复制方式

WAL流复制支持同步、异步方式:

  • 异步流复制模式中,主库提交的事务不会等待备库接收WAL日志流并返回确认信息,因此异步流复制模式下主库与备库的数据版本上会存在一定的处理延迟,延迟的时间主要受主库压力、备库主机性能、网络带宽等影响,当正常情况下,主备的延迟通常在毫秒级的范围内,当主库宕机,这个延迟就主要受到故障发现与切换时间的影响而拉长,不过虽然如此,这些数据延迟的问题,可以从架构或相关自动化运维手段不断优化设置。
  • 同步流复制模式中,要求主库把WAL日志写入磁盘,同时等待WAL日志记录复制到备库、并且WAL日志记录在任何一个备库写入磁盘后,才能向应用返回Commit结果。一旦所有备库故障,在主库的应用操作则会被挂起,所以此方式建议起码是1主2备。

二、进程通信详细过程

1、walsender和walreceiver的流复制过程

2、walreceiver和startup进程


篇幅有限,这篇主要介绍理论方面的内容,后面再分享一下部署方面的内容,有兴趣的朋友可以关注下!

angular8 获取文件流_基于PG12.2实现主从异步流复制及主从切换教程(上)相关推荐

  1. postgresql主从备份_基于PG12.2实现主从异步流复制及主从切换教程(下)

    概述 今天主要介绍如何搭建PG主从流复制及主从切换,仅供参考. PS:上篇的地址在文末链接. PostgreSQL数据库主从异步流复制搭建 环境说明: 1.安装PG数据库(主从库进行) 用脚本进行,略 ...

  2. socket 获取回传信息_基于netty框架的socket长连接负载均衡解决方案 oswl

    前言 物联网如今是一个大的趋势,但是概念还比较新颖.大家对这一块的技术积累也比较匮乏,借此前段时间摩拜单车出现了大规模瘫痪的现象.我们今天来讨论一下物联网项目的开发方式. 关于tcp/ip 相关的知识 ...

  3. u盘无法复制文件进去_只需一招,禁止Windows复制文件到U盘,再也不用担心你的资料被拷走!...

    现在,我们日常的生活和工作都是电脑全程陪伴,可以说是离不开电脑了. 也正是因为电脑的功能那么多,而且在保存资料方面,相比纸质资料来讲,确实有十分大的优势! 因此,有许多人都会将一些重要的个人资料或者是 ...

  4. ts获取服务器数据_基于Nginx的媒体服务器技术-线上公开课

    国内应用比较多的开源流媒体服务器nginx-rtmp-module一直存在功能少.集群化难度大等问题.在LiveVideoStack线上分享中,PingOS 开源项目组开发工程师.UCloud RTC ...

  5. ansible 修改文件变量_基于ansible的批量配置生成

    背景 网络运维,我们有很多时间是在准备配置的路上,咱们之前也讲过,从脑海中或者是从自己的宝藏笔记中找出模板,一顿操作猛如虎,Ctrl C+ Ctrl V.这个过程是十分危险的,因为人不是机器,肯定会出 ...

  6. 获取预制体_基于弱磁探测技术的轴承滚动体转速检测方法研究

    摘要 针对高速轻载轴承保持架打滑测试中滚动体速度检测的难题,利用弱磁探测技术探测滚动体的弱磁场,并通过提取弱磁信号的特征频率实现滚动体转速的测量.搭建了测试平台进行试验,分析了测试距离与转速对滚动体弱 ...

  7. 接收大文件流_一文搞定 Node.js 流 (Stream)

    stream(流)是一种抽象的数据结构.就像数组或字符串一样,流是数据的集合. 不同的是,流可以每次输出少量数据,而且它不用存在内存中. 比如,对服务器发起 http 请求的 request/resp ...

  8. java 文件缓冲区_基于直接缓冲区和非直接缓冲区的javaIO文件操作

    基本概念: 1. 非直接缓冲区:  指的是通过jvm来缓存数据的,应用程序要读取本地数据要经历从本地磁盘到物理内存,然后copy到jvm中,然后再通过流的方式读取到应用程序中,写的操作正好与之相反. ...

  9. java网关限流_基于网关GateWay实现限流-令牌桶 及原理解析

    一.使用流程 1) 引入坐标 org.springframework.boot spring-boot-starter-data-redis-reactive 2.1.3.RELEASE 2) 创建b ...

最新文章

  1. 【性格心理学】为什么我在关键时刻总是紧张?
  2. Object C学习笔记20-结构体
  3. 网页3D效果库Three.js学习[二]-了解照相机
  4. 集群服务器状态命令------rs.status()各个字段的含义
  5. word总页数不包含封面_6个实用的word模板,让你快速制作表格和目录
  6. 一次简单易懂的多态重构实践,让你理解条件逻辑
  7. ActiveMQ从入门到精通(二)
  8. windows10安装更新很慢ndows,Windows 10最近更新可能会使电脑速度变慢 但有解决办法...
  9. QQ 木子版 vs 现在的某些修改版
  10. 全站最全实战的Java项目(附源码)
  11. windows7 安装docker
  12. Termux使用教程
  13. 关于营销自动化,30个惊人的事实
  14. 360全景图制作的原理是什么?有哪些必备的装备?
  15. DATAGUARD原理
  16. IEEE Communications Letters - cover letter
  17. IOS APP 制作二维码 下载
  18. 浅谈企业文化的重要性,搭档之家有话说
  19. Linux xargs 命令
  20. 复杂网络分析软件小结

热门文章

  1. 自己经常崩溃怎么办?情绪崩溃怎么办?成年人的崩溃总是那么的猝不及防!
  2. [数据结构]Python Heapq库--小顶堆
  3. java大顶堆小顶堆使用案例
  4. 从零开始学Unity游戏开发
  5. 微信个人号裂变引流技巧,微信个人号粉丝裂变
  6. 瑞芯微RK3566通用型SoC参数配置
  7. 5.3 Python图像处理之图像编码-算术编码
  8. Jetpack全组件开发短视频应用App
  9. Git 介绍 ppt
  10. 北京大兴希尔顿酒店开业助力机场配套