Chuyển đến nội dung chính

第 10 課:複製管理

配置同步/非同步副本、synchronous_mode、synchronous_node_count 並監控叢集中的複製延遲。

🔒 DevSecOps — 第 10 課 第 10 課:複製管理__HTMLTAG_53___

PostgreSQL 與 Patroni 和 PostgreSQL 高可用性etcd

第 3 部分:叢集管理

xdev.asia

目標____HTMLTAG_66__HTMLTAG_67___完成本課程後,您將:___HTMLTAG_68__HTMLTAG_69__HTMLTAG_70___了解 Patroni 叢集引導程序____HTMLTAG_71__HTMLTAG_72___在 3 個節點上首次啟動 3 個節點上啟動Patroni____HTMLTAG_73__HTMLTAG_74___使用下列指令檢查叢集狀態patrictl___HTMLTAG_75__HTMLTAG_76___驗證複製是否處於活動狀態__HTMLT AG_77__HTMLTAG_78___解決常見問題__HTMLTAG_79__HTMLTAG_80___測試基本故障轉移___HTMLTAG_81__HTMLTAG_82__HTMLTAG_83___1。預先引導清單___HTMLTAG_84__HTMLTAG_85___1.1。驗證先決條件___HTMLTAG_86__HTMLTAG_87___在啟動 Patroni 之前,驗證所有組件均已準備就緒:___HTMLTAG_88__CODEBLOCK_0__HTMLTAG_89___1.2。網路連線測試___HTMLTAG_90__HTMLTAG_91___驗證節點之間的連接:___HTMLTAG_92__CODEBLOCK_1__HTMLTAG_93___1.3。清理資料目錄___HTMLTAG_94__HTMLTAG_95___如果資料目錄不為空,則刪除到新的開始:

___CODEBLOCK_2__HTMLTAG_97___2。了解引導程式進程___HTMLTAG_98__HTMLTAG_99___2.1。引導流程___HTMLTAG_100__CODEBLOCK_3__HTMLTAG_101___2.2.競爭條件預防___HTMLTAG_102__HTMLTAG_103___Patroni 使用 DCS 來防止多個節點初始化__HTHTMLTAG_104__CODEBLOC104__CODEBLOC10141]G10____MLBLOC_102141]如果____MLBLOC個節點同時啟動:___HTMLTAG_108__HTMLTAG_109__HTMLTAG_110___更快的節點取得/初始化___HTMLTAG_1 12___密鑰___HTMLTAG_113__HTMLTAG_114___另一個節點看到密鑰已經存在→等待並從leader複製___HTMLTAG_115__HTMLTAG_116__HTMLTAG_117___3。引導叢集 - 一步一步___HTMLTAG_118__HTMLTAG_119___3.1。在節點 1 上啟動 Patroni___HTMLTAG_120__HTMLTAG_121__HTMLTAG_122___節點 1上的終端:___HTMLTAG_124__CODEBLOCK_5__HTMLTAG_125__HTMLTAG_126___預期日誌:___HTMLTAG_12 8__CODEBLOCK_6__HTMLTAG_129__HTMLTAG_130___驗證節點1:___HTMLTAG_132__CODEBLOCK_7__HTMLTAG_133___3.2。在 etcd 中驗證___HTMLTAG_134__CODEBLOCK_8__HTMLTAG_135___3.3。在節點 2 上啟動 Patroni___HTMLTAG_136__HTMLTAG_137__HTMLTAG_138___節點 2上的終端:___HTMLTAG_140__CODEBLOCK_9__HTMLTAG_141__HTMLTAG_142___預期日誌:___HTMLTAG_144 __CODEBLOCK_10__HTMLTAG_145__HTMLTAG_146___驗證節點2:___HTMLTAG_148__CODEBLOCK_11__HTMLTAG_149___3.4。在節點 3___HTMLTAG_150__HTMLTAG_151__HTMLTAG_152___節點 3 上啟動Patroni:_HTMLTAG_154__CODEBLOCK_12__HTMLTAG_155__HTMLTAG_156___預期日誌:與節點類似2.HTMLTA G_158__HTMLTAG_159__HTMLTAG_160___驗證節點3:HTMLTAG_162__CODEBLOCK_13__HTMLTAG_163___4。驗證叢集狀態___HTMLTAG_164__HTMLTAG_165___4.1。使用patronictl___HTMLTAG_166__CODEBLOCK_14__HTMLTAG_167__HTMLTAG_168___列意義:HTMLTAG_170__HTMLTAG_171__HTMLTAG_172__HTMLTAG_173 __HTMLTAG_175__HTMLTAG_176__HTMLTAG_177___主機:連接位址___HTMLTAG_179__HTMLTAG_180__HTMLTAG_181___角色:180__HTMLTAG_181___角色:18011821838383______LTAG_185___狀態:正在運作、串流、檔案復原中___HTMLTAG_187__HTMLTAG_188__HTMLTAG_189___TL:時間軸(所有內容均應相同)___HTMLTAGML_191HT滯後:複製滯後___HTMLTAG_195__HTMLTAG_196__HTMLTAG_197___4.2。檢查拓樸___HTMLTAG_198__CODEBLOCK_15__HTMLTAG_199___4.3。使用 REST API___HTMLTAG_200__CODEBLOCK_16__HTMLTAG_201___4.4。檢查來自 PostgreSQL 的複製____HTMLTAG_202__HTMLTAG_203__HTMLTAG_204___在主節點(節點1)上:___HTMLTAG_206__CODEBLOCK_17__HTMLTAG_207___輸出:

___CODEBLOCK_18__HTMLTAG_209__HTMLTAG_210___在副本節點(節點2、節點3):___HTMLTAG_212__CODEBLOCK_19__HTMLTAG_213___4.5。驗證複製延遲___HTMLTAG_214__CODEBLOCK_20__HTMLTAG_215___5。測試基本操作___HTMLTAG_216__HTMLTAG_217___5.1。創建測試數據庫和表___HTMLTAG_218__HTMLTAG_219__HTMLTAG_220___在主節點上(連接到任何節點,panictl 將路由到主節點):___HTMLTAG_222__CODEBLOCK_21__HTMLTAG_223___5.2。驗證複製___HTMLTAG_224__HTMLTAG_225__HTMLTAG_226___在複製時(節點2或節點3):

___CODEBLOCK_22__HTMLTAG_229___5.3。測試連續複製___HTMLTAG_230__HTMLTAG_231__HTMLTAG_232___終端 1(主 - 節點 1):

CODEBLOCK_23終端______HTMLTAG_235__HTMLTAG_234______CODEBLOCK_23終端______HTMLTAG_235__HTMLTAG_236 副本-節點2):___HTMLTAG_238__CODEBLOCK_24__HTMLTAG_239___資料應該每秒增加→複製工作! ___HTMLTAG_240__HTMLTAG_241___6。常見引導程式問題___HTMLTAG_242__HTMLTAG_243___6.1。問題:Patroni無法啟動___HTMLTAG_244__HTMLTAG_245__HTMLTAG_246___症狀:HTMLTAG_248__CODEBLOCK_25__HTMLTAG_249__HTMLTAG_250______檢查檢查____H TMLTAG_251:HTMLTAG_252__CODEBLOCK_26__HTMLTAG_253__HTMLTAG_254___常見原因和原因解決方案:HTMLTAG_256__HTMLTAG_257___A。設定檔語法錯誤___HTMLTAG_258__CODEBLOCK_27__HTMLTAG_259__HTMLTAG_260___解決方案:

CODEBLOCK_28__HTMLTAG_263___B。無法連接到 etcd___HTMLTAG_264__CODEBLOCK_29__HTMLTAG_265__HTMLTAG_266___解決方案:HTMLTAG_268__CODEBLOCK_30__HTMLTAG_269___C。資料目錄權限被拒絕____HTMLTAG_270__CODEBLOCK_31__HTMLTAG_271__HTMLTAG_272___解決方案:

CODEBLOCK_32__HTMLTAG_275___D。連接埠已在使用___HTMLTAG_276__CODEBLOCK_33__HTMLTAG_277__HTMLTAG_278___解決方案:HTMLTAG_280__CODEBLOCK_34__HTMLTAG_281___6.2。問題:叢集無法初始化___HTMLTAG_282__HTMLTAG_283__HTMLTAG_284___症狀:Patroni啟動但不初始化叢集.HTMLTAG_286__HTMLTAG_287__HTMLTAG_288___檢查日誌:HTMLTAG_290__CO DEBLOCK_35__HTMLTAG_291__HTMLTAG_292___常見原因:HTMLTAG_294__HTMLTAG_295___A。資料目錄不為空____HTMLTAG_296__CODEBLOCK_36______HTMLTAG_297__HTMLTAG_298___解決方案:

CODEBLOCK_37__HTMLTAG_301___B。初始化卡在 etcd 中的金鑰

INFO: Another node is initializing

解決方案n:HTMLTAG_306__CODEBLOCK_39__HTMLTAG_307___6.3。問題:副本無法從主副本___HTMLTAG_308__HTMLTAG_309__HTMLTAG_310___症狀:節點 2 或 3 無法進行基本備份。 HTMLTAG_312__HTMLTAG_313__HTMLTAG_314___檢查日誌:HTMLTAG_316__CODEBLOCK_40__HTMLTAG_317__HTMLTAG_318__________HTHTMLTAGMLTAG_317__HTMLTAG_318__________HT網路連線____HTMLTAG_322__CODEBLOCK_41__HTMLTAG_323__HTMLTAG_324___解決方案:_HTMLTAG_326__CODEBLOCK_42__HTMLTAG_327___B。驗證失敗___HTMLTAG_328__CODEBLOCK_43__HTMLTAG_329__HTMLTAG_330___解決方案:

__CODEBLOCK_44__HTMLTAG_333___C。空間不足____HTMLTAG_334__CODEBLOCK_45__HTMLTAG_335__HTMLTAG_336___解決方案:HTMLTAG_338__CODEBLOCK_46__HTMLTAG_339___6.4。問題:節點具有不同的時間軸___HTMLTAG_340__HTMLTAG_341__HTMLTAG_342___症狀:HTMLTAG_344__CODEBLOCK_4 7__HTMLTAG_345__HTMLTAG_346___解決方案:HTMLTAG_348__CODEBLOCK_48__HTMLTAG_349___7。啟用開機自動啟動___HTMLTAG_350__CODEBLOCK_49__HTMLTAG_351___8。基本叢集管理___HTMLTAG_352__HTMLTAG_353___8.1。重新啟動節點___HTMLTAG_354__CODEBLOCK_50__HTMLTAG_355___8.2。重新載入配置___HTMLTAG_356__CODEBLOCK_51__HTMLTAG_357___8.3。暫停/恢復自動故障轉移____HTMLTAG_358__CODEBLOCK_52__HTMLTAG_359___8.4。顯示配置___HTMLTAG_360__CODEBLOCK_53__HTMLTAG_361___9。測試自動故障轉移(可選)HTMLTAG_362__HTMLTAG_363__HTMLTAG_364___警告:僅在非生產環境中測試! HTMLTAG_366__HTMLTAG_367___9.1。模擬主要故障___HTMLTAG_368__CODEBLOCK_54__HTMLTAG_369___9.2。監視叢集故障轉移___HTMLTAG_370__CODEBLOCK_55__HTMLTAG_371___9.3。驗證新的主___HTMLTAG_372__CODEBLOCK_56__HTMLTAG_373__HTMLTAG_374___注意:時間軸從 1 → 2 增加(表示發生故障轉移).HTMLTAG_376__HTMLTAG_377_____HTMLTAG4。重新加入舊的主要___HTMLTAG_378__CODEBLOCK_57__HTMLTAG_379___10。實驗練習____HTMLTAG_380__HTMLTAG_381___實驗 1:引導與驗證___HTMLTAG_382__HTMLTAG_383__HTMLTAG_384___任務: 1. ✅ 依序在 3 個節點上啟動 Patroni 1. ✅ 21583 13 個節點上。驗證群集清單3. ✅ 檢查複製狀態 4. ✅ 建立測試資料庫並驗證資料複製____HTMLTAG_388__HTMLTAG_389___實驗室 2:測試複製延遲___HTMLTAG_390__HTMLTAG_391_____TAG_391__41390_____391__1301391__501391____行插入主資料庫 2. 測量副本上的複製延遲 3. 監控pg_stat_replication____HTMLTAG_394__HTMLTAG_395___實驗 3:模擬節點故障___HTMLTAG_396__HTMLTAG_397__HTMLTAG_398___HTMLTAG_396__HTMLTAG_397__HTMLTAG_398___HTMLTAG_396__HTMLTAG_397__HTMLTAG_398___HTMLTAG_396__HTMLTAG_397__HTMLTAG_398___HTMLTAG_396__HTMLTAG_397__HTMLTAG_398___HTMLTAG_396__HTMLTA1.G____398 2________驗證新的主節點是否適應 4. 重新加入舊的主節點 5. 驗證所有節點健康___HTMLTAG_400__HTMLTAG_401___11。摘要___HTMLTAG_402__HTMLTAG_403___關鍵要點___HTMLTAG_404__HTMLTAG_405✅ Bootstrap___HTMLTAG 407:第一個節點初始化,其他節點複製___HTMLTAG_408__HTMLTAG_409✅ Leader選舉:自動,基於DCS___HTMLTAG_412__HTMLTAG_413✅ 複製:透過 pg_basebackup自動設定__HTMLTAG_416__HTMLTAG_417✅ patronictl:主要管理工具___HTMLTAG_420__HTMLTAG_421✅ HTMLTAG_420__HTMLTAG_421✅ ML_U420_____HT2G20____20_____0]]] API、pg_stat_replication檢查___HTMLTAG_424__HTMLTAG_425✅ 故障轉移___HTMLTAG_427 :主要時自動失敗___HTMLTAG_428__HTMLTAG_429___檢查清單稍後引導___HTMLTAG_430__HTMLTAG_431__HTMLTAG_432 所有3 個節點顯示在patronictl 列表___HTMLTAG_434__HTMLTAG_435__HTMLTAG_436___1 領導者,25 副本___HTMLTAG_437__HTMLTAG_438 所有節點時間軸相同____437__HT40U438]所有延遲節點時間軸相同 MB____HTMLTAG_441__HTMLTAG_442 測試資料複製到所有節點___HTMLTAG_443__HTMLTAG_444 REST API 在所有節點上回應節點___HTMLTAG_445__HTMLTAG_446___Patroni 啟用自動啟動___MLTAG_445__HTMLTAG_446___Patroni 啟用自動啟動___ML4ML叢集運作良好___HTMLTAG_449__HTMLTAG_450__HTMLTAG_451___目前架構____HTMLTAG_452__CODEBLOCK_58__HTMLTAG_453___準備課程10____HTMLTAG_454__HTMLTAG_455___第 10課程將深入研究複製管理:HTMLTAG_456__HTMLTAG_457__HTMLTAG_458___同步與非同步複製___HTMLTAG_459__HTMLTAG_460___設定同步模式 HTMLTAG_461__HTMLTAG_462___監控複製滯後___HTMLTAG_463__HTMLTAG_464____處理複製問題___HTMLTAG_465__HTMLTAG_466