流復備機斷檔處理

文章目錄

  • 環境
  • 癥狀
  • 問題原因
  • 解決方案

環境

系統平臺:UOS(海光),UOS (飛騰),UOS(鯤鵬),UOS(龍芯),UOS (申威),銀河麒麟svs(X86_64),銀河麒麟(飛騰)svs,銀河麒麟(龍芯)svs,銀河麒麟 (X86_64),銀河麒麟 (飛騰),銀河麒麟 (鯤鵬),銀河麒麟 (海光),銀河麒麟 (龍芯),中科方德 (海光),中科方德 (X86_64),中科方德(海光)SVS,中科方德(兆芯),普華Linux(龍芯),銀河麒麟(龍芯)R系 V4,銀河麒麟(飛騰)U系 V4,中標麒麟 (鯤鵬),中標麒麟 (x86-64) 6
版本:9.0,6.0,5.1,5.6.5,14,13,12,11,10.4,5.6.4,5.6.3,5.6.1,4.5.9,4.5.8,4.5.7,4.5.6

癥狀

HGDB流復制環境,備庫與主庫數據不一致 數據庫報錯日志如下:

2024-05-28 14:17:18.707 CST,,,7820,,665576ee.1e8c,1,,2024-05-28 14:17:18 CST,,0,日志,00000,"在時間點: 0/BA000000 (時間安排6)啟動日志的流操作",,,,,,,,,""
2024-05-28 14:17:18.707 CST,,,7820,,665576ee.1e8c,2,,2024-05-28 14:17:18 CST,,0,致命錯誤,XX000,"無法從WAL流中獲得數據: 錯誤:  所要求的WAL段0000000600000000000000BA已經被刪除",,,,,,,,

問題原因

數據庫備節點所需wal日志已被刪除,導致備節點接收不到相應日志,流復制斷連

解決方案

流復制集群出現主備數據庫因斷檔導致數據不同步的問題,均可使用以下第一種方式解決,此解決方法若是數據量較大的情況下要選擇在夜間業務不繁忙時重做備庫,因為重做過程可能會對資源占用較大,對數據庫運行有一定影響。第二種方法適用于備庫所需wal日志已被刪除,但歸檔還在的情況,優先使用此種方式解決,兩種方案的具體解決步驟如下所示:

一、主節點沒有歸檔的情況

主備斷檔時間較久,備庫需要的wal日志,或者歸檔日志已經被刪除;

此情況只能選擇使用pg_basebackup重做備庫,示例步驟如下:

示例環境

IP數據目錄
主節點x.x.2.49/data/highgo/data
備節點x.x.2.50/data/highgo/data
  1. 停掉備節點數據庫
[root@HGDB-458 highgo]# pg_ctl stop
  1. 重命名備節點data目錄
[root@HGDB-458 highgo]# mv /data/highgo/data /data/highgo/databak
  1. 備節點使用pg_basebackup重新同步數據目錄
[root@HGDB-458 highgo]# pg_basebackup -h x.x.2.49 -p 5866 -U sysdba -D /data/highgo/data -Fp -P -Xs -R -v 
  1. 創建復制槽
    創建復制槽可以確保主從數據庫之間的數據一致性。主數據庫產生的 WAL 日志在從數據庫處理之前不會被刪除,但若出現備節點異常宕機或斷檔情況會導使主節點wal日志累積嚴重會導致磁盤爆滿,需要權衡其優缺點,并根據具體情況來選擇是否使用,具體配置步驟如下:

主節點:

[root@HGDB-458 highgo]# psql highgo sysdba
highgo=# select * from pg_create_physical_replication_slot('node_1');
highgo=# select * from pg_replication_slots;          # 檢查是否創建成功

備節點:

修改postgresql.auto.conf配置文件,添加復制槽相關配置:

vim /data/highgo/data/postgresql.auto.conf
## 添加以下參數值
primary_slot_name = 'node_1'
  1. 啟動備節點數據庫,檢查流復制狀態
[root@HGDB-458 highgo]# pg_ctl start
[root@HGDB-458 highgo]# psql -d highgo -U sysdba
highgo=# select * from pg_stat_replication ;pid  | usesysid | usename | application_name | client_addr  | client_hostname | client_port |         backend_start         | backend_xmin |   state   |  sent_lsn  | write_lsn  | fl
ush_lsn  | replay_lsn |    write_lag    |    flush_lag    |   replay_lag    | sync_priority | sync_state |          reply_time           
------+----------+---------+------------------+--------------+-----------------+-------------+-------------------------------+--------------+-----------+------------+------------+---
---------+------------+-----------------+-----------------+-----------------+---------------+------------+-------------------------------1651 |     9999 | sysdba  | walreceiver      | x.x.2.50 |                 |       58026 | 2024-05-28 11:08:15.038853+08 |              | streaming | 0/B9000000 | 0/B9000000 | 0/
B9000000 | 0/B9000000 | 00:00:00.101506 | 00:00:00.101506 | 00:00:00.101506 |             0 | async      | 2024-05-28 11:08:14.512443+08
(1 行記錄)

二、主節點有歸檔的情況

主備流復制斷檔,由于未配置復制槽,wal已被刪除,查詢數據庫日志,某wal日志文件已被刪除,但在主節點歸檔目錄中查詢到此wal日志文件

此情況可通過拷貝歸檔日志到備節點恢復流復制

具體示例步驟如下:

示例環境:

IP數據目錄歸檔目錄
主節點x.x.2.49/data/highgo/data/data/highgo/hgdbbak/archive
備節點x.x.2.50/data/highgo/data/data/highgo/hgdbbak/archive

1、通過數據庫日志查詢備節點所需wal日志# 相關文檔

vim  /data/highgo/data/hgdb_log/highgodb_28.csv
## 相關日志如下所示
2024-05-28 14:17:18.707 CST,,,7820,,665576ee.1e8c,1,,2024-05-28 14:17:18 CST,,0,日志,00000,"在時間點: 0/BA000000 (時間安排6)啟動日志的流操作",,,,,,,,,""
2024-05-28 14:17:18.707 CST,,,7820,,665576ee.1e8c,2,,2024-05-28 14:17:18 CST,,0,致命錯誤,XX000,"無法從WAL流中獲得數據: 錯誤:  所要求的WAL段0000000600000000000000BA已經被刪除",,,,,,,,

2、在主節點歸檔目錄中找到查詢出的wal日志

[root@HGDB-458 pg_wal]# cd /data/highgo/hgdbbak/archive
[root@HGDB-458 pg_wal]# ls -l 0000000600000000000000BA
-rw------- 1 root root 16777216 5月  28 13:30 0000000600000000000000BA

3、將此歸檔日志及之后的所有歸檔打包并拷貝到備節點中

[root@HGDB-458 archive]# cd /data/highgo/hgdbbak/archive
[root@HGDB-458 archive]# find . -type f -newermt '2024-05-28 13:30' -exec tar -zcvf hgdb_archive_bak0528.tar.gz {} +
# 將當前目錄下修改時間在 '2024-05-28 13:30' 及之后的所有文件打包為hgdb_archive_bak0528.tar.gz
[root@HGDB-458 archive]# scp hgdb_archive_bak0528.tar.gz root@x.x.2.50:/data/highgo/
# 拷貝到備節點/data/highgo/目錄下,也可以用其他方式

4、恢復wal日志(備節點操作)
解壓歸檔日志到數據目錄pg_wal文件夾下

[root@HGDB-458 archive]# tar -zxvf hgdb_archive_bak0528.tar.gz -C /data/highgo/data/pg_wal/

5、檢查流復制是否恢復
主節點執行

[root@HGDB-458 opt]# psql highgo sysdba
highgo=# select * from pg_stat_replication ;pid  | usesysid | usename | application_name | client_addr  | client_hostname | client_port |         backend_start         | backend_xmin |   state   |  sent_lsn  | write_lsn  | flush_ls
n  | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state |          reply_time           
------+----------+---------+------------------+--------------+-----------------+-------------+-------------------------------+--------------+-----------+------------+------------+---------
---+------------+-----------+-----------+------------+---------------+------------+-------------------------------3716 |     9999 | sysdba  | walreceiver      | x.x.2.50 |                 |       58918 | 2024-05-28 14:17:24.354824+08 |              | streaming | 0/C3000000 | 0/C3000000 | 0/C30000
00 | 0/C3000000 |           |           |            |             0 | async      | 2024-05-29 05:22:51.494491+08
(1 行記錄)
# 流復制已恢復正常

6、配置復制槽功能
創建復制槽可以確保主從數據庫之間的數據一致性。主數據庫產生的 WAL 日志在從數據庫處理之前不會被刪除,但若出現備節點異常宕機或斷檔情況會導使主節點wal日志累積嚴重會導致磁盤爆滿,需要權衡其優缺點,并根據具體情況來選擇是否使用,具體配置步驟如下:

主節點:

[root@HGDB-458 highgo]# psql highgo sysdba
highgo=# select * from pg_create_physical_replication_slot('node_1');
highgo=# select * from pg_replication_slots;          # 檢查是否創建成功

備節點:

修改postgresql.auto.conf配置文件,添加復制槽相關配置:

vim /data/highgo/data/postgresql.auto.conf
## 添加以下參數值
primary_slot_name = 'node_1'

配置完成后重啟備節點數據庫使修改生效

[root@HGDB-458 highgo]# pg_ctl restart

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

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

相關文章

【藍橋杯真題精講】第 16 屆 Python A 組(省賽)

文章目錄 T1 偏藍 (5/5)T2 IPv6 (0/5)T3 2025 圖形 (10/10)T4 最大數字 (10/10)T5 倒水 (15/15)T6 拼好數 (0/15)T7 登山 (20/20)T8 原料采購 (20/20) 更好的閱讀體驗 高速訪問:https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久鏈接&#xff1…

SpringBoot+Dubbo+Zookeeper實現分布式系統步驟

SpringBootDubboZookeeper實現分布式系統 一、分布式系統通俗解釋二、環境準備(詳細版)1. 軟件版本2. 安裝Zookeeper(單機模式) 三、完整項目結構(帶詳細注釋)四、手把手代碼實現步驟1:創建父工…

Spring的業務層,持久層,控制層的關系

在 Spring 框架中,控制層(Controller)、業務層(Service) 和 持久層(Repository/Mapper) 是分層架構的核心組成部分,職責分離明確,通過依賴注入(DI&#xff09…

css實現不確定內容的高度過渡

實現效果&#xff1a;鼠標懸浮按鈕&#xff0c;高度過渡出現如圖所示文本框 代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

計算機視覺與深度學習 | matlab實現ARIMA-WOA-CNN-LSTM時間序列預測(完整源碼和數據)

以下是一個基于MATLAB的ARIMA-WOA-CNN-LSTM時間序列預測框架。由于完整代碼較長,此處提供核心模塊和實現思路,完整源碼和數據可通過文末方式獲取。 1. 數據準備(示例數據) 使用MATLAB內置的航空乘客數據集: % 加載數據 data = readtable(airline-passengers.csv); data …

在 Excel 中使用東方仙盟軟件————仙盟創夢IDE

安裝插件 用仙盟創夢編寫插件代碼 源碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;namespace 東方仙盟.仙盟創夢IDE_招標系統 {public static class 仙盟創夢_招標專…

Sql刷題日志(day9)

一、筆試 1、limit offset&#xff1a;分頁查詢 SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET start_row; --跳過前 start_row 行&#xff0c;返回接下來的 number_of_rows 行。 2、lag、lead&#xff1a;查詢前后行數據 --lag函數用于訪問當…

C++面試3——const關鍵字的核心概念、典型場景和易錯陷阱

const關鍵字的核心概念、典型場景和易錯陷阱 一、const本質&#xff1a;類型系統的守護者 1. 與#define的本質差異 維度#defineconst編譯階段預處理替換編譯器類型檢查作用域無作用域&#xff08;全局污染&#xff09;遵循塊作用域調試可見性符號消失保留符號信息類型安全無類…

16-看門狗和RTC

一、獨立看門狗 1、獨立看門狗概述 在由單片機構成的微型計算機系統中&#xff0c;由于單片機的工作常常會受到來自外界電磁場的干擾&#xff0c;造成程序的跑飛&#xff08;不按照正常程序進行運行&#xff0c;如程序重啟&#xff0c;但是如果我們填加看門狗的技術&#xff0…

w~自動駕駛~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13269720 #FastOcc 推理更快、部署友好Occ算法來啦&#xff01; 在自動駕駛系統當中&#xff0c;感知任務是整個自駕系統中至關重要的組成部分。感知任務的主要目標是使自動駕駛車輛能夠理解和感知周圍的環境元素&…

怎么打包發布到npm?——從零到一的詳細指南

怎么打包發布到npm&#xff1f;——從零到一的詳細指南 目錄 怎么打包發布到npm&#xff1f;——從零到一的詳細指南一、準備工作1. 注冊 npm 賬號2. 安裝 Node.js 和 npm 二、初始化項目三、編寫你的代碼四、配置 package.json五、打包你的項目六、登錄 npm七、發布到 npm八、…

【C++ - 仿mudou庫one thread one loop式高并發服務器實現】

文章目錄 項目介紹項目模塊和服務器主要設計模式項目主要流程前置知識1.bind函數2.定時器任務TimerTask和時間輪思想TimerWheel3.正則表達式4.通用型容器Any類 服務器設計模式1&#xff09;單Reactor單線程模式2&#xff09;單Reactor多線程模式3&#xff09;多Reactor多線程模…

RISC-V 開發板 MUSE Pi Pro USB 測試(3.0 U盤,2.0 UVC攝像頭)

視頻講解&#xff1a; RISC-V 開發板 MUSE Pi Pro USB 測試&#xff08;3.0 U盤&#xff0c;2.0 UVC攝像頭&#xff09; 總共開發板有4個USB的A口&#xff0c;1個USB的TypeC口&#xff0c;我們插上兩個USB3.0的U盤和一個USB2.0的UVC攝像頭來進行測試 lsusb -tv 可以看到有3個US…

docker學習與使用(概念、鏡像、容器、數據卷、dockerfile等)

文章目錄 前言引入docker 簡介docker的應用場景docker的虛擬化技術VS虛擬機docker的優點docker架構Docker倉庫Docker鏡像linux操作系統的大致組成部分 Docker容器 docker安裝與啟動校驗版本移除舊的版本安裝依賴工具設置軟件源安裝docker驗證 配置鏡像加速器docker服務相關命令…

記錄一次服務器卡頓

一、服務器卡頓現象 服務用了一段時間后&#xff0c;突然很卡&#xff0c;發現在服務器上新建excel也很卡&#xff0c;發現服務器中病毒了&#xff0c;然后重新安裝了操作系統。重新安裝服務環境時&#xff0c;發現同時安裝pdf、tomcat時都很慢&#xff0c;只能一個安裝好了&am…

基于 Reactor 的 Java 高性能異步編程:響應式流與背壓詳解

本文將圍繞 Reactor 框架&#xff0c;深入剖析響應式流的核心機制&#xff0c;重點講解背壓&#xff08;Backpressure&#xff09;的實現原理與實際應用。通過理論結合實踐&#xff0c;希望幫助你真正掌握 Java 世界的響應式異步編程。 一、響應式編程與 Reactor 簡介 1.1 什么…

知識蒸餾實戰:用PyTorch和預訓練模型提升小模型性能

在深度學習的浪潮中&#xff0c;我們常常追求更大、更深、更復雜的模型以達到最先進的性能。然而&#xff0c;這些“龐然大物”般的模型往往伴隨著高昂的計算成本和緩慢的推理速度&#xff0c;使得它們難以部署在資源受限的環境中&#xff0c;如移動設備或邊緣計算平臺。知識蒸…

python:mysql全局大覽(保姆級教程)

本文目錄&#xff1a; 一、關于數據庫**二、sql語言分類**三、數據庫增刪改查操作**四、庫中表增刪改查操作**五、表中記錄插入**六、表約束**七、單表查詢**八、多表查詢**&#xff08;一&#xff09;外鍵約束**&#xff08;二&#xff09;連結查詢**1.交叉連接&#xff08;笛…

Android framework 問題記錄

一、休眠喚醒&#xff0c;很快熄屏 1.1 問題描述 機器休眠喚醒后&#xff0c;沒有按照約定的熄屏timeout 進行熄屏&#xff0c;很快就熄屏&#xff08;約2s~3s左右&#xff09; 1.2 原因分析&#xff1a; 抓取相關log&#xff0c;打印休眠背光 相關調用棧 //具體打印調用棧…

怎么利用JS根據坐標判斷構成單個多邊形是否合法

怎么利用JS根據坐標判斷構成單個多邊形是否合法 引言 在GIS(地理信息系統)、游戲開發、計算機圖形學等領域,判斷一組坐標點能否構成合法的簡單多邊形(Simple Polygon)是一個常見需求。合法多邊形需要滿足幾何學上的基本規則,本文將詳細介紹如何使用JavaScript實現這一判…