MySQL高可用架構(gòu)選型,言簡意賅全是要點
MySQL發(fā)展至今,在高可用性方面不斷前進(jìn),從最初的異步復(fù)制、半同步復(fù)制、群組復(fù)制,演進(jìn)到現(xiàn)在的InnoDB Cluster和InnoDB Replica Set。本文將說明各種高可用架構(gòu)以及適用場景。
一 、高可用架構(gòu)
MySQL Replication
經(jīng)典的主從復(fù)制,需要多個步驟手動進(jìn)行配置。例如,用戶管理、備份恢復(fù)、配置復(fù)制......MySQL僅提供了核心功能,整體架構(gòu)需要用戶自己決定(大部分情況下需要定制)。在這種情況下,組織或者公司需要使用不同的技術(shù)組件,技術(shù)專家或DBA需要將大量的工作和時間投入到自動化處理。
MySQL InnoDB Cluster
2016年,MySQL推出了MySQL InnoDB Cluster,InnoDB Cluster主要包括MySQL Group Replication(群組成員變化管理、網(wǎng)絡(luò)分區(qū)控制、集群范圍一致性......),MySQL Shell(強(qiáng)有力的接口,自動化整合全部的組件),MySQL Router(應(yīng)用透明路由、負(fù)載均衡、自動應(yīng)用故障轉(zhuǎn)移......)以及MySQL Clone(自動化部署成員,完全整合至InnoDB Cluster)。
MySQL InnoDB Replica Set
2020年,MySQL推出MySQL InnoDB Replica Set。該功能基于經(jīng)典的主從復(fù)制,完全整合MySQL Shell和MySQL Router。
二、InnoDB Cluster和InnoDB Replica Set
上面簡要介紹了MySQL高可用的過去和現(xiàn)在的解決方案,下面將詳細(xì)地介紹InnoDB Cluster和InnoDB Replica Set。
MySQL InnoDB Cluster是MySQL的一體化產(chǎn)品解決方案,具有高可用性和可伸縮性的特點,組件包括MySQL Server、MySQL Shell、MySQL Router和MySQL Group Replication。它的目標(biāo)是提供一個MySQL一體化產(chǎn)品,全部的組件統(tǒng)一開發(fā),整合全部的組件,并進(jìn)行全棧測試。此外,簡單易用也是該產(chǎn)品的特色,使用一個統(tǒng)一的客戶端MySQL Shell統(tǒng)一進(jìn)行集群編排和管理。
MySQL Group Replication
MySQL Group Replication是分布式高可用MySQL數(shù)據(jù)庫,具有容錯、自動故障轉(zhuǎn)移、多節(jié)點更新、自動成員管理、沖突檢測/解決以及防止數(shù)據(jù)丟失功能。它是復(fù)制數(shù)據(jù)庫狀態(tài)機(jī)理論的實現(xiàn),能夠保證整體寫入順序,保證一致性。集群范圍內(nèi)最終一致,如果使用8.0.14之后的MySQL可以實現(xiàn)會話和全局范圍的讀寫強(qiáng)一致性。MySQL 5.7版本將這個功能GA,并支持全部的MySQL平臺,包括Linux、Windows、Solaris、macOS 、FreeBSD等。
MySQL Group Replication可以用于如下場景:
- 一致性:數(shù)據(jù)零丟失(RPO=0)
○ 主要成員故障時,數(shù)據(jù)不會丟失。
○ 防止網(wǎng)絡(luò)分區(qū),通過大多數(shù)在線原則防止網(wǎng)絡(luò)分區(qū)。
- 高可用性:自動故障轉(zhuǎn)移
○ 自動選取主要成員
○ 自動控制網(wǎng)絡(luò)分區(qū)
- 讀取擴(kuò)展:
○ 按需增加/刪除節(jié)點
○ 使用流程控制處理延遲
○ 可配置一致性級別
◉ 最終一致
◉ 完整一致性
- 主主環(huán)境:
○ 同時寫入多個成員
◉ 組內(nèi)順序?qū)懭耄╔COM,PAXOS理論的實現(xiàn))
◉ 保證一致性
○ 寫入性能良好
◉ 樂觀鎖(取件于工作負(fù)載)
MySQL Router
透明訪問數(shù)據(jù)庫的架構(gòu),在應(yīng)用程序和后端的MySQL數(shù)據(jù)庫之間提供透明的路由連接。
- 透明客戶端連接路由
○ 負(fù)責(zé)均衡
○ 應(yīng)用程序連接故障轉(zhuǎn)移
○ 配置簡單
- 無縫設(shè)計提供簡單的HA客戶端路由
○ 路由作為應(yīng)用程序棧的一部分
- 整合InnoDB Cluster和InnoDB Replica Set
- 2個TCP端口用于主節(jié)點和非主節(jié)點通信
MySQL Shell
提供一個數(shù)據(jù)庫管理接口,可以執(zhí)行MySQL相關(guān)的全部任務(wù)。
- 支持多種語言:JavaScript、Python、SQL
- 可編寫腳本
- 支持文檔存儲和關(guān)系型模型
- 公開完整的開發(fā)和管理API
- 經(jīng)典的MySQL協(xié)議和X協(xié)議
MySQL Shell簡單易用,可以通過它快速搭建InnoDB Cluster。
創(chuàng)建集群
配置實例
添加實例
啟動MySQL Router
檢查集群狀態(tài)
MySQL InnoDB Replica Set
- 完全整合MySQL Router
- 簡單易用的MySQL Shell
- 配置、增加、移除成員
- 自動化部署成員(Clone)
- 主從復(fù)制架構(gòu)
○ 手動進(jìn)行切換和故障轉(zhuǎn)移
○ 異步讀取擴(kuò)展
○ 簡單的主從架構(gòu)
○ 沒有硬件網(wǎng)絡(luò)要求
◉ 提供主節(jié)點的可用性
InnoDB Replica Set可以通過克隆自動部署新成員,利用MySQL Shell自動配置用戶和復(fù)制,手動配置、增加移除應(yīng)用程序使用的服務(wù)器,MySQL Router或其他代理,并且能夠整合MySQL Router的負(fù)載均衡能力。從而避免了以往配置主從復(fù)制時所需的繁瑣步驟。
以往需要使用額外的監(jiān)控工具在每臺服務(wù)器上去檢查拓?fù)錉顟B(tài),用戶需要負(fù)責(zé)全部組件的所有配置,每一個設(shè)置都相當(dāng)于定制化。使用InnoDB Replica Set可以通過MySQL Shell status()來查看拓?fù)錉顟B(tài),并且Shell會基于最佳實踐配置服務(wù)器、路由和復(fù)制,以防止發(fā)生錯誤。
InnoDB Replica Set是一套標(biāo)準(zhǔn)的解決方案,由MySQL團(tuán)隊提供支持和質(zhì)量保證,這個方案的優(yōu)點是簡單易用,初學(xué)者也可以快速掌握。
三、如何選擇高可用架構(gòu)
最后說明一下如何選擇不同的高可用架構(gòu)。
首先要明確業(yè)務(wù)的需求,高可用性越高意味著成本也越高??梢詮囊韵聨讉€方面去明確目標(biāo):
- 恢復(fù)時間目標(biāo)(RTO)
服務(wù)從故障中恢復(fù)需要多長時間?
- 恢復(fù)點目標(biāo)(RPO)
服務(wù)在故障中允許丟失的數(shù)據(jù)
- 故障類型
○ 高可用:單一服務(wù)器故障,網(wǎng)絡(luò)分區(qū)
○ 容災(zāi):整體地域/網(wǎng)絡(luò)故障
○ 人為錯誤:操作失誤,故意破壞
- 程度
○ 0
○ 秒
○ 分
○ 小時
○ ...
不同業(yè)務(wù)需求對應(yīng)的架構(gòu)
單一地域
- RTO=小時
- RPO=分
- 一臺MySQL服務(wù)器
○ 備份
○ 同步日志
單一地域
- RTO=小時
- RPO=少于1秒
- 一臺MySQL服務(wù)器
○ 頻繁備份
○ 持續(xù)拉取二進(jìn)制日志
單一地域
- RTO=數(shù)分
- RPO=少于1秒
- MySQL InnoDB Replica Set
單一地域
- RTO=數(shù)秒
- RPO=0
- MySQL InnoDB Cluster
多地域
- 地域故障
- RTO=數(shù)分
- RPO=數(shù)秒
- MySQL InnoDB Cluster
○ 配合使用異步復(fù)制
多地域
- 地域故障
- RTO=數(shù)分
- RPO=0
- MySQL InnoDB Cluster 跨地域部署
○ 兩個地域的一致性級別設(shè)置為AFTER,或者三個地域,每個地域具有1-2個成員。
○ 寫入的吞吐量受到影響,寫入事務(wù)需要保證事務(wù)同步。
以上是關(guān)于MySQL高可用性架構(gòu)的內(nèi)容,用戶可以根據(jù)不同的需求選擇適合自己的架構(gòu)。