達夢數據庫系列—28. 主備集群高可用測試

目錄

監視器關閉

監視器啟動,Detach備庫

主備正常,手動switchover

主庫故障,自動switchover

主庫故障,手動Takeover

主庫故障,備庫強制takeover

主庫重啟

備庫故障

公網連接異常

主庫私網異常

備庫私網異常

主備私網同時異常


1.Primary/Standby 模式的庫啟動后,自動進入 Mount 狀態,需要啟動守護進程才會open。

2.Standby數據庫mount后,DW才會啟動主庫。

3.如果不停守護進程,數據庫stop以后,DW會把進程自動拉起。INST_AUTO_RESTART = 0可以關閉自動拉起功能。

監視器關閉

首先關閉監視器

關閉主庫DW02,DW01(備庫)仍然是standby,因為沒有啟動監視器,不會進行switchover。

這個時候,再啟動監視器,會把DW01切換為primary嗎?不會。

把主庫DW02啟動,守護組恢復正常。

監視器啟動,Detach備庫

login

detach database?xx

stop dmwatcher database?xx

startup dmwatcher database?xx

attach database?xx

備庫DW02 Detach

退出重新進入監視器,show

備庫的歸檔狀態是INVALID

此時我們關閉DW01(主庫)

可以看到DW02還是standby,detach備庫后,備庫不會進行接管。

把DW02加入到DW里

對應的主庫DW01是停掉的狀態,不允許備庫DW02加入。

啟動DW01

測試一下,是否會數據同步。

發現數據從DW01可以正常同步到DW02,難道DW02自動加入DW組了?

啟動主庫后,備庫自動加入了。

主備正常,手動switchover

假定Choose Switchover選出的可切換備庫是 B,Switchover 切換流程如下:

  1. 通知主備庫守護進程,切換為 Switchover 狀態
  2. 通知主庫(A) Mount
  3. 實時或 MPP 主備環境下,通知備庫(B) APPLY KEEP_RLOG_PKG
  4. 通知備庫(B) Mount
  5. 通知(A) 切換為 Standby 模式
  6. MPP 主備環境下,通知(A)修改 MPP_INI 內存值為 0
  7. 通知(B) 切換為 Primary 模式
  8. 通知(B) 修改所有歸檔目標的歸檔狀態為無效
  9. MPP 主備需要通知各組活動主庫更新 dmmpp.ctl 文件,參考后文說明
  10. 通知新的備庫(A) Open
  11. 通知新的主庫(B) Open
  12. 通知主備庫守護進程切換為 Open 狀態
  13. 清理所有守護進程上記錄的監視器命令執行信息

需要登錄,輸入login

登錄成功后,執行switchover

主庫故障,自動switchover

檢測到主庫故障的情況下,會自動進行switchover

殺掉DB進程

檢測到故障,自動切換

主庫故障,手動Takeover

以備庫 B 為例,接管的執行流程包括:

  1. 監視器通知守護進程(B)切換為 Takeover 狀態
  2. 實時主備或 MPP 主備環境下,通知備庫(B) APPLY KEEP_RLOG_PKG
  3. 通知備庫(B) Mount
  4. 通知(B) 切換為 Primary 模式
  5. 通知(B) 修改到所有歸檔目標的歸檔狀態為 Invalid
  6. MPP 主備需要通知活動主庫更新 dmmpp.ctl 文件
  7. 通知新的主庫(B) Open
  8. 通知守護進程(B)切換為 Open 狀態

主庫故障的情況下,自動切換失敗,可以手動進行切換。

dmwatcher的參數DW_MODE設為MANUAL進行測試:

殺掉DM02進程

可見DW02判斷為故障,Dw的狀態由open變為startup

show看一下狀態

主庫DW02狀態為error,備庫DW01狀態正常,DW01沒有自動切換,我們讓備庫DW01接管:

takeover?DW01

此時,備庫DW01切換成了primary。可以看到此時DW02仍然是primary。

再開啟DW02,看實例一DW日志:

DW02由Primary轉變為standby,DW的狀態也變為了startup

后面,DW和DW02狀態會變為OPEN,然后進行DW02的恢復

主庫故障,備庫強制takeover

與正常 takeover 命令相比,強制接管時系統不會對故障主庫與待接管備庫的數據一致性進行檢查,若接管前主備庫的數據是一致的,則強制接管與正常 takeover 效果相同,接管成功后不會出現數據丟失的情況,故障主庫重啟后也能正常加回集群。若接管前主備庫的數據不一致,則強制接管后會存在數據丟失,故障主庫重啟后無法加回集群,出現集群分裂。

典型的主備庫數據一致的場景:REALTIME 歸檔模式,主庫故障前到備庫的歸檔狀態為 VALID。由于 REALTIME 歸檔流程為主庫先發送日志到備庫,等待收到所有備庫的響應消息后再將該日志寫入本地的聯機日志文件中,所以在主庫故障后其聯機日志文件中已經寫入的日志一定不會備庫收到的日志更多。這種場景下執行強制接管后不會出現數據丟失,故障主庫重啟后也能夠作為備庫重新加入集群,不會發生集群分裂。

強制接管的條件包括:

  1. 不存在活動主庫
  2. 備庫守護進程處于 Open 或 Startup 狀態
  3. 備庫實例運行正常
  4. 備庫是 Standby 模式
  5. 備庫處于 Open 或 Mount 狀態
  6. 備庫的 KLSN 必須是所有備庫中最大的
  7. 備庫守護進程控制文件必須有效

以下繼續做測試,殺掉DW01(主庫):

強制接管DW02

由于是realtime同步,強制接管前數據是一致的,所以并沒有發生守護組分裂。

開啟DW01

過程同前面takeover介紹的一樣,DW01狀態為standby,狀態恢復正常。

主庫重啟

主庫重啟,守護進程狀態會先變成startup,然后再open,Open 成功后繼續作為主庫

備庫故障

手動切換模式

Kill DW01(備庫)

先看監視器,DW01 STANDBY故障

看到DW狀態由OPEN變為startup

從故障節點的DW日志里,也能看到:

Dw接收不到實例的TCP連接信息,狀態置為startup

但是DW02的狀態也會發生變化

守護進程(DW02)先由OPEN到STARTUP,再變為FAILOVER,然后OPEN

實例先SUSPEND,再OPEN

公網連接異常

影響:用戶無法連接數據庫

如果主庫公網無法連接,可以手動switchover,將備庫切換為主庫使用。

主庫私網異常

  1. 主備庫之間無法通信
  2. 守護進程間無法進行通信

3.REALTIME無法歸檔

4.守護進程無法與主庫進行通信

主庫掛起后,連接主庫的會話會掛住不切換新主庫,設置參數SESS_FREE_IN_SUSPEND配置的時間,會話會自動斷開老主庫。

關掉主庫私網網卡

守護進程間無法進行通信,DW02的守護進程為ERROR

DW01的歸檔為unkonwn,DW02的歸檔為invalid

守護進程無法與主庫進行通信

監視器檢測到Primary實例故障,開始執行takeover自動接管

使用備庫DW01自動接管成功

重新開啟DW02的網卡

守護進程DW02恢復了OPEN,但是實例DW02還是異常

原來是實例當掉了,我們重新開啟DW02實例

實例恢復正常,DW恢復正常。

備庫私網異常

1.主備庫之間無法通信

2.守護進程間無法進行通信

3.REALTIME歸檔失敗

4.守護進程無法與備庫進行通信

停掉DW02(備庫)的網卡

首先守護進程間無法通信,,DW02的守護進程為ERROR

主庫DW01的歸檔為unkonwn,備庫DW02的歸檔為unkonwn

守護進程無法與主庫進行通信,檢測到備庫故障

主庫實例狀態suspend->open,wstatus狀態failover->open

重新開啟DW02的網卡

DW02的守護進程狀態由none變為open

主備私網同時異常

兩節點同時關閉網卡

守護進程與DW01和DW02間無法通信

守護進程間無法通信

實例之間無法通信

監視器與守護進程無法通信

主備庫不會切換,主庫狀態變為suspend

打開兩節點網卡

守護進程:

DW01 ??none-> failover->open

DW02 none->open

實例:

DW01 suspend->open

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

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

相關文章

實現給Nginx的指定網站開啟basic認證——http基本認證

一、問題描述 目前我們配置的網站內容都是沒有限制,可以讓任何人打開瀏覽器都能夠訪問,這樣就會存在一個問題(可能會存在一些惡意訪問的用戶進行惡意操作,直接訪問到我們的敏感后臺路徑進行操作,風險就會很大&#xff…

云原生周刊:Score 成為 CNCF 沙箱項目|2024.7.15

開源項目 Trident Trident 是由 NetApp 維護的全面支持的開源項目。它從頭開始設計,旨在通過行業標準接口(如容器存儲接口 CSI)幫助您滿足容器化應用程序對持久性存儲的需求。 Monokle Monokle 通過提供用于編寫 YAML 清單、驗證策略和管…

淺談微服務

技術方法論:向微服務邁進: 理論:“軟件研發中任何一項技術、方法、架構都不可能是銀彈"—Fred Brooks 哪些場景適合用微服務,呢些不適用?(微服務存在哪些理解誤區、應用前提) 一些被驗證過…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

題意:為什么我無法通過API訪問GPT-4模型,盡管GPT-3.5模型可以工作? 問題背景: Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】

持續學習&持續更新中… 守破離 【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】 Message Queue 消息隊列異步處理應用解耦流量控制 消息中間件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker圖…

Django prefetch_related()方法

prefetch_related的作用 prefetch_related()是 Django ORM 中用于優化查詢性能的另一個重要方法,尤其在處理多對多(ManyToMany)關系和反向關系時非常有用。它允許你預加載相關對象,從而減少數據庫查詢次數。 1,創建應…

【香橙派】Orange pi AIpro開發板使用之一鍵部署springboot項目

前言 最近有幸收到一份新款 OrangePi AIpro 開發板,之前手里也搗鼓過一些板子,這次嘗試從零開始部署一個簡單的后端服務。OrangePi AIpro 采用昇騰AI技術路線,具體為4核64位處理器AI處理器,可配16GB內存容量,各種復雜應…

數字化賦能,加油小程序讓出行更便捷高效

在快節奏的現代生活中,每一次加油不僅是車輛續航的必要步驟,也成為了人們日常生活中不可或缺的一環。隨著科技的飛速發展,傳統加油模式正逐步向智能化、便捷化轉型,其中,加油小程序作為這股浪潮中的佼佼者,…

el-date-picker手動輸入日期,通過設置開始時間和階段自動填寫結束時間

需求&#xff1a;根據開始時間&#xff0c;通過填寫階段時長&#xff0c;自動填寫結束時間&#xff0c;同時開始時間和節數時間可以手動輸入 代碼如下&#xff1a; <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…

B樹與B+樹的區別

B樹和B樹都是用于數據庫和文件系統的平衡樹數據結構&#xff0c;但它們有一些顯著的區別&#xff1a; 節點結構&#xff1a; B樹&#xff1a;每個節點存儲數據和指向子節點的指針。葉子節點也包含數據。 B樹&#xff1a;內部節點只存儲索引值&#xff0c;不存儲實際數據。所有…

yolov5 上手

0 介紹 YOLO(You Only Look Once)是一種流行的物體檢測和圖像分割模型&#xff0c;由華盛頓大學的約瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;開發。YOLO 于 2015 年推出&#xff0c;因其高速度和高精確度而迅速受到…

人工智能算法工程師(中級)課程13-神經網絡的優化與設計之梯度問題及優化與代碼詳解

大家好&#xff0c;我是微學AI&#xff0c;今天給大家介紹一下人工智能算法工程師(中級)課程13-神經網絡的優化與設計之梯度問題及優化與代碼詳解。 文章目錄 一、引言二、梯度問題1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解決方案 2. 梯度消失梯度消失的概念梯度…

vue2中父組件向子組件傳值不更新視圖問題解決

1. 由于父組件更新了props里面的值, 但是子組件第一次接收后再修改沒有監聽到. 父組件修改值的時候使用this$set解決問題. 在 Vue 2 中&#xff0c;this.$set 通常用于更新數組中的特定元素。如果你想更新整個數組&#xff0c;可以直接賦值一個新的數組&#xff0c;或者你可以…

powerdesigner導出表數據庫設計文檔excel

1、連接數據庫&#xff0c;導出表結構的sql腳本 2、打開powerdesigner&#xff0c;生成項目空間表 sql腳本用第一步的腳本 3、用script腳本生成excel 腳本信息 Option Explicit Dim rowsNum rowsNum 0 -------------------------------------------------------------…

CV12_ONNX轉RKNN模型(諦聽盒子)

暫時簡單整理一下&#xff1a; 1.在邊緣設備上配置相關環境。 2.配置完成后&#xff0c;獲取模型中間的輸入輸出結果&#xff0c;保存為npy格式。 3.將onnx格式的模型&#xff0c;以及中間輸入輸出文件傳送到邊緣設備上。 4.編寫一個python文件用于轉換模型格式&#xff0c…

Git---git本地配置commit_template提交模板,規范開發

如何在Git中配置Commit Template以規范開發 在軟件開發過程中&#xff0c;規范化的提交信息&#xff08;commit messages&#xff09;對于項目的可維護性和協作效率至關重要。Git 提供了配置 commit template 的功能&#xff0c;允許開發者預設一個模板&#xff0c;用于在提交…

[iOS]內存分區

[iOS]內存分區 文章目錄 [iOS]內存分區五大分區棧區堆區全局區常量區代碼區驗證內存使用注意事項總結 函數棧堆棧溢出棧的作用 參考博客 在iOS中&#xff0c;內存主要分為棧區、堆區、全局區、常量區、代碼區五大區域 還記得OC是C的超類 所以C的內存分區也是一樣的 iOS系統中&a…

51單片機STC89C52RC——19.1 SG90舵機(伺服電機)

目的/效果 獨立按鍵K1&#xff0c;K2 實現加舵機減角度增減&#xff0c;LCD1602顯示舵機轉角度數&#xff08;上電默認90度&#xff09; 一&#xff0c;STC單片機模塊 二&#xff0c;SG90舵機 2.1 簡介 舵機只是我們通俗的叫法&#xff0c;它的本質是一個伺服電機&#xf…

react 案例的實現

先看一下如下效果 效果 這是一個 簡單的 效果 左邊是用戶名進行登錄 右邊是一個答題還有遮罩 相信大家還有剛剛創建好的 react 腳手架了&#xff0c;沒有的話可以運行以下命令 creact-react-app 項目名稱 把項目名稱四個字 改成 自己想要的一個名字 最好是英文的在 App.js中去…

python xpath常用代碼功能

1、從文件中讀取html內容&#xff0c;然后xpath加載 with open(FilePath, r,encodingutf8) as file:html file.read() tree etree.HTML(html) 2、基本定位語法 / 從根節點開始選取 /html/div/span // 從任意節點開始選取 //input . 選取當前節點 .…