MGR複製架構+自動化運維平臺,汽車之家MySQL高可用建設實踐

来源:https://www.cnblogs.com/88223100/archive/2023/01/30/AutoHome-MySQL-High-Availability-Construction-Practice.html
-Advertisement-
Play Games

MySQL具有開源免費,運維簡單,性能好等優點,是在汽車之家使用最多的一種資料庫。資料庫作為應用的後端存儲,承擔著數據持久化存儲的功能,是應用可以正常對外提供服務的關鍵組件,資料庫的高可用非常重要。 相對於成熟的商業資料庫軟體,開源的 MySQL高可用需要使用者自己進行設計和研發,本文介紹汽車... ...


前言

 

MySQL具有開源免費,運維簡單,性能好等優點,是在汽車之家使用最多的一種資料庫。資料庫作為應用的後端存儲,承擔著數據持久化存儲的功能,是應用可以正常對外提供服務的關鍵組件,資料庫的高可用非常重要。

 

相對於成熟的商業資料庫軟體,開源的 MySQL高可用需要使用者自己進行設計和研發,本文介紹汽車之家MySQL高可用架構發展歷程,建設實踐情況。

 

一、高可用定義及度量

 

在介紹MySQL高可用前,先介紹下高可用定義及關鍵度量指標RPO,RTO。

 

高可用定義:高可用(High Availability,縮寫HA)是一個IT術語,指系統無中斷執行其功能的能力,代表系統的可用性程度。

 

高可用度量指標:

 

  • RPO:RPO(Recovery Point Obejective,恢復點目標)是指業務系統所允許的在災難過程中的最大數據丟失量,用來衡量容災系統的數據冗餘備份能力。

 

圖片

圖1 RPO計算

 

  • RTO :RTO(Recovery Time Objective,恢復時間目標)是指信息系統從災難狀態恢復到可運行狀態所需的時間,用來衡量容災系統的業務恢復能力。

 

圖片

圖2 RTO計算

 

二、MySQL高可用問題

 

1、問題定義

 

MySQL高可用問題:如果MySQL資料庫發生宕機故障,是否可以實現資料庫服務不中斷或者故障快速恢復。即實現數據不丟失(RPO)並且故障恢復時間短(RTO)?

 

2、MySQL主從架構

 

故障是難免的,一個可靠的系統需要數據冗餘來避免單點故障帶來的數據丟失,提升可靠性。

 

雖然MySQL有MySQL NDB Cluster, PXC(Percona XtraDB Cluster)等集群架構,但是MySQL主從架構因為結構簡單且成本較低,是最使用廣泛的MySQL架構。MySQL主從架構通過主從複製技術來實現主庫的數據冗餘,當主庫故障可以把服務切換到從庫,來避免資料庫服務中斷。

 

MySQL主從架構的高可用:

 

圖片

圖3 MySQL主從架構

 

一個典型場景如圖3,MySQL使用主從架構對外提供服務。圖中主庫Master有三個從庫分別是slave1,slave2,slave3,若是主庫故障,為了恢復DB服務,可以選擇一個從庫(slave1)成為新主庫繼續對外提供服務,原slave2,slave3改同步新主庫的數據。

 

3、高可用問題挑戰

 

MySQL是一個有數據有狀態的服務,通常主庫寫入數據,通過非同步複製二進位日誌到從庫執行,來實現主從庫的數據一致性。當故障發生時,如何實現數據不丟失,各節點數據一致,業務影響小會有一定難度及挑戰。

 

1)挑戰1:如何實現主庫突然故障,主庫數據不丟失?

 

假想主庫故障突然發生,從庫還沒有接收到主庫的二進位日誌,此時就有可能引起數據丟失

 

2)挑戰2:如何實現故障後新主從庫架構的搭建及數據一致性保證?

 

多個從庫對主庫進行複製,有可能各從庫對主庫複製有不同的時延,各從庫之間如何實現數據一致,各節點如何搭建成新的主從架構?

 

3)挑戰3:如何實現故障自動Failover及業務影響最小?

 

若DB故障發生,如何讓業務影響最小,甚至無感知,需要"自動故障轉移"來支持。

 

4、高可用相關工作

 

一個真實線上可以使用的MySQL高可用架構需要考慮如下工作。

 

圖片

圖4 MySQL高可用相關工作

 

三、常見的MySQL高可用架構

 

本節介紹幾種常見的MySQL高可用架構。

 

1、主從複製+VIP

 

圖片

圖5 主從複製+VIP

 

2、主從複製+MHA

 

MHA(Master High Availability) 是一種相對成熟的MySQL高可用解決方案。MHA是獨立於MySQL的第三方軟體,當主庫故障發生後,MHA會盡最大努力來保證數據不丟失(若原主庫可以登錄,MHA會傳輸二進位日誌到從庫節點並執行),並且完成新主從架構的搭建。

 

圖片

圖6 主從複製+MHA

 

3、MGR複製 + Proxy

 

MySQL Group Replication(簡稱MGR)是MySQL5.7版本出現的新特性,提供高可用、高擴展、高可靠,強一致性的MySQL集群服務。MGR架構由若幹個節點共同組成一個複製組,一個事務的提交,必須經過組內大多數節點(N / 2 + 1)決議並通過,才能得以提交,解決了傳統複製可能的數據不一致的問題。

 

MGR+Proxy高可用架構:雖然MGR可以在主節點故障選舉出新主,但應用層常不能自動修改配置中DB地址為新主IP。可使用MGR+Proxy來實現主節點故障時應用無感應自動切換到新的主節點。

 

圖片

圖7 MGR複製+Proxy

 

四、汽車之家MySQL高可用實踐

 

1、汽車之家MySQL高可用發展歷程

 

汽車之家MySQL高可用發展可以分成三個階段:

 

1)主從複製+VIP 時代:2016年前使用傳統主從複製+VIP/DNS,主庫故障通過VIP自動漂移,DBA手動調用腳本進行主從架構切換及功能變數名稱切換。

 

2)主從複製+MHA時代:2016年MHA在汽車之家核心業務開始使用,實現了核心業務的故障自動切換,但是此時並沒有自動化高可用平臺來管理資料庫。

 

3)MGR+自動化平臺時代:2020年MGR高可用架構在汽車之家推廣應用,MGR基於paxos協議的組複製技術保證各節點數據一致性,簡化了主庫故障切換工作。另外資料庫自動化高可用平臺上線,讓汽車之家的MySQL高可用水平得到很大提升。

 

圖片

圖8 汽車之家MySQL高可用發展歷程

 

2、汽車之家MySQL高可用運維平臺

 

1)高可用運維平臺架構

 

一個高可用系統需要解決兩個問題:如何發現故障?故障發生後如何處理故障?具體到MySQL資料庫的高可用,因為故障恢復細節和MySQL架構有較強關聯,設計者需要重點考慮三個方面:

 

  • 故障發現:如何發生準確,快速的發現DB故障,不誤報錯報。

 

  • 高可用架構:如何選擇合適的MySQL高可用架構來處理故障的數據一致性問題。

 

  • 故障自動化Failover:如何實現"自動故障轉移"來保證DB服務的快速恢復?

 

圖片

圖9 MySQL高可用設計

 

汽車之家MySQL高可用實現架構圖:

 

圖片

圖10 MySQL高可用實現架構圖

 

汽車之家MySQL高可用由MGR複製架構+監控平臺+自動化運維平臺三者來實現。

 

  • MGR高可用架構:MGR使用基於paxos協議的組複製,主庫的事務在從庫中會至少存在一份記錄,從而保證故障時數據不會丟失。並且 MGR主庫故障會自動選擇新主庫,進一步減化了主庫故障切換工作。

 

  • 監控平臺:基於Prometheus的監控平臺對DB狀態實時監控,若是發現主庫故障將調用資料庫運維平臺相關API。

 

  • 自動化運維平臺:運維平臺中的高可用模塊負責故障的自動Failover。高可用模塊會確認DB狀態,故障恢復時新DB集群搭建,修改原來主庫功能變數名稱後端DB IP等工作,最終實現了主庫故障對應用影響的儘量透明。

 

圖10的高可用架構圖,描述了經典環境下MySQL高可用實現。監控平臺持續探測主庫狀態,若連續探測3次均發現主庫故障,則調用運維平臺的高可用模塊API,發起主庫切換,可以在2-3分鐘內完成FailOver。

 

2)容器佈署MySQL高可用

 

汽車之家有大量MySQL跑在k8S容器上,容器佈署MySQL的高可用實現和物理機佈署類似,主要區別是容器MySQL的主庫故障監控由MySQL-Operator負責,而不是外部監控平臺。

 

圖片

圖11 容器佈署MySQL高可用實現

 

容器MySQL-Operator每10秒探測一次MGR主庫狀態,若連續探測3次均為故障,將調用運維平臺的高可用模塊API,發起主庫切換,通常可以在1-2分鐘內完成FailOver。

 

3、未來規劃

 

汽車之家MySQL高可用建設,未來計劃做如下工作:

 

1)網路抖動或大事務有時會引起MySQL集群的主從庫自動切換,計划進一步調優改進。

 

2)資料庫故障智能自愈是一個較熱的方向,計劃研究並應用實踐提升資料庫的穩定性。

 

五、結語

 

本文介紹了常見的MySQL高可用架構,並重點介紹了汽車之家MySQL高可用體系發展歷程,高可用建設實踐情況。

 

汽車之家MySQL高可用使用MGR複製架構+自動化運維平臺,實現了物理機及容器MySQL主庫故障的自動Failover。若MySQL主庫down,可以在2-3分鐘內完成主庫的故障切換,資料庫服務的穩定性得到了很好保障。

 

作者|​陶會祥

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/AutoHome-MySQL-High-Availability-Construction-Practice.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 背景 get 與 post 的區別 所有介面都用 post 請求? 背景 最近在逛知乎的時候發現一個有趣的問題:公司規定所有介面都用 post 請求,這是為什麼? 看到這個問題的時候其實我也挺有感觸的,因為我也曾經這樣問過我自己。在上上一家公司的時候接到一個項目是從零開始搭建一個微服務,當時就 ...
  • 前言 .NET6 開始,.NET Croe API 項目取消了 Startup.cs 文件,在 Program.cs 文件的 Main 函數中完成服務的註冊和中間件管道的管理。但當我們項目引入更多包的時候,Program.cs 文件也會看起來很臃腫。 而且,我們不只會有一個後端項目,為了方便快速創建 ...
  • 一:背景 1. 講故事 年前遇到了好幾例托管堆被損壞的案例,有些運氣好一些,從被破壞的托管堆記憶體現場能觀測出大概是什麼問題,但更多的情況下是無法做出準確判斷的,原因就在於生成的dump是第二現場,借用之前文章的一張圖,大家可以理解一下。 為了幫助更多受此問題困擾的朋友,這篇來整理一下如何 快狠準 的 ...
  • 1.背景知識 CRLF用來表示文本換行的方式 ,CR是回車的意思,對應 \r ;LF 是換行的意思,對應 \n Windows 換行符是 \r\n Unix 換行是 \n 如果一個將要在Linux伺服器上使用的文件,比如某個配置文件,在windows電腦打開,編輯過,那麼文件每一行末尾會多有\r 。 ...
  • 一:什麼是乙太網: 乙太網是一種區域網技術,乙太網是一種用於數據鏈路層的協議類型。 二:乙太網的由來: 乙太網是美國施樂(Xerox)公司的Palo Alto研究中心(簡稱為PARC)於1975年研製成功的。那時乙太網是一種基帶匯流排區域網,當時的數據率為2.94 Mbit/s。乙太網用無源電纜作為總 ...
  • 網卡 網卡,又叫做通信適配器(adapter),早期的時候是插在機箱裡面的網路介面板,這種介面板又稱為網路介面卡NIC(Network Interface Card)或簡稱為“網卡”。因為後面集成到主板上了,所以又叫做通信適配器(adapter)。 網卡的作用: 電腦和外界區域網進行連接是通過通信 ...
  • 一、背景 二、概述 三、下線流程與原理 1.讀取待下線節點列表 2.判斷節點下線模式 3.設置超時時間 4.RMNode 處理下線事件 5.監控節點的狀態、下線節點 四、相關的Yarn集群配置 一、背景 接手部門 Hadoop 和 Flink 集群半年了,一直忙著上雲的事兒,很少有時間去琢磨運維的事 ...
  • 前言 SELinux是什麼 安全增強型 Linux(SELinux)是一種採用安全架構的 Linux® 系統,它能夠讓管理員更好地管控哪些人可以訪問系統。它最初是作為 Linux 內核的一系列補丁,由美國國家安全局(NSA)利用 Linux 安全模塊(LSM)開發而成。 SELinux工作原理 SE ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...