PostgreSQL:邏輯復制與物理復制

🧑 博主簡介:CSDN博客專家歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編程高并發設計Springboot和微服務,熟悉LinuxESXI虛擬化以及云原生Docker和K8s,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea

在這里插入圖片描述


在這里插入圖片描述

PostgreSQL:邏輯復制與物理復制

在這里插入圖片描述

引言:數據洪流時代的生存法則

在數字化浪潮席卷全球的今天,數據已成為驅動企業發展的核心燃料。據統計,全球每天產生的數據量高達2.5EB(艾字節),相當于連續播放高清視頻超過5億小時。面對如此龐大的數據洪流,如何確保數據的高可用性、實時同步和靈活分發,已成為每個技術團隊必須直面的生存挑戰。

PostgreSQL作為全球最先進的開源關系型數據庫,其復制機制的設計哲學完美詮釋了 「多樣性生存」 的進化法則。物理復制如同DNA級的精確克隆,保障數據毫厘不差的完整傳承;邏輯復制則像智慧生物的主動適應,實現數據要素的精準重組。這兩種看似對立的復制策略,在PostgreSQL生態中實現了完美的辯證統一。

本文將帶您深入探索PostgreSQL復制的雙生宇宙:物理流復制(Physical Streaming Replication) 以二進制日志為紐帶,構建堅如磐石的數據堡壘;邏輯復制(Logical Replication) 則通過語義解析開辟靈活多變的數據通道。我們不僅會剖析WAL(Write-Ahead Logging)機制的精妙設計,還將通過最新PostgreSQL 16的實戰演示,手把手構建高可用集群,并解密邏輯復制的訂閱發布模型。更將深入探討復制沖突的量子糾纏現象,揭示數據同步背后的隱藏維度。


1. 流復制(Streaming Replication)原理剖析

1.1 WAL日志:數據復制的基因編碼

PostgreSQL的物理復制核心在于WAL(預寫式日志)機制,其工作原理可類比生物遺傳中的DNA復制:

-- 查看當前WAL寫入位置
SELECT pg_current_wal_insert_lsn();

每個數據修改操作都會先寫入WAL日志,確保故障恢復的原子性。WAL日志由多個16MB的段文件組成,命名規則為0000000100000001000000A1,前8位表示時間線ID,中間8位為邏輯日志號,最后8位是段文件序號。

1.2 流復制架構的三重維度

  1. 同步模式(Synchronous Mode)

    synchronous_commit = on
    synchronous_standby_names = 'standby1'
    
    • 強同步:主庫等待至少一個備庫確認
    • 潛在問題:網絡延遲影響事務響應時間
  2. 異步模式(Asynchronous Mode)

    synchronous_commit = off
    
    • 數據最終一致性
    • 適用跨地域部署場景
  3. 級聯復制(Cascading Replication)

    -- 級聯節點配置
    hot_standby = on
    wal_receiver_create_temp_slot = on
    

    架構拓撲:

    Master -> Standby1 -> Standby2\-> Standby3
    

1.3 復制協議進化史

版本特性改進
9.0異步流復制
9.1同步復制
9.4邏輯解碼API
10并行日志傳輸
13級聯復制增強
16邏輯復制并行應用

2. 主從集群搭建實戰(PostgreSQL 16)

2.1 環境拓撲規劃

流復制
級聯復制
Primary Node: 192.168.1.10
Standby1: 192.168.1.11
Standby2: 192.168.1.12

2.2 主庫配置關鍵步驟

wal_level = replica
max_wal_senders = 10
wal_keep_size = 10GB
hot_standby = on

創建復制專用用戶:

CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'SecurePass123!';

2.3 從庫初始化的黑科技

使用pg_basebackup進行并行初始化:

pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/16/main \-U replicator -v -P --wal-method=stream -R \--max-rate=100M --checkpoint=fast

配置恢復參數:

primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=SecurePass123!'
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'

3. 邏輯復制(Logical Replication)配置深度解析

3.1 邏輯復制的量子躍遷

與物理復制的差異對比:

| 特性         | 物理復制             | 邏輯復制           |
|--------------|----------------------|--------------------|
| 復制粒度     | 磁盤塊級別           | 事務邏輯級別       |
| 數據過濾     | 不可選               | 支持表級過濾       |
| 版本兼容性   | 主從版本必須一致     | 跨大版本兼容       |
| 數據結構變化 | 需要重新初始化       | 動態適應模式變更   |

3.2 發布訂閱模型實戰

創建發布節點:

CREATE PUBLICATION sales_pub FOR TABLE users, orders WITH (publish_via_partition_root = true);

訂閱端配置:

CREATE SUBSCRIPTION sales_sub CONNECTION 'host=primary.example.com dbname=prod user=repuser password=secret' PUBLICATION sales_pub WITH (copy_data = true, create_slot = false);

3.3 高級過濾與轉換

-- 條件過濾發布
CREATE PUBLICATION filtered_pub FOR TABLE logs WHERE (log_level IN ('ERROR', 'CRITICAL'));-- 列過濾
ALTER PUBLICATION sales_pub SET TABLE users (user_id, username), orders (order_id, total);

4. 復制沖突處理與監控藝術

4.1 沖突類型全圖譜

復制沖突
物理沖突
邏輯沖突
WAL應用沖突
事務ID回卷
唯一約束沖突
數據依賴死鎖

4.2 沖突自動處理策略

-- 配置沖突解決規則
ALTER SUBSCRIPTION sales_sub SET (run_on_alter='restart', apply_delay='5 min',conflict_resolution = 'apply_remote');

4.3 監控矩陣構建

實時監控面板配置:

-- 物理復制監控
SELECT * FROM pg_stat_replication;-- 邏輯復制診斷
SELECT subname, received_lsn, last_msg_send_time,pg_current_wal_lsn() - confirmed_flush_lsn AS replication_lag
FROM pg_stat_subscription;

結語:復制技術的進化論

PostgreSQL的復制體系就像生物進化的活化石,記錄著數據同步技術從簡單鏡像到智能分發的演化軌跡。在物理復制的確定性世界與邏輯復制的概率宇宙之間,我們看到了數據庫技術應對不同場景的智慧平衡。

隨著PostgreSQL 16引入的邏輯復制并行應用(max_logical_replication_workers)和雙向邏輯復制實驗特性,這場復制革命正開啟新的篇章。掌握這些技術,就如同獲得在數據洪流中沖浪的智慧槳板,助您在數字時代的浪潮中破浪前行。


參考文獻

  1. PostgreSQL Global Development Group. (2023). PostgreSQL 16 Documentation. https://www.postgresql.org/docs/16/
  2. K. S. Yadav. (2022). PostgreSQL High Performance Cookbook. Packt Publishing
  3. H. Fujii. (2021). Deep Dive into PostgreSQL WAL. PGCon Conference Proceedings
  4. M. Slot. (2020). Logical Replication Internals. 2ndQuadrant Technical Papers
  5. AWS Database Blog. (2023). Best Practices for PostgreSQL Logical Replication

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78793.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云COS與ZKmall 開源商城的存儲集成方案

ZKmall 開源商城與騰訊云對象存儲(COS)的集成,可通過云端資源托管、自動化數據同步、高性能存儲架構實現本地存儲負載降低與訪問效率提升。以下是基于搜索結果的集成路徑與核心優化點: 一、存儲架構升級:本地與云端協同…

HTML — 浮動

浮動 HTML浮動(Float)是一種CSS布局技術,通過float: left或float: right使元素脫離常規文檔流并向左/右對齊,常用于圖文混排或橫向排列內容。浮動元素會緊貼父容器或相鄰浮動元素的邊緣,但脫離文檔流后可能導致父容器高…

【軟件測試學習day1】軟件測試概念

前言 本篇學習,測試相關基礎概念、常見的開發模型測和測試模型,搞懂4個問題: 什么是需求什么是 bug什么是測試用例開發模型和測試模型 目錄 1. 什么是需求 1.1 為什么要有需求 1.2 測試人員眼里的需求 1.3 如何深入了解需求 2. 測試用例…

Flutter常用組件實踐

Flutter常用組件實踐 1、MaterialApp 和 Center(組件居中)2、Scaffold3、Container(容器)4、BoxDecoration(裝飾器)5、Column(縱向布局)及Icon(圖標)6、Column/Row(橫向/橫向布局)+CloseButton/BackButton/IconButton(簡單按鈕)7、Expanded和Flexible8、Stack和Po…

劉火良FreeRTOS內核實現與應用學習之7——任務延時列表

在《劉火良FreeRTOS內核實現與應用學習之6——多優先級》的基礎上:關鍵是添加了全局變量:xNextTaskUnblockTime ,與延時列表(xDelayedTaskList1、xDelayedTaskList2)來高效率的實現延時。 以前需要在掃描就緒列表中所…

圖像預處理-插值方法

一.插值方法 當我們對圖像進行縮放或旋轉等操作時,需要在新的像素位置上計算出對應的像素值。 而插值算法的作用就是根據已知的像素值來推測未知位置的像素值。 1.1 最近鄰插值 CV2.INTER_NEAREST 其為 warpAffine() 函數的參數 flags 的其一,表示最近…

智能配電保護:公共建筑安全的新 “防火墻”

安科瑞劉鴻鵬 摘要 隨著城市建筑體量的不斷增長和電氣設備的廣泛使用,現代建筑大樓的用電安全問題日益突出。傳統配電方式面臨監測盲區多、響應滯后、火災隱患難發現等問題。為提升建筑電氣系統的安全性和智能化水平,智慧用電系統應運而生。本文結合安…

如何解決DDoS攻擊問題 ?—專業解決方案深度分析

本文深入解析DDoS攻擊面臨的挑戰與解決策略,提供了一系列防御技術和實踐建議,幫助企業加強其網絡安全架構,有效防御DDoS攻擊。從攻擊的識別、防范措施到應急響應,為網絡安全工作者提供了詳細的操作指引。 DDoS攻擊概覽&#xff1a…

構建靈活的接口抽象層:支持多種后端數據存取的實戰指南

構建靈活的接口抽象層:支持多種后端數據存取的實戰指南 引言 在現代軟件開發中,數據存取成為業務邏輯的核心組成部分。然而,由于后端數據存儲方式的多樣性(如關系型數據庫、NoSQL數據庫和文件存儲),如何設計一套能夠適配多種后端數據存取的接口抽象層,成為技術團隊關注…

OpenCV 圖形API(23)圖像和通道合成

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 1.算法描述 在OpenCV的G-API模塊中,圖像和通道合成(composition)函數允許用戶對圖像進行復雜的操作,如合并…

帝國cms導航淘客新聞下載多功能網站源碼 二次元風格自適應附教程

一、本模板使用帝國cms7.5 utf8版本,二次元導航新聞下載工具淘客自適應響應式帝國cms模板。 1、網站后臺有3個系統模型,新聞系統模型,下載系統模型,導航系統模型,商城系統模型,可以根據自己的需求不同&…

本地部署大模型(ollama模式)

分享記錄一下本地部署大模型步驟。 大模型應用部署可以選擇 ollama 或者 LM Studio。本文介紹ollama本地部署 ollama官網為:https://ollama.com/ 進入官網,下載ollama。 ollama是一個模型管理工具和平臺,它提供了很多國內外常見的模型&…

C# virtual 和 abstract 詳解

簡介 在 C# 中,virtual 和 abstract 關鍵字都用于面向對象編程中的繼承和多態,它們主要用于方法、屬性和事件的定義,但在用法上存在一些重要的區別。 virtual 關鍵字 virtual 表示可重寫的方法,但可以提供默認實現,…

自動駕駛的數據集以及yolov8和yolop

項目背景 網絡全部是分割了沒有檢測。 自動駕駛的車道線和可行駛區域在數據集中的表示 自動駕駛系統中的車道線和可行駛區域的表示方式主要有以下幾種: 基于幾何模型:使用幾何模型來描述車道線和可行駛區域的形狀和位置,例如直線、曲線、多…

Oracle DROP、TRUNCATE 和 DELETE 原理

在 Oracle 11g 中,DROP、TRUNCATE 和 DELETE 是三種不同的數據清理操作,它們的底層原理和適用場景有顯著差異 1. DELETE 的原理 類型:DML(數據操作語言) 功能:逐行刪除表中符合條件的數據,保留…

PCIe 5.0光學SSD原型問世!

近日,Kioxia Corporation(鎧俠)、AIO Core Co., Ltd. 和 Kyocera Corporation(京瓷)聯合宣布成功開發了一款支持 PCIe 5.0 接口的光學 SSD 原型。該技術旨在通過光接口替換傳統的電接口,從而顯著增加計算設…

SQL 查詢中涉及的表及其作用說明

SQL 查詢中涉及的表及其作用說明: 涉及的數據庫表 表名別名/用途關聯關系dbo.s_orderSO(主表)存儲訂單主信息(訂單號、日期、客戶等)dbo.s_orderdetailSoD(訂單明細)通過 billid SO.billid 關…

C++學習之金融類安全傳輸平臺項目git

目錄 1.知識點概述 2.版本控制工具作用 3.git和SVN 4.git介紹 5.git安裝 6.工作區 暫存區 版本庫概念 7.本地文件添加到暫存區和提交到版本庫 8.文件的修改和還原 9.查看提交的歷史版本信息 10.版本差異比較 11.刪除文件 12.本地版本管理設置忽略目錄 13.遠程git倉…

【HCIP】GRE VPN實驗筆記

一、實驗拓撲 二、實驗要求 1、按照圖示配置IP地址 2、在R1和R3上配置默認路由使公網區域互通 3、在R1和R3上配置GRE VPN,使兩端私網能夠互相訪問,Tunnel口IP地址如圖 4、在R1和R3上配置RIPv2或者ospf或者靜態,來傳遞兩端私網路由 三、實…

大模型——Llama Stack快速入門 部署構建AI大模型指南

Llama Stack快速入門 部署構建AI大模型指南 介紹 Llama Stack 是一組標準化和有主見的接口,用于如何構建規范的工具鏈組件(微調、合成數據生成)和代理應用程序。我們希望這些接口能夠在整個生態系統中得到采用,這將有助于更輕松地實現互操作性。 Llama Stack 定義并標準化…