PostgreSQL流複製搭建

来源:https://www.cnblogs.com/wy123/p/18296739
-Advertisement-
Play Games

PostgreSQL流複製 postgresql物理複製也叫流複製,通過將主節點上的是redo日誌(wal日誌)傳送到從節點來實現資料庫的同步的,參考下圖(侵刪),正如邏輯複製里提到的 1,物理複製數據傳遞的原理:傳遞的wal也即redo日誌,從節點上通過對物理日誌進行redo的方式來實現數據的還原 ...


 

PostgreSQL流複製

postgresql物理複製也叫流複製,通過將主節點上的是redo日誌(wal日誌)傳送到從節點來實現資料庫的同步的,參考下圖(侵刪),正如邏輯複製里提到的

1,物理複製數據傳遞的原理:傳遞的wal也即redo日誌,從節點上通過對物理日誌進行redo的方式來實現數據的還原,想對重新執行sql的邏輯日誌來說效率會更高。

2,物理複製數據傳遞的範圍:物理複製是實例級的,因此沒有所謂的邏輯複製的發佈(publication)~訂閱(subscribution)對象,整個搭建過程相對簡單不少。

 

主節點配置

主節點配置

###主節點
###複製同步模式
    synchronous_commit = on    # synchronization level; off, local, remote_write, remote_apply, or on

###主節點創建複製用戶
create user replica with replication login password 'A-Strong-Password';

###主節點pg_hba連接配置
    ###增加複製用戶以及從庫IP配置:
    host replication replica 192.168.1.2/32(從庫ip) md5

###重啟主節點
    systemctl restart postgresql9100

###主節點複製槽名稱確認(如果存在刪除)
    #查看複製槽信息
    SELECT * FROM pg_replication_slots;
    #請確保在刪除任何複製槽之前,該槽不再被任何複製消費者使用。
    select pg_drop_replication_slot('pgstandby_slave01');

主節點複製狀態監控

    select * from pg_stat_replication ;
    
    id 一個 WAL                  發送進程的進程 ID
    usesysid                    登錄到這個 WAL 發送進程的用戶的 OID
    usename                     登錄到這個 WAL 發送進程的用戶的名稱
    application_name            連接到這個 WAL 發送進程的應用的名稱
    client_addr                 連接到這個 WAL 發送進程的客戶端的 IP 地址。 如果這個域為空,它表示該客戶端通過伺服器機器上的一個Unix 套接字連接。
    client_hostname             連接上的客戶端的主機名,由一次對client_addr的逆向 DNS 查找報告。 這個域將只對 IP 連接非空,並且只有在 log_hostname被啟用時非空。
    client_port                 客戶端用來與這個 WAL 發送進程通訊的 TCP 埠號,如果使用 Unix 套接字則為-1
    backend_start               這個進程開始的時間,即客戶端是何時連接到這個WAL 發送進程的。
    backend_xmin                由hot_standby_feedback報告的這個後備機的xmin水平線。
    state                       當前的 WAL 發送進程狀態。 可能的值是:
                                  startup: 這個WAL發送器正在啟動。
                                  catchup: 這個WAL發送者連接的備用伺服器正在趕上主伺服器。
                                  streaming: 在其連接的備用伺服器趕上主伺服器之後,這個WAL發送方正在流化變化。
                                  backup: 這個WAL發送器正在發送一個備份。
                                  stopping: 這個WAL發送器正在停止。
                                
    sent_lsn                    在這個連接上發送的最後一個預寫式日誌的位置
    write_lsn                   被這個後備伺服器寫入到磁碟的最後一個預寫式日誌的位置
    flush_lsn                   被這個後備伺服器刷入到磁碟的最後一個預寫式日誌的位置
    replay_lsn                  被重放到這個後備伺服器上的資料庫中的最後一個預寫式日誌的位置
    write_lag                   從本地刷新近期的WAL與接收到此備用伺服器已寫入WAL的通知(但尚未刷新或應用它)之間的時間經過。 如果將此伺服器配置為同步備用伺服器,則可以使用此參數來衡量在提交時synchronous_commit級別remote_write所導致的延遲。
    flush_lag                   在本地刷寫近期的WAL與接收到後備伺服器已經寫入並且刷寫它(但還沒有應用)的通知之間流逝的時間。 如果這台伺服器被配置為一個同步後備,這可以用來計量在提交時synchronous_commit的級別on所導致的延遲。
    replay_lag                  在本地刷寫近期的WAL與接收到後備伺服器已經寫入它、刷寫它並且應用它的通知之間流逝的時間。 如果這台伺服器被配置為一個同步後備,這可以用來計量在提交時synchronous_commit的級別remote_apply所導致的延遲。
    sync_priority               在基於優先的同步複製中,這台後備伺服器被選為同步後備的優先順序。在基於規定數量的同步複製中,這個值沒有效果。
    sync_state                  這一臺後備伺服器的同步狀態。 可能的值是:
                                  async:         這台後備伺服器是非同步的。
                                  potential:     這台後備伺服器現在是非同步的,但可能在當前的同步後備失效時變成同步的。
                                  sync:          這台後備伺服器是同步的。
                                  quorum:       這台後備伺服器被當做規定數量後備伺服器的候選。           
    reply_time                     帶時區的時間戳,從備用伺服器收到的最後一條回覆信息的發送時間。
    

 

從節點配置

從節點配置

從節點通過pg_basebackup將主節點的數據備份到當前實例下,在啟動後基於pgbasebackup備份時生成的postgresql.auto.conf文件,啟動時會自動接入主節點進行複製。這一點其實與MySQL的克隆插件如出一轍(clone instance from clone_user@***.***.***.***:port identified by "password";),都是一個實例級的備份,都會保留備份/克隆完成時的主節點位點信息,以致於在啟動複製時無需關註位點值,只需要啟動複製即可。

###從節點
    ###關閉從節點實例服務

###備份從節點實例的數據文件
  mv data data_bak
  mkdir data

###備份遠程(主節點)數據到本地
  /usr/local/pgsql/bin/pg_basebackup -h 1.1.1.1 -p 8888 -U replica --password -R -P -v -C --slot=pgstandby_slave01 -D /usr/local/pgsql/pg_instance_9000/data/
  -R 說明會創建standby.signal文件,以及補充postgresql.auto.conf的內容
  -P 顯示備份進度
  -v 顯示更加詳細信息
  -C 同時創建複製槽
  --slot 指定複製槽的名字(一個備庫一個名字)
  -D 生成備庫的路徑


###備份完成後重新授權文件路徑許可權給postgres用戶
  #1,因為pg_basebackup備份到從節點當前實例的另外一個路徑,備份中包含了配置文件信息,當前配置文件中的信息還是主節點的,因此相關數據,日誌,歸檔文件的路徑要修改
  #2,postgres用戶並沒有pg_basebackup執行備份備份生成的文件的許可權,因此需要授權
  chown postgres.postgres -R /usr/local/pgsql/pg_instance_9000/
  chmod 700 -R /usr/local/pgsql/pg_instance_9000/

###從節點啟動實例
    然後用systemctl重啟從節點,複製自動開啟

從節點操作一鏡到底


從節點複製狀態監控

    
    select pg_is_wal_replay_paused()        #如果恢復被暫停,為真。
    select pg_wal_replay_pause()            #立即暫停恢復(僅限於超級用戶)。
    select pg_wal_replay_resume()            #如果恢復被暫停,重啟之(僅限於超級用戶)。

    
    select * from pg_stat_wal_receiver;
      pid                   WAL 接收器進程的進程 ID
      status                    WAL 接收器進程的活動狀態
      receive_start_lsn         WAL 接收器啟動時使用的第一個預寫日誌位置
      receive_start_tli         WAL 接收器啟動時使用的第一個時間線編號
      received_lsn              已經接收到並且已經被刷入磁碟的最後一個預寫日誌的位置,這個域的初始值是 WAL 接收器啟動時使用的第一個日誌位置
      received_tli              已經接收到並且已經被刷入磁碟的最後一個預寫日誌的時間線編號,這個域的初始值是 WAL 接收器啟動時使用的第一個日誌所在的時間線編號
      last_msg_send_time        從源頭 WAL 發送器接收到的最後一個消息的發送時間
      last_msg_receipt_time     從源頭 WAL 發送器接收到的最後一個消息的接收時間
      latest_end_lsn            報告給源頭 WAL 發送器的最後一個預寫日誌位置
      latest_end_time           報告給源頭 WAL 發送器最後一個預寫日誌位置的時間
      slot_name                 這個 WAL 接收器使用的複製槽的名稱
      conninfo                  這個 WAL 接收器使用的連接串,安全相關的域會被隱去。

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 筆者不才,過去一年中一半的時間在準備考研,博客園無心打理,顯得荒蕪了。到如今臨近畢業,找的工作實事求是的講也只是專業相關,並不完全對口,估計一段時間之內都沒法親自做開發了。雖然去的也是大公司,培養和各方面的保障都不錯,但是對於學了四年技術(慚愧地說學的不算精深)的筆者來說,畢業了做的不是技 ...
  • 2024/07/08 一、JDK下載 二、安裝與JDK開發環境配置(Windows) 三、安裝與JDK開發環境配置(Linux) 一、JDK下載與安裝 網址: https://www.oracle.com/java/technologies/downloads/#java8-windows Linu ...
  • 2024/07/15 1.問題描述 2.問題處理 3.其他問題 1.問題描述 昨天伺服器突然斷電,今天重啟後,網路出了些問題,具體情況如下: 能ping通本機IP ping不通網關 ping不通本網段其他IP地址 ping不通其他網段地址 2.問題處理 vi /etc/sysconfig/netwo ...
  • 近日,天翼雲TeleDB資料庫在中國信通院“可信資料庫”系列測試的賽道上,一次性跨越“分散式事務型資料庫基礎能力測試”與“性能測試”的雙重大關,以雲服務國家隊的卓越實力為資料庫領域樹立了新標桿。 ...
  • 主機配置說明: 192.168.136.101 mysql01 centos7.9 2C4G192.168.136.102 mysql02 centos7.9 2C4G防火牆主機互相放行 firewall-cmd --zone=public --permanent --add-rich-rule=' ...
  • FILE+POS 方式 GreatSQL 主從複製架構給主節點磁碟擴容 一、前提 在一套非常老的系統上,有一套GreatSQL主從集群(1主1從),主從複製採用的是FILE+POS方式複製,磁碟使用緊張需要擴容,只能在該台機器上添加更大的磁碟,將原數據盤替換,也沒有其他的機器資源替換。這套系統沒有V ...
  • 本文介紹了索引合併(Index Merge)包含的三種類型,即交集(intersection)、並集(union)和排序並集(sort-union),以及索引合併的實現原理、場景約束與通過案例驗證的優缺點。 ...
  • 亞信科技在Apache SeaTunnel的實踐分享 自我介紹 各位同學好,很榮幸通過Apache SeaTunnel社區和大家進行分享交流。我是來自亞信科技的潘志巨集,主要負責公司內部數據中台產品的開發。 本次分享的主題是Apache SeaTunnel在亞信科技的集成實踐,具體講我們的數據中台是如 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...