課程目標___HTMLTAG_1__HTMLTAG_2___學完本課,您將:___HTMLTAG_3__HTMLTAG_4__HTMLTAG_5___理解為什麼高可用性 (HA) 對資料庫系統很重要SQL_HTMLTAG_6__HTMLTAG_7___ML_7_7_7___ML Patroni、Repmgr 和Pacemaker___HTMLTAG_10__HTMLTAG_11___了解 PostgreSQL 系統的整體架構HA___HTMLTAG_12__HTMLTAG_13__HTMLTAG_14__HTMLTAG_15___1。為什麼我們需要高可用性? ___HTMLTAG_16__HTMLTAG_17___1.1。單點故障 (SPOF) 問題___HTMLTAG_18__HTMLTAG_19___在具有單一伺服器的傳統資料庫系統中:___HTMLTAG_20__HTMLTAG_21__HTMLTAG_22__HTMLTAG_23__HTMLTAG_24___單點故障(SPOF)___HTMLTAG_25__HTMLTAG_26______HTMLTAG_27__HTMLTAG_28__HTMLTAG_29___後果資料庫伺服器崩潰錯誤:___HTMLTAG_30__HTMLTAG_31__HTM LTAG_32__HTMLTAG_33__HTMLTAG_34___停機:應用程式無法存取資料___HTMLTAG_36__HTMLTAG_37__HTMLTAG_38___收入損失___HTMLTAG _39___:每一分鐘的停機時間都會造成數百萬美元的損失洞___HTMLTAG_40__HTMLTAG_41__HTMLTAG_42___聲譽損失:使用者無法使用服務___HTMLTAG_44__HTML TAG_45__HTMLTAG_46___資料遺失:如果沒有及時備份___HTMLTAG_48__HTMLTAG_49__HTMLTAG_50___1.2.停機的常見原因
| 原因__HTMLTAG_57___ | 評分 | 影響 |
|---|---|---|
| 硬體錯誤(磁碟、RAM、CPU) | 30% | 高 |
| 網路錯誤 | 20% | 平均 |
| 軟體錯誤/bug__HTMLTAG_83___ | 25% | 高 |
| 維護有計畫__HTMLTAG_91___ | 15% | 可控 |
| 人為錯誤__HTMLTAG_99___ | 10% | 高 |
1.3。什麼是高可用性? ___HTMLTAG_109__HTMLTAG_110__HTMLTAG_111___高可用性 (HA) 是指系統在一個或多個元件發生故障時仍能保持連續運作的能力。 ___HTMLTAG_113__HTMLTAG_114__HTMLTAG_115___測量指標 HA:___HTMLTAG_116__HTMLTAG_117___ ___HTML標籤_142___
| 可用性 | 停機時間/年 | 停機時間/月 | 等級 |
|---|---|---|---|
| 99%(2 個 9) | 3.65 天 | 7.2 小時 | 低 |
| 99.9%(3 個九) | 8.76 小時 | 43.2 分鐘 | 平均 |
| 99.99%(4 個九) | 52.56 分鐘__HTMLTAG_157___ | 4.32 分鐘__HTMLTAG_159___ | 高 |
| 99.999%(5 個 9) | 5.26 分鐘 | 25.9 秒 | 非常高 |
1.4。 HA的好處____HTMLTAG_177__HTMLTAG_178__HTMLTAG_179___商業利益:___HTMLTAG_180__HTMLTAG_181__HTMLTAG_182__HTMLTAG_183___最大限度地減少停機時間與收入損失____HTMLTAG_184__HTMLTAG_185___提高系統可靠性____HTMLTAG_186__HTMLTAG_187___改善使用者經驗____HTMLTAG_188__HTMLTAG_189___滿足SLA(服務等級協定)____HTMLTAG_190__HTMLTAG_191__HTMLTAG_192__HTMLTAG_193___技術優勢:____HTMLTAG_194__HTMLTAG_195__HTMLTAG_196__HTMLTAG_194__HTMLTAG_195__HTMLTAG_196__HTMLTAG_194__HTMLTAG_195__HTMLTAG_196__HTMLTAG_197___當主問題轉移時自動9____零停機維護____HTMLTAG_200__HTMLTAG_201____載入讀取查詢___HTMLTAG_202__HTMLTAG_203___災難復原___HTMLTAG_204__HTMLTAG_205______20___HTMLTAG_206__HTMLTAG_20720202020___206__ PostgreSQL 的 HA 方法___HTMLTAG_210__HTMLTAG_211___2.1。日誌傳送(WAL 傳送)____HTMLTAG_212__HTMLTAG_213__HTMLTAG_214__HTMLTAG_215____日誌傳送(WAL傳送)___HTMLTAG_217__HTMLTAG_218__HTMLTAG_219__HTMLTAG_220__HTMLTAG_221___如何操作工作原理:___HTMLTAG_222__HTMLTAG_223__HTMLTAG_2244__HTMLTAG _225___主伺服器寫入WAL(預先寫入日誌)檔案___HTMLTAG_226__HTMLTAG_227___WAL檔案複製到備用伺服器___HTMLTAG_228__HTMLTAG_229___備用伺服器重播WAL以同步資料___HTMLTAG_230__HTM LTAG_231__HTMLTAG_232__HTMLTAG_233___優點:___HTMLTAG_234__HTMLTAG_235__HTMLTAG_236__HTMLTAG_237___簡單,易於設定___HTMLTAG_238__HTMLTAG_239 ___資源消耗少原始___HTMLTAG_240__HTMLTAG_241__HTMLTAG_242__HTMLTAG_243___缺點:___HTMLTAG_244__HTMLTAG_245__HTMLTAG_246__HTMLTAG_247___復原時間目標(RTO) 高(分鐘 →小時)___HTMLTAG_248__HTMLTAG_249___無自動故障轉移___HTMLTAG_250__HTMLTAG_251___可能會發生資料遺失__HTMLTAG_252__HTMLTAG_253_____HT MLTAG_255__HTMLTAG_256___2.2.流複製___HTMLTAG_257__HTMLTAG_258__HTMLTAG_259___工作原理:___HTMLTAG_260__HTMLTAG_261__HTMLTAG_262__HTMLTAG_263_____HTMLTAG_262__HTMLTAG_263_____ WAL 即時記錄到備用____HTMLTAG_264__HTMLTAG_265___備用立即應用更改___HTMLTAG_266__HTMLTAG_267___備用可以提供讀取查詢(熱備用)___HTMLTAG_270HTMLTAG_2681HTMLTAG_269______HTMLTAG_270HTML (WAL運費)___HTMLTAG_274__HTMLTAG_275__HTMLTAG_276__HTMLTAG_277__HTMLTAG_278___優點:___HTMLTAG_279__HTMLTAG_280__HTMLTAG_281__HTMLTAG_279__HTMLTAG_280__HTMLTAG_281__HTMLTAG_282_______t; 1秒)____HTMLTAG_283__HTMLTAG_284___熱備可以服務讀取查詢____HTMLTAG_285__HTMLTAG_286___同步模式減少資料遺失__HTMLTAG_287__HTMLTAG_288__HTMLTAG_289__HTMLTAG_290____ TMLTAG_291__HTMLTAG_292__HTMLTAG_293__HTMLTAG_294___仍需要手動故障轉移____HTMLTAG_295__HTMLTAG_296___需要外部自動化工具____HTMLTAG_297__HTMLTAG_298__HTMLTAG_2998__HT.2998__HT。邏輯複製___HTMLTAG_300__HTMLTAG_301__HTMLTAG_302___工作原理:___HTMLTAG_303__HTMLTAG_304__HTMLTAG_305__HT MLTAG_306___在邏輯層級複製(表、行)___HTMLTAG_307__HTMLTAG_308___啟用選擇性複製資料___HTMLTAG_309__HTMLTAG_310___發布者→訂閱者模型___HTMLTAG_311__HTMLTAG_312__HTMLTAG_313__HTMLTAG_314___優點:___HTMLTAG_315__HTMLTAG_316__HTMLTAG_317__HTMLTAG_318___不同 PostgreSQL版本之間的複製___HTMLTAG_319__HTMLTAG_320____選擇性複製(某些表僅)____HTMLTAG_321__HTMLTAG_322____可實現多主機(使用BDR)___HTMLTAG_323__HTMLTAG_324__HTMLTAG_325__HTMLTAG_326___缺點:____HTMLTAG_327__HTMLTAG_328__HTMLTAG_329__HTMLTAG_330___開銷高於物理開銷複製___HTMLTAG_329__HTMLTAG_330___開銷高於物理開銷複製___MLTAGMLTAG132___主要HA解決方案(通常用於資料分發)___HTMLTAG_333__HTMLTAG_334__HTMLTAG_335___2.4。共享儲存(SAN)

| 標準 | 帕特羅尼 | Repmgr | 起搏器 |
|---|---|---|---|
| 平均 | 低 | 高 | |
| 平均 | 低 | 非常高 | |
| Nhanh | Nhanh | 慢 | |
| ✅ 非常好 | ✅ 好 | ✅ 非常好 | |
| ✅ 是 | ❌ 否 | ❌ 否 | |
| ✅ 非常好 | ⚠️ 有限 | ❌ 否 | |
| ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | |
| ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | |
| DCS(etcd/Consul) | 無 | 無 | |
| 現代/雲 | 簡單設定 | 企業/綜合體 |
3.5。推薦___HTMLTAG_684__HTMLTAG_685__HTMLTAG_686___選擇Patroni,如果:___HTMLTAG_687__HTMLTAG_688__HTMLTAG_689__HTMLTAG_690___在雲端或Kubernetes上部署_______MLG_691690___ API___HTMLTAG_693__HTMLTAG_694___團隊擁有現代經驗DevOps 工具___HTMLTAG_695__HTMLTAG_696___✅ 這是目前最流行的選項___HTMLTAG_698__HTMLTAG_699___ML_MLTAG107070_MLTAG1_1] Repmgr if:___HTMLTAG_703__HTMLTAG_704__HTMLTAG_705__HTMLTAG_706___設定簡單,節點少(2-3)___HTMLTAG_707__HTMLTAG_708___不想依賴DCS___HTMLTAG_709__HTMLT AG_710___團隊熟悉PostgreSQL傳統工具____HTMLTAG_711__HTMLTAG_712__HTMLTAG_713__HTMLTAG_714___選擇起搏器,如果:___HTMLTAG_715__HTMLTAG_716__HTMLTAG_717__HTMLTAG_718___複雜的企業環境___HTMLTAG_719__HTMLTAG_720___Pacemaker基礎設施已可用___HTMLTAG_721__HTMLTAG_722___需要同時管理許多服務____HTMLTAG_723__HTMLTAG_724___可用共享儲存(SAN)___HTMLTAG_725__HTMLTAG_726__HTMLTAG_727__HTMLTAG_728___4。系統概述架構Patroni + etcd___HTMLTAG_729__HTMLTAG_730___4.1. 3節點叢集架構___HTMLTAG_731__HTMLTAG_732__HTMLTAG_733__HTMLTAG_734__HTMLTAG_735__HTMLTAG_733__HTMLTAG_734__HTMLTAG_735___系統概述架構Patroni +___ etcd___HTMLTAG_736__HTMLTAG_737__HTMLTAG_738__HTMLTAG_739___4.2.主要元件____HTMLTAG_740__HTMLTAG_741__HTMLTAG_742___PostgreSQL___HTMLTAG_743 __HTMLTAG_744__HTMLTAG_745__HTMLTAG_746___資料庫主引擎____HTMLTAG_747__HTMLTAG_748___一個節點為Leader(讀取/寫入)___HTMLTAG_749__HTMLTAG_750___其他節點為Replica (唯讀)___HTMLTAG_751__HTMLTAG_752___使用流複製來同步集___HTMLTAG_753__HTMLTAG_754__HTMLTAG_755__HTMLTAG_756___Patroni___HTMLTAG_757__HTMLTAGMLTAGMLTAG1758HTMLTAG157__HTMLTAGMLTAGMLTAG758生命週期管理____HTMLTAG_761__HTMLTAG_762____監控節點的運作狀況____HTMLTAG_763__HTMLTAG_764___執行自動故障轉移____HTMLTAG_765__HTMLTAG_766___公開 REST API (:8008) 來查詢叢集狀態____72____ML____ML_808) 來查詢讀取/寫入設定___HTMLTAG_769__HTMLTAG_770__HTMLTAG_771__HTMLTAG_772___etcd (DCS -分散式設定儲存)___HTMLTAG_773__HTMLTAG_774__HTMLTAG_775__HTMLTAG_776___儲存叢集狀態與設定___HTMLTAG_777__HTMLTA G_778___Leader選舉(決定哪個節點是Leader)___HTMLTAG_779__HTMLTAG_780___分散式鎖定機制___HTMLTAG_781__HTMLTAG_782__ _3個節點etcd形成法定人數(多數投票)____HTMLTAG_783__HTMLTAG_784__HTMLTAG_785__HTMLTAG_786___HAProxy(可選但建議)___ _HTMLTAG_787__HTMLTAG_788__HTMLTAG_789__HTMLTAG_790____負載平衡器___HTMLTAG_791__HTMLTAG_792___路由寫入流量→領導者___HTMLTAG_793__HTMLTAG_794___路由讀取流量→副本(循環)___HTMLTAG_795__HTMLTAG_796___健康檢查並在故障轉移時自動路由___HTMLTAG_797__HTMLTAG_798__HTMLTAG_799___4.3。活動流程___HTMLTAG_800__HTMLTAG_801__HTMLTAG_802___1。正常操作
1. Application gửi query → HAProxy
2. HAProxy kiểm tra health check
3. Route write → Leader, read → Replicas
4. Patroni trên mỗi node:
- Gửi heartbeat vào etcd mỗi 10s
- Update health status
- Maintain leader lease
2。領導失敗檢測
1. Node 1 (Leader) gặp sự cố → stop heartbeat
2. etcd phát hiện: leader lease expired (30s)
3. Patroni trên Node 2 và Node 3 nhận ra
4. Leader election được trigger
3。自動故障轉移過程
Timeline: 0s ──────────► 30s ──────► 45s ──────► 60s │ │ │ │ Leader dies etcd detects New leader Applications lease expire elected reconnect (Node 2)
Node 1: LEADER ──────► DOWN ──────────────────► STANDBY (sau khi recover) Node 2: REPLICA ─────────────────► LEADER ────► LEADER Node 3: REPLICA ──────────────────────────────► REPLICA
4。故障轉移後___HTMLTAG_815__HTMLTAG_816__CODEBLOCK_3__HTMLTAG_817___4.4。重要情境___HTMLTAG_818__HTMLTAG_819__HTMLTAG_820___情境 1:計畫切換___HTMLTAG_821__HTMLTAG_822__CODEBLOCK_4______HTMLTAG_823__HTMLTAG_824___場景2:裂腦預防措施____HTMLTAG_825__HTMLTAG_826__CODEBLOCK_5__HTMLTAG_827__HTMLTAG_828____場景3:節點恢復____HTMLTAG_829__HTMLTAG_830__CODEBLOCK_63155。時間軸配置(重要參數)__HTMLTAG_832__CODEBLOCK_7__HTMLTAG_833__HTMLTAG_834___說明:HTMLTAG_835__HTMLTAG_836__HTMLTAG_837__HTMLTAG_835__HTMLTAG_836__HTMLTAG_837__HTMLTAG_838__UttG_836__HTMLTAG_837__HTMLTAG_838__UttG_838__UttG____238__UttG____238_____每 30 秒租約一次,否則將被視為死亡___HTMLTAG_841__HTMLTAG_842__HTMLTAG_843___loop_wait: 10: Patroni 每 10 秒檢查一次運行狀況___HTMLTAG_845__HTMLTAG_8461846 20-30 秒___HTMLTAG_847__HTMLTAG_848__HTMLTAG_849__HTMLTAG_850___5。摘要____HTMLTAG_851__HTMLTAG_852___要點____HTMLTAG_853__HTMLTAG_854__HTMLTAG_855__HTMLTAG_856___生產系統必須具備高可用性__HTMLTAG_857,以減少停機時間和資料流遺失,複製停用+ 自動故障轉移 是 PostgreSQL 最受歡迎的 HA 方法____HTMLTAG_862__HTMLTAG_863__HTMLTAG_864___Patroni 是最佳選擇__HTMLTAG_865 对于大多数使用案例现代:____HTMLTAG_866__HTMLTAG_867____易于设置和维护____HTMLTAG_868__HTMLTAG_869____自动智能故障转移__HTMLTAG_870__HTMLTAG_871____REST强大的API__HT MLTAG_872__HTMLTAG_873____與雲端/K8s良好整合___HTMLTAG_874__HTMLTAG_875__HTMLTAG_876__HTMLTAG_877__HTMLTAG_878___3節點架構與Patroni + etcd提供:HTMLTAG_880__HTMLTAG_881___自動故障轉移(RTO < 30秒)HTMLTAG_882__HTMLTAG_883___同步複製實現零資料遺失___HTMLTAG_884__HTMLTAG_885___防止腦裂___HTMLTAG_886__HTMLTAG_887___讀取可擴充性工作負載___HTMLTAG_888__HTMLTAG889 90__HTMLTAG_891__HTMLTAG_892___作業____HTMLTAG_893__HTMLTAG_894__HTMLTAG_895___計算具有不同可用性等級(99%、99.9%、99.99%)的系統的停機時間___HTMLTAGTA_8961797622 HA 架構(節點數、資料中心、RTO/RPO 需求)___HTMLTAG_898__HTMLTAG_899___比較使用 HA 與接受業務停機之間的成本___HTMLTAG_900__HTMLTAG_901__HTMLTAG_902________2____MLTAG____30_______課程將深入探討_流式複製 - PostgreSQL HA的基礎:HTMLTAG_907__HTMLTAG_908__HTMLTAG_909___WAL的詳細運行機制___HTMLTAG_910__HTMLTAG_911____同步與異步複製____HTMLTAG_912__HTMLTAG_911____同步與異步複製____HTMLTAG_912__HTMLTAG_913___複製插槽____HTMLTAG_914__TAG______H TMLTAG_915___實驗室:手動複製設定____HTMLTAG_916__HTMLTAG_917__HTMLTAG_918__HTMLTAG_919___參考____HTMLTAG_920__HTMLTAG_921__HTMLTAG_922__HTMLTAG_920__HTMLTAG_921__HTMLTAG_922__HTMLTAGost_923_____官方文件 - 高可用性____HTMLTAG_924__HTMLTAG_925__HTMLTAG_926__HTMLTAG_927___Patroni GitHub 儲存庫____HTMLTAG_928__HTMLTAG_929__HTMLTAG_930__HTMLTAG_931_____文件___HTMLTAG_932__HTMLTAG_933__HTMLTAG_934__HTMLTAG_935___PostgreSQL 流複製___HTMLTAG_936__HTMLTAG_937__HTMLTAG_938