MySQL資料庫架構——高可用演進

darren__chan發表於2021-02-08
原創  徐軼韜  MySQL解決方案工程師 

MySQL發展至今,在高可用性方面不斷前進,從最初的非同步複製、半同步複製、群組複製,演進到現在的InnoDB Cluster和InnoDB Replica Set。在這一篇裡將說明各種高可用架構以及其適用的場景。


MySQL Replication

經典的主從複製,需要多個步驟手動進行配置。例如,使用者管理,備份恢復,配置複製......。MySQL僅提供了核心功能,整體架構需要使用者自己決定(大部分情況下需要定製)。在這種情況下,組織或者公司需要使用不同的技術元件,技術專家或DBA需要將大量的工作和時間投入到自動化處理。

MySQL InnoDB Cluster

2016年,MySQL推出了MySQL InnoDB Cluster,InnoDB Cluster主要包括 MySQL Group Replication(群組成員變化管理、網路分割槽控制、叢集範圍一致性......), MySQL Shell(強有力的介面,自動化整合全部的元件), MySQL Router(應用透明路由、負載均衡、自動應用故障轉移......)以及MySQL Clone(自動化部署成員,完全整合至InnoDB Cluster)。


MySQL InnoDB Replica Set

2020年,MySQL推出MySQL InnoDB Replica Set。該功能基於經典的主從複製,完全整合MySQL Shell 和 MySQL Router。


上面簡要介紹了MySQL高可用的過去和現在的解決方案,下面將詳細地介紹InnoDB Cluster和InnoDB Replica Set。

MySQL InnoDB Cluster是MySQL的一體化產品解決方案,具有高可用性和可伸縮性的特點,元件包括MySQL Server、MySQL Shell、MySQL Router和MySQL Group Replication。它的目標是提供一個MySQL一體化產品,全部的元件統一開發,整合全部的元件,並進行全棧測試。此外,簡單易用也是該產品的特色,使用一個統一的客戶端MySQL Shell統一進行叢集編排和管理。


MySQL Group Replication是分散式高可用MySQL資料庫,具有容錯、自動故障轉移、多節點更新、自動成員管理、衝突檢測/解決以及防止資料丟失功能。它是複製資料庫狀態機理論的實現,能夠保證整體寫入順序,保證一致性。叢集範圍內最終一致,如果使用8.0.14之後的MySQL可以實現會話和全域性範圍的讀寫強一致性。MySQL5.7版本將這個功能GA,並支援全部的MySQL平臺,包括Linux、Windows、Solaris、macOS 、FreeBSD等。


MySQL Group Replication可以用於如下場景:

一致性:資料零丟失(RPO=0)

  • 主要成員故障時,資料不會丟失。
  • 防止網路分割槽,透過大多數線上原則防止網路分割槽。

可用性:自動故障轉移

  • 自動選取主要成員
  • 自動控制網路分割槽

讀取擴充套件:

  • 按需增加/刪除節點
  • 使用流程控制處理延遲
  • 可配置一致性級別
    • 最終一致
    • 完整一致性

主主環境:

  • 同時寫入多個成員
    • 組內順序寫入(XCOM,PAXOS理論的實現)
    • 保證一致性
  • 寫入效能良好
    • 樂觀鎖(取件於工作負載)


MySQL Router

透明訪問資料庫的架構,在應用程式和後端的MySQL資料庫之間提供透明的路由連線。

  • 透明客戶端連線路由
    • 負責均衡
    • 應用程式連線故障轉移
    • 配置簡單
  • 無縫設計提供簡單的HA客戶端路由
    • 路由作為應用程式棧的一部分
  • 整合 InnoDB Cluster 和 InnoDB Replica Set
  • 2個TCP埠用於主節點和非主節點通訊


MySQL Shell

提供一個資料庫管理介面,可以執行MySQL相關的全部任務。

  • 支援多種語言:JavaScript、Python、SQL
  • 可編寫指令碼
  • 支援文件儲存和關係型模型
  • 公開完整的開發和管理API
  • 經典的MySQL協議和X協議

MySQL Shell簡單易用,可以透過它快速搭建InnoDB Cluster。

建立叢集

配置例項

新增例項

啟動MySQL Router

檢查叢集狀態

MySQL InnoDB Replica Set

  • 完全整合MySQL Router
  • 簡單易用的MySQL Shell
  • 配置、增加、移除成員
  • 自動化部署成員(Clone)
  • 主從複製架構
    • 手動進行切換和故障轉移
    • 非同步讀取擴充套件
    • 簡單的主從架構
    • 沒有硬體網路要求
      • 提供主節點的可用性

InnoDB Replica Set可以透過克隆自動部署新成員,利用MySQL Shell自動配置使用者和複製,手動配置、增加移除應用程式使用的伺服器,MySQL Router或其他代理,並且能夠整合MySQL Router的負載均衡能力。從而避免了以往配置主從複製時所需的繁瑣步驟。

以往需要使用額外的監控工具在每臺伺服器上去檢查拓撲狀態,使用者需要負責全部元件的所有配置,每一個設定都相當於定製化。使用InnoDB Replica Set可以透過MySQL Shell status()來檢視拓撲狀態,並且Shell會基於最佳實踐配置伺服器、路由和複製,以防止發生錯誤。

InnoDB Replica Set是一套標準的解決方案,由MySQL團隊提供支援和質量保證,這個方案的優點是簡單易用,初學者也可以快速掌握。

放個影片演示瞭解一下:

最後說明一下如何選擇不同的高可用架構。

首先要明確業務的需求,高可用性越高意味著成本也越高。可以從以下幾個方面去明確目標:

  • 恢復時間目標(RTO)
    • 服務從故障中恢復需要多長時間?
  • 恢復點目標(RPO)
    • 服務在故障中允許丟失的資料
  • 故障型別
    • 高可用:單一伺服器故障,網路分割槽
    • 容災:整體地域/網路故障
    • 人為錯誤:操作失誤,故意破壞
  • 程度
    • 0
    • 小時
    • ...

不同業務需求對應的架構


單一地域

  • RTO=小時
  • RPO=分
  • 一臺MySQL伺服器
    • 備份
    • 同步日誌







單一地域

  • RTO=小時
  • RPO=少於1秒
  • 一臺MySQL伺服器
    • 頻繁備份
    • 持續拉取二進位制日誌

   









單一地域

  • RTO=數分
  • RPO=少於1秒
  • MySQL InnoDB Replica Set













單一地域

  • RTO=數秒
  • RPO=0
  • MySQL InnoDB Cluster












多地域

  • 地域故障
  • RTO=數分
  • RPO=數秒
  • MySQL InnoDB Cluster
    • 配合使用非同步複製













多地域

  • 地域故障
  • RTO=數分
  • RPO=0
  • MySQL InnoDB Cluster 跨地域部署
    • 兩個地域的一致性級別設定為AFTER,或者三個地域,每個地域具有1-2個成員
    • 寫入的吞吐量受到影響,寫入事務需要保證事務同步


以上是關於MySQL高可用性架構的內容,使用者可以根據不同的需求選擇適合自己的架構。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29863023/viewspace-2756879/,如需轉載,請註明出處,否則將追究法律責任。

相關文章