乾貨|上雲了,如何保障雲資料庫的高可用?
責任共擔模型
上雲後他經歷了什麼?
-
後端模組批次重啟,重啟時需要從資料庫載入業務資料,因併發重啟且該請求為慢SQL(幾十秒),雲資料庫負載快速升高,部分請求開始超時,然後請求失敗的模組無限重試,導致雲資料庫負載過大而崩潰,依賴該資料庫的其他業務也全部故障;
-
在短時間大量併發請求資料庫,高峰期併發達到2200左右,導致資料庫出現大量慢SQL,進而資料庫效能急劇下降,多個業務頁面展現變慢,效能退化明顯;
-
批次建立的任務,其執行時間完全一致,系統在瞬間對資料庫請求大量資料,連線數上漲,導致該資料庫上的所有業務均發生故障;
-
一次秒殺活動,系統請求量劇增,峰值流量達到平時流量的30倍,遠超之前預估流量。部分功能大量請求資料庫,佔滿資料庫連結,導致資料庫崩潰,進而引起系統無法正常執行
-
其購買的安全掃描產品,對介面進行了空引數請求,而介面對於空引數請求進行了資料庫的全表掃描,資料庫壓力飆升,陸續出現了慢SQL,資料庫CPU使用率持續在100%,導致該資料庫上的其他業務也全部故障;
-
某服務訪問資料庫錯誤導致響應下游請求合法使用者列表的結果為空值,下游模組直接將所有使用者的許可權全部刪除,導致系統完全不可用;
-
沒有專職DBA,雲資料庫的變更直接交由研發自己執行,研發多次資料庫修改出現異常,導致服務故障和資料丟失;
-
研發懷疑資料庫效能惡化,因此就重啟了資料庫,重啟期間,有一個模組請求資料庫失敗,就直接崩潰了;
-
在華南部署的一套業務系統,連到華北的資料庫,導致系統的響應時間長期居高不下,原因是一個頁面包含了非常多的資料庫請求,單個請求延時增加40ms,但幾十個請求序列執行,延時足足增加了2s以上。
故障原因分析
和京東雲平臺質量部的同學們對上述的Case進行分析後,我們總結了以下原因:
慢SQL
常態下系統中存在很多慢SQL,其執行時間少則15s,多則60s以上,如果慢SQL的執行次數增加,必然導致雲資料庫壓力上升,資料庫連線被佔用,處理其他請求的速率也慢了下來,直至連線數被耗光,導致服務異常,或者在連線數沒耗光之前,就因為資料庫CPU使用率100%而導致服務異常了。
高頻SQL
高頻SQL看似沒有問題,但延時一旦增加或者網路抖動,高頻SQL就可能變為較慢的SQL,基於其基礎足夠大,足以將系統拖垮。
複用
上面的多次故障都是因為某一個業務異常導致資料庫故障後,影響到了資料庫上的所有業務,這可能是源於期望降低運維複雜度,所以搞了一個最大規格資料庫的原因,確實,所有業務共用一個資料庫從管理角度肯定更簡單。
讀寫未分離
上述的Case,大部分都是讀請求導致的故障,突然間因為各種原因,導致請求上漲,而資料庫例項只有一個,沒有水平擴充套件,所以很容易被打掛。
資料庫連線數設定不合理
從故障描述中可以看到,隨便一個請求,都可以把資料庫的併發連線數打到2000+以上,進而導致其他業務不可用,沒有對不同業務進行合理的資源分配。
缺乏變更流程
研發直接到線上資料庫中修改資料,修改錯誤的原因有表的名字錯了,where條件錯了,或者是對較大的表結構進行調整,操作前不線上下進行測試驗證,操作前也不進行資料庫備份,很容易導致重大事故。
許可權管理混亂
多個CASE都是研發直接操作線上資料,這是許可權管理混亂的表現,也是很危險的事情。試想,人人都能修改資料庫,會有什麼後果大家應該都很清楚。如果修改了和交易資料相關的資料,或者是刪庫跑路,那就麻煩了。
不限流
雲平臺質量部的建議
TOP-N的SQL限流
-
慢SQL,也就是執行耗時的TOP-N
-
· SQL最佳化
-
· 合理設定資料庫連線數
-
· 執行耗時超過1s的SQL直接kill(對於部分場景可以進行自定義,如同步任務,寫SQL,重要性較高的SQL等)
-
· SQL問題較多的賬號進行緊急封禁
-
高頻SQL,也就是執行頻次的TOP-N
-
· 透過業務層的快取功能減少高頻SQL
在京東雲上,提供了效能最佳化的功能,可以查詢到所有的慢SQL,一定要加以使用
最後提一句,一定要想辦法在叢集上實現自動化kill慢SQL的功能,而不要等遇到出問題後挨個找人來看能不能殺這些SQL,那就太晚了,經驗值,一旦走到這個地步,故障時長起步40分鐘。
隔離部署
讀寫分離
京東雲的雲資料庫提供只讀例項,需要利用好該特性。簡單點就是新增幾個只讀例項將讀請求進行遷移,複雜點,可以將不同業務型別的讀請求分配到不同的只讀例項上,利用隔離的特性將故障控制在較小的範圍內,從而保障大部分功能的正常使用。
限流
資料備份
對資料庫的任何修改和調整,都需要進行備份,以免發生上述朋友的問題。京東雲提供了靈活的資料庫備份管理功能,需要好好的使用起來。這個地方的重要性,就不贅述了。
資料庫的監控
沒上雲之前,可能會有專門的DBA團隊來對資料庫進行監控,上雲後,如果沒有專職的DBA,那麼業務運維團隊就需要承擔起這個責任來。下面是從京東雲的監控中擷取的幾個關鍵指標,當然,還需要有對資料庫功能的監控。在這點上,雲平臺質量部有較為豐富的經驗,大家也可以參考《監控不到位,當機兩行淚》。
流程建立
三板斧
-
隔離部署&&讀寫分離,利用京東雲的能力,可以快速搞定,所以放第一位;
-
TOP-N的SQL,找出來容易,最佳化則需要研發配合,因此放第二位,可以先從那些執行時間幾十秒的SQL開始下手;
-
限流,或者在接入層進行,或者核心模組上進行開發,耗時略長,因此放第三位。
最後,感謝平臺質量部的多個小夥伴一起群策群力完成的上述方案。
參考文獻:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2664961/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 乾貨 | 京東雲資料庫RDS SQL Server高可用概述資料庫SQLServer
- 阿里雲Polardb國產資料庫高可用部署實踐阿里資料庫
- 技術乾貨 | 阿里雲資料庫PostgreSQL 13大版本揭秘阿里資料庫SQL
- GaussDB跨雲容災:實現跨地域的資料庫高可用能力資料庫
- 如何保障雲上資料安全?一文詳解雲原生全鏈路加密加密
- Jira 雲產品當機多日,業界熱議上雲如何保障資料安全
- 資料上雲,我推薦華為雲資料庫!資料庫
- 雲CRM系統如何保障企業資料安全?
- 如何在滴滴雲 DC2 上搭建高可用 MySQL 叢集MySql
- MySQL資料庫高可用方案MySql資料庫
- ES資料庫高可用配置資料庫
- 如何構建自己的雲資料庫?建立雲資料庫是否要收費?資料庫
- 深度乾貨 | 讓資料存得起 看得見,雲原生多模資料庫Lindorm技術解析資料庫ORM
- posgresql資料庫高可用方案-patroniSQL資料庫
- 雲棲深度乾貨 | 打造“雲邊一體化”,時序時空資料庫TSDB技術原理深度解密資料庫解密
- MQ系列8:資料儲存,訊息佇列的高可用保障MQ佇列
- 商用資料庫上雲的方式與存在的問題(上)資料庫
- 5、pgpool-II高可用性(一)資料庫的高可用性資料庫
- 軟考雲題庫上線了
- Payso×OceanBase:雲上拓新,開啟雲資料庫的智慧託管資料庫
- 如何提高阿里雲上應用的可用性(一)阿里
- 如何提高阿里雲上應用的可用性(二)阿里
- 資料庫高可用性簡史資料庫
- Centos 7 搭建MariaDB 資料庫高可用CentOS資料庫
- 乾貨 | 裝置快速上雲,輕鬆搞定裝置與雲端通訊
- 90後資料庫大咖,如何看雲資料庫的未來?資料庫
- 資料庫上雲教程(體驗有禮)資料庫
- Apache Kyuubi 高可用的雲原生實現Apache
- 如何使用 Terraform 在亞馬遜雲科技上建立 ShardingSphere Proxy 高可用叢集?ORM亞馬遜
- 天翼雲RDS資料庫如何修改資料庫引數資料庫
- 企業資料如何快速同步上雲?
- 高併發、高可用、彈性擴充套件,天翼雲護航企業雲上業務套件
- 雲災備、雲容災、雲備份、資料庫上雲、線下線上雲災備、災備有云等資料庫
- 【招聘資訊】騰訊雲資料庫高階專家資料庫
- 【乾貨】MySQL資料庫開發規範MySql資料庫
- 【虹科乾貨】關於JSON資料庫JSON資料庫
- MySQL資料庫架構——高可用演進MySql資料庫架構
- 如何構建高可用、高併發、高效能的雲原生容器網路?