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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...