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。
二、InnoDB Cluster和InnoDB Replica Set
上面簡要介紹了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 Group Replication是分布式高可用MySQL數據庫,具有容錯、自動故障轉移、多節點更新、自動成員管理、沖突檢測/解決以及防止數據丟失功能。它是復制數據庫狀態機理論的實現,能夠保證整體寫入順序,保證一致性。集群范圍內最終一致,如果使用8.0.14之后的MySQL可以實現會話和全局范圍的讀寫強一致性。MySQL 5.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高可用性架構的內容,用戶可以根據不同的需求選擇適合自己的架構。