当前位置: 首页 > article >正文

PostgreSQL主从同步介绍

PostgreSQL主从同步介绍

PostgreSQL 主从同步(也称为流复制)的原理是基于基于日志的复制机制(Write-Ahead Logging, WAL)进行的。这种机制使得数据在主数据库(Primary)和从数据库(Standby)之间保持同步,从而确保高可用性和数据冗余。

主从同步的基本概念

  1. 主数据库(Primary):负责处理所有写操作(插入、更新、删除)以及读操作。
  2. 从数据库(Standby):负责接收从主数据库传递来的WAL日志,并应用这些日志以保持数据的一致性。可以配置为只读以分担查询负载。

流复制原理

PostgreSQL 流复制的关键机制如下:

  1. WAL 日志:主数据库将所有变更首先写入 WAL 日志文件。这些日志记录了数据库的每一个修改操作。
  2. 发送 WAL 数据:主数据库将 WAL 日志发送给从数据库。发送是通过 WAL Sender 进程(wal_sender)来完成的。
  3. 接收和写入 WAL 数据:从数据库通过 WAL Receiver 进程(wal_receiver)接受来自主数据库的 WAL 日志,并将其写入本地存储。
  4. 应用 WAL 数据:从数据库将接收到的 WAL 日志应用到自身的数据库实例中,从而使数据与主数据库保持一致。

流复制的工作流程

  1. 主数据库写 WAL 日志

    • 主数据库生成的每个事务变更都会记录到 WAL 日志文件中。
    • WAL 日志文件通常被以 16MB 为一个文件块存储,称为 WAL 段。
  2. WAL Sender 发送日志

    • 主数据库的 WAL Sender 进程将最新的 WAL 日志记录发送给从数据库。
    • postgresql.conf 中的 max_wal_senders 参数决定了可以启动多少个 WAL Sender 进程。
  3. WAL Receiver 接收日志

    • 从数据库的 WAL Receiver 进程接收 WAL 日志,并将其保存在本地的 WAL 目录中。
    • 从数据库启动时,配置文件 recovery.conf 中的 standby_mode 设置为 on,并配置 primary_conninfo 用于连接主数据库。
  4. 应用 WAL 日志

    • 从数据库将接收到的 WAL 日志应用到自己的数据文件中,以使其与主数据库保持同步。
    • 在 PostgreSQL 13 版本及更高版本中,recovery.conf 的内容被合并到 postgresql.conf 中。

PostgreSQL 主从同步利用 WAL 日志文件实现数据同步,确保从数据库和主数据库之间的数据一致性。通过 WAL Sender 和 WAL Receiver 进程,变更数据被实时传输和应用,使系统能够有效地实现高可用性和负载均衡。


http://www.kler.cn/a/287404.html

相关文章:

  • 使用 Thermal Desktop 进行航天器热分析
  • 头歌答案--爬虫实战
  • 无降智o1 pro——一次特别的ChatGPT专业模式探索
  • 微信原生小程序自定义封装组件(以导航navbar为例)
  • Oracle查询-in条件超过1000
  • JavaWeb 前端基础 html + CSS 快速入门 | 018
  • 【Kubernetes知识点问答题】Docker CE 部署
  • 【网络安全】绕过输入验证
  • 【国铁采购平台-注册安全分析报告-无验证方式导致安全隐患】
  • 【Git】常用命令大全(带注释)
  • 快速申请公网、内网IP地址SSL证书
  • STL之my_list容器
  • 一文打通前端环境搭建
  • ESD防静电监控系统助力电子制造行业转型升级
  • 鸿蒙(API 12 Beta3版)【使用智能PhotoPicker】Media Library Kit媒体文件管理服务
  • UNI-APP 打包构建 APK
  • 【github pull request贡献】
  • 2025毕业季:如何用Java SpringBoot构建医疗就诊平台?掌握最新技术,开启医疗信息化大门
  • 关闭银河麒麟系统Qt Creator调试程序运行提示安全授权认证窗口
  • 可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效
  • 燃油车淘汰倒计时开始了?
  • Windows中jupyter开启远程连接(局域网)
  • OLED显示屏详解(IIC协议0.96寸 STM32)
  • MFCC C++实现与Python库可视化对比
  • 【解决方案】项目重构之如何使用 MySQL 替换原来的 MongoDB
  • 【Handler】Spring MVC控制器详解