火山引擎雲資料庫說明
文件
什麼是雲資料庫 MySQL 版?
雲資料庫 MySQL 版是火山引擎基於開源資料庫 MySQL 打造的彈性、可靠的線上關係型資料庫服務。 MySQL 例項使用雲原生方式部署,結合本地 SSD 儲存型別,提供高效能讀寫能力;完全相容 MySQL 引擎,並提供例項管理、備份恢復、日誌管理、監控告警、資料遷移等全套解決方案,幫助企業簡化繁雜的資料庫管理和運維任務,使企業有更多的時間與資源聚焦於自己的核心業務。
高可用架構
MySQL 提供一主一備高可用架構的雙節點例項型別,在主節點出現故障後,會自動檢測並完成秒級主備切換,業務無感知,保障業務穩定性。 MySQL 提供備份能力,支援資料備份及日誌備份,支援按備份集恢復及按時間點恢復,保障資料可靠性。
讀寫分離架構
MySQL 提供一主多讀的讀寫分離架構型別,最多可支援掛載 10 個只讀節點,可根據業務需求輕鬆實現資料讀取能力的彈性擴充套件;支援讀寫分離,自動將讀請求轉發至只讀節點,分攤主節點資料讀取壓力,有效應對讀多寫少的業務場景。
核心元件
- 主節點:主節點( Primary Node )是 MySQL 例項對外提供服務的基礎節點,其他元件依賴主節點而發揮作用。在高可用架構下,主節點接收業務的全部讀寫請求;在讀寫分離架構下,主節點接收業務的全部寫請求和部分讀請求。主節點記錄資料修改日誌,並將日誌傳送至其他節點,實現節點間資料同步。
- 備節點:備節點( Secondary Node )是 MySQL 例項高可用架構的重要節點,保障例項的高可用性。備節點接收主節點傳送的日誌並進行重放,保證主備節點間資料一致;在主節點故障時,備節點可快速切換為主節點並對外提供服務,保障業務穩定執行。
- 只讀節點:只讀節點( Read-Only Node )是 MySQL 例項讀寫分離架構的重要節點,負責處理只讀請求。只讀節點接收備節點或主節點的日誌並進行重放,保證只讀節點與主備節點間資料一致;在讀多寫少的場景下,可接收並處理只讀請求,分攤主節點資料讀取壓力。
起因
火山引擎的雲資料庫 MySQL 版提供了高效可靠的服務,其一主一備高可用架構和完善的備份功能保障了資料庫的穩定性和資料安全性。
不過最近在使用該產品的時候遇到了一個問題,我們發現其中有節點的記憶體居高不下,記憶體只增不減,且只有其中一個節點的記憶體出現只增不減的情況,導致一直出現告警。問題發生在主節點上,記憶體佔用率飆升至 85% 以上,而備用節點的記憶體佔用率僅為 35%
分析
剛開始的時候鬧了點小烏龍,把記憶體看成 CPU,結果一直去找慢 SQL,後面發現加上索引後還是沒解決問題,不過好在也順手修復了一個潛在的慢 SQL
運維人員發現問題並未解決後,立即將備用節點切換為主節點,但主節點的記憶體佔用率依然持續升高,並未得到釋放。
我們聯絡火山引擎運維人員協助定位問題。對方透過檢視日誌發現,MySQL 的效能模式 (Performance Schema - PSM) 功能佔用了部分記憶體。
火山引擎運維人員建議我們將控制檯中的 performance_schema 和 loose_rds_performance_schema 引數設定為 OFF。
在將這兩個引數設定為 OFF 後,主節點的記憶體佔用率開始下降,最終恢復正常。
結論
這次事件讓我們瞭解到 PSM 功能雖然能夠提供強大的效能分析功能,但也可能佔用大量記憶體, 尤其是在長時間執行的情況下。