您好,登錄后才能下訂單哦!
這篇“MySQL中常見的高可用架構部署方案有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL中常見的高可用架構部署方案有哪些”文章吧。
這里來聊聊,MySQL 中常用的部署方案。
MySQL Replication
是官方提供的主從同步方案,用于將一個 MySQL 的實例同步到另一個實例中。Replication 為保證數據安全做了重要的保證,是目前運用最廣的 MySQL 容災方案。Replication 用兩個或以上的實例搭建了 MySQL 主從復制集群,提供單點寫入,多點讀取的服務,實現了讀的 scale out
。
上面的栗子,一個主庫(M),三個從庫(S),通過 replication,Master 生成 event 的 binlog,然后發給 slave,Slave 將 event 寫入 relaylog,然后將其提交到自身數據庫中,實現主從數據同步。
對于數據庫之上的業務層來說,基于 MySQL 的主從復制集群,單點寫入 Master ,在 event 同步到 Slave 后,讀邏輯可以從任何一個 Slave 讀取數據,以讀寫分離的方式,大大降低 Master 的運行負載,同時提升了 Slave 的資源利用。
優點:
1、通過讀寫分離實現橫向擴展的能力,寫入和更新操作在源服務器上進行,從服務器中進行數據的讀取操作,通過增大從服務器的個數,能夠極大的增強數據庫的讀取能力;
2、數據安全,因為副本可以暫停復制過程,所以可以在副本上運行備份服務而不會破壞相應的源數據;
3、方便進行數據分析,可以在寫庫中創建實時數據,數據的分析操作在從庫中進行,不會影響到源數據庫的性能;
實現原理
在主從復制中,從庫利用主庫上的 binlog 進行重播,實現主從同步,復制的過程中蛀主要使用到了 dump thread,I/O thread,sql thread
這三個線程。
IO thread
: 在從庫執行 start slave
語句時創建,負責連接主庫,請求 binlog,接收 binlog 并寫入 relay-log;
dump thread
:用于主庫同步 binlog 給從庫,負責響應從 IO thread
的請求。主庫會給每個從庫的連接創建一個 dump thread
,然后同步 binlog 給從庫;
sql thread
:讀取 relay log
執行命令實現從庫數據的更新。
來看下復制的流程:
1、主庫收到更新命令,執行更新操作,生成 binlog;
2、從庫在主從之間建立長連接;
3、主庫 dump_thread 從本地讀取 binlog 傳送剛給從庫;
4、從庫從主庫獲取到 binlog 后存儲到本地,成為 relay log
(中繼日志);
5、sql_thread 線程讀取 relay log
解析、執行命令更新數據。
不過 MySQL Replication
有個嚴重的缺點就是主從同步延遲。
因為數據是進行主從同步的,那么就會遇到主從同步延遲的情況。
為什么會出現主從延遲?
1、從庫機器的性能比主庫差;
2、從庫的壓力大;
大量查詢放在從庫上,可能會導致從庫上耗費了大量的 CPU 資源,進而影響了同步速度,造成主從延遲。
3、大事務的執行;
有事務產生的時候,主庫必須要等待事務完成之后才能寫入到 binlog,假定執行的事務是一個非常大的數據插入,這些數據傳輸到從庫,從庫同步這些數據也需要一定的時間,就會導致從節點出現數據延遲。
4、從庫的復制能力較差;
如果從庫的復制能力,低于主庫,那么在主庫寫入壓力很大的情況下,就會造成從庫長時間數據延遲的情況出現。
如何解決?
1、優化業務邏輯,避免出現多線程大事務的并發場景;
2、提高從庫的機器性能,減少主庫寫 binlog 和從庫讀 binlog 的效率差;
3、保證主庫和從庫的網絡連接,避免出現網絡延遲導致的 binlog 傳輸延遲;
4、強行讀主庫;
5、配合 semi-sync 半同步復制;
semi-sync 半同步復制
MySQL 有三種同步模式,分別是:
1、異步復制:MySQL 中默認的復制是異步的,主庫在執行完客戶端提交的事務后會立即將結果返回給客戶端,并不關心從庫是否已經接收并且處理。存在問題就是,如果主庫的日志沒有及時同步到從庫,然后主庫宕機了,這時候執行故障轉移,在從庫沖選主,可能會存在選出的主庫中數據不完整;
2、全同步復制:指當主庫執行完一個事務,并且等到所有從庫也執行完成這個事務的時候,主庫在提交事務,并且返回數據給客戶端。因為要等待所有從庫都同步到主庫中的數據才返回數據,所以能夠保證主從數據的一致性,但是數據庫的性能必然受到影響;
3、半同步復制:是介于全同步和全異步同步的一種,主庫至少需要等待一個從庫接收并寫入到 Relay Log
文件即可,主庫不需要等待所有從庫給主庫返回 ACK。主庫收到 ACK ,標識這個事務完成,返回數據給客戶端。
MySQL 中默認的復制是異步的,所以主庫和從庫的同步會存在一定的延遲,更重要的是異步復制還可能引起數據的丟失。全同步復制的性能又太差了,所以從 MySQL 5.5
開始,MySQL 以插件的形式支持 semi-sync 半同步復制。
半同步復制潛在的問題
在傳統的半同步復制中,主庫寫數據到 binlog,并且執行 commit 提交事務后,會一直等待一個從庫的 ACK。從庫會在寫入 Relay Log
后,將數據落盤,然后回復給主庫 ACK,主庫收到這個 ACK 才能給客戶端事務完成的確認。
這樣會存在問題就是,主庫已經將該事務的 commit 存儲到了引擎層,應用已經可以看到數據的變化了,只是在等待從庫的返回,如果此時主庫宕機,可能從庫還沒有寫入 Relay Log,就會發生主從庫數據不一致。
為了解決這個問題,MySQL 5.7
引入了增強半同步復制。主庫寫入數據到 binlog 后,就開始等待從庫的應答 ACK,直到至少一個從庫寫入 Relay Log
后,并將數據落盤,然后返回給主庫 ACK,通知主庫可以進行 commit 操作,然后主庫再將事務提交到事務引擎,應用此時才能看到數據的變化。
不過看下來增強半同步復制,在同步給從庫之后,因為自己的數據還沒有提交,然后宕機了,主庫中也是會存在數據的丟失,不過應該想到的是,這時候主庫宕機了,是會重新在從庫中選主的,這樣新選出的主庫數據是沒有發生丟失的。
MySQL Group Replication
組復制,又稱為 MGR。是 Oracle MySQL
于 2016 年 12 月發布 MySQL 5.7.17
推出的一個全新高可用和高擴展的解決方案。
引入復制組主要是為了解決傳統異步復制和半同步復制可能產生數據不一致的問題。
MGR 由若干個節點共同組成一個復制組,一個事務的提交,必須經過組內大多數節點 (N / 2 + 1)
決議并通過,才能得以提交。
當客戶端發起一個更新事務時,該事務先在本地執行,執行完成之后就要發起對事務的提交操作。在還沒有真正提交之前,需要將產生的復制寫集廣播出去,復制到其它成員。因為事務是通過原子廣播發送的,所以組中的成員要么都接收事務,要么都不接收事務。如果組中的所有成員收到了該廣播消息(事務),那么他們會按照之前發送事務的相同順序收到該廣播消息。因此,所有組成員都以相同的順序接收事務的寫集,并為事務建立全局順序。因此,所有組成員都以相同的順序接收事務的寫集,并為事務建立全局順序。
在不同組成員并發執行的事務可能存在沖突。沖突是通過檢查和比較兩個不同并發事務的 write set
來驗證的,這個過程稱為認證。在認證期間,沖突檢測在行級別執行的:如果在不同組成員上執行的兩個并發事務更新了同一行數據,則存在沖突。根據沖突認證檢測機制判斷,按照順序,第一次提交的會正常執行,第二次提交的事務會在事務發起的原始組成員上執行回滾,,組中的其他成員對該事務執行刪除。如果兩個事務經常發生沖突,那么最好將這兩個事務放在同一個組成員中執行,這樣它們在本地鎖管理器的協調下將都有機會提交成功,而不至于因為處在兩個不同的組成員中由于沖突認證而導致其中一個事務被頻繁回滾。
最終,所有組內成員以相同的順序接收同一組事務。因此組內成員以相同的順序應用相同的修改,保證組內數據強一致性。
有下面的幾種特性:
1、避免腦裂:MGR 中不會出現腦裂的現象;
2、數據一致性保障:MGR 的冗余能力很好,能夠保證 Binlog Event
至少被復制到超過一半的成員上,只要同時宕機的成員不超過半數便不會導致數據丟失。MGR還保證只要 Binlog Event
沒有被傳輸到半數以上的成員,本地成員不會將事務的 Binlog Event
寫入 Binlog 文件和提交事務,從而保證宕機的服務器上不會有組內在線成員上不存在的數據。因此,宕機的服務器重啟后,不再需要特殊的處理就可以加入組;
3、多節點寫入支持:多寫模式下支持集群中的所有節點都可以寫入。
組復制的應用場景
1、彈性復制:需要非常靈活的復制基礎設施的環境,其中MySQL Server的數量必須動態增加或減少,并且在增加或減少Server的過程中,對業務的副作用盡可能少。例如,云數據庫服務;
2、高可用分片:分片是實現寫擴展的一種流行方法。基于 組復制 實現的高可用分片,其中每個分片都會映射到一個復制組上(邏輯上需要一一對應,但在物理上,一個復制組可以承載多個分片);
3、替代主從復制:在某些情況下,使用一個主庫會造成單點爭用。在某些情況下,向整個組內的多個成員同時寫入數據,對應用來說可能伸縮性更強;
4、自治系統:可以利用組復制內置的自動故障轉移、數據在不同組成員之間的原子廣播和最終數據一致性的特性來實現一些運維自動化。
InnoDB Cluster
是官方提供的高可用方案,是 MySQL 的一種高可用性(HA)解決方案,它通過使用 MySQL Group Replication
來實現數據的自動復制和高可用性,InnoDB Cluster
通常包含下面三個關鍵組件:
1、MySQL Shell
: 它是 MySQL 的高級管理客戶端;
2、MySQL Server
和 MGR
,使得一組 MySQL
實例能夠提供高可用性,對于 MGR,Innodb Cluster
提供了一種更加易于編程的方式來處理 MGR;
3、MySQL Router
,一種輕量級中間件,主要進行路由請求,將客戶端發送過來的請求路由到不同的 MySQL 服務器節點。
MySQL Server
基于 MySQL Group Replication
構建,提供自動成員管理,容錯,自動故障轉移動能等。InnoDB Cluster
通常以單主模式運行,一個讀寫實例和多個只讀實例。不過也可以選用多主模式。
優點:
1、高可用性:通過 MySQL Group Replication
,InnoDB Cluster
能夠實現數據在集群中的自動復制,從而保證數據的可用性;
2、簡單易用:InnoDB Cluster
提供了一個簡單易用的管理界面,使得管理員可以快速部署和管理集群;
3、全自動故障轉移: InnoDB Cluster
能夠自動檢測和診斷故障,并進行必要的故障轉移,使得數據可以繼續可用。
缺點:
1、復雜性:InnoDB Cluster
的部署和管理比較復雜,需要對 MySQL 的工作原理有一定的了解;
2、性能影響:由于自動復制和高可用性的要求,InnoDB Cluster
可能對 MySQL 的性能造成一定的影響;
3、限制:InnoDB Cluster
的功能對于一些特殊的應用場景可能不夠靈活,需要更多的定制。
MySQL InnoDB ClusterSet
通過將主 InnoDB Cluster
與其在備用位置(例如不同數據中心)的一個或多個副本鏈接起來,為 InnoDB Cluster
部署提供容災能力。
InnoDB ClusterSet
使用專用的 ClusterSet 復制通道自動管理從主集群到副本集群的復制。如果主集群由于數據中心損壞或網絡連接丟失而變得無法使用,用戶可以激活副本集群以恢復服務的可用性。
InnoDB ClusterSet 的特點:
1、主集群和副本集群之間的緊急故障轉移可以由管理員通過 MySQL Shell
,使用 AdminAPI 進行操作;
2、InnoDB ClusterSet 部署中可以擁有的副本集群的數量沒有定義的限制;
3、異步復制通道將事務從主集群復制到副本集群。clusterset_replication
在 InnoDB ClusterSet
創建過程中,在每個集群上都設置了名為 ClusterSet 的復制通道,當集群是副本時,它使用該通道從主集群復制事務。底層組復制技術管理通道并確保復制始終在主集群的主服務器(作為發送方)和副本集群的主服務器(作為接收方)之間進行;
4、每個 InnoDB ClusterSet
集群,只有主集群能夠接收寫請求,大多數的讀請求流量也會被路由到主集群,不過也可以指定讀請求到其他的集群;
InnoDB ClusterSet 的限制:
1、InnoDB ClusterSet 只支持異步復制,不能使用半同步復制,無法避免異步復制的缺陷:數據延遲、數據一致性等;
2、InnoDB ClusterSet 僅支持Cluster實例的單主模式,不支持多主模式。 即只能包含一個讀寫主集群, 所有副本集群都是只讀的, 不允許具有多個主集群的雙活設置,因為在集群發生故障時無法保證數據一致性;
3、已有的 InnoDB Cluster 不能用作 InnoDB ClusterSet 部署中的副本集群。副本集群必須從單個服務器實例啟動,作為新的 InnoDB 集群;
4、只支持 MySQL 8.0。
InnoDB ReplicaSet
是 MySQL 團隊在 2020 年推出的一款產品,用來幫助用戶快速部署和管理主從復制,在數據庫層仍然使用的是主從復制技術。
InnoDB ReplicaSet
由單個主節點和多個輔助節點(傳統上稱為 MySQL 復制源和副本)組成。
與 InnoDB cluster
類似, MySQL Router
支持針對 InnoDB ReplicaSet
的引導, 這意味著可以自動配置 MySQL Router
以使用 InnoDB ReplicaSet
, 而無需手動配置文件. 這使得 InnoDB ReplicaSet
成為一種快速簡便的方法, 可以啟動和運行 MySQL 復制和 MySQL Router
, 非常適合擴展讀取, 并在不需要 InnoDB 集群提供高可用性的用例中提供手動故障轉移功能。
InnoDB ReplicaSet
的限制:
1、沒有自動故障轉移,在主節點不可用的情況下,需要使用 AdminAPI 手動觸發故障轉移,然后才能再次進行任何更改。但是,輔助實例仍可用于讀取;
2、由于意外停止或不可用,無法防止部分數據丟失:在意外停止時未完成的事務可能會丟失;
3、在意外退出或不可用后無法防止不一致。如果手動故障轉移提升了一個輔助實例,而前一個主實例仍然可用,例如,由于網絡分區,裂腦情況可能會導致數據不一致;
4、InnoDB ReplicaSet 不支持多主模式。允許寫入所有成員的經典復制拓撲無法保證數據一致性;
5、讀取橫向擴展是有限的。InnoDB ReplicaSet
基于異步復制,因此無法像 Group Replication
那樣調整流量控制;
6、一個 ReplicaSet 最多由一個主實例組成。支持一個或多個輔助。盡管可以添加到 ReplicaSet 的輔助節點的數量沒有限制,但是連接到 ReplicaSet 的每個 MySQL Router 都必須監視每個實例。因此,一個 ReplicaSet 中加入的實例越多,監控就越多。
使用 InnoDB ReplicaSets
的主要原因是你有更好的寫性能。使用 InnoDB ReplicaSets
的另一個原因是它們允許在不穩定或慢速網絡上部署,而 InnoDB Cluster
則不允許。
MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM 使用 Perl 語言開發,主要用來監控和管理 MySQL Master-Master
(雙主)復制,可以說是 MySQL 主主復制管理器。
雙主模式,業務上同一時刻只能一個主庫進行數據的寫入。另一個主備庫,會在主服務器失效時,進行主備切換和故障轉移。
MMM 中是通過一個 VIP(虛擬 IP) 的機制來保證集群的高可用的。整個集群中,在主節點會提供一個 VIP 地址來提供數據讀寫服務,當出現故障的時候,VIP 就會從原來的主節點便宜到其他節點,由其他節點提供服務。
MMM無法完全的保證數據一致性,所以適用于對數據的一致性要求不是很高的場景。(因為主備上的數據不一定是最新的,可能還沒從庫的新。解決方法:開啟半同步)。
MMM 的優缺點
優點:高可用性,擴展性好,出現故障自動切換,對于主主同步,在同一時間只提供一臺數據庫寫操作,保證數據的一致性。
缺點:無法完全保數據的一致性,建議采用半同步復制方式,減少失敗的概率;目前 MMM 社區已經缺少維護,不支持基于 GTID 的復制。
適用場景:
MMM的適用場景為數據庫訪問量大,業務增長快,并且能實現讀寫分離的場景。
Master High Availability Manager and Tools for MySQL,簡稱 MHA 。是一套優秀的作為 MySQL 高可用性環境下故障切換和主從提升的高可用軟件。
這個工具專門用于監控主庫的狀態,當發現 master 節點故障的時候,會自動提升其中擁有新數據的 slave 節點成為新的 master 節點,在此期間,MHA 會通過其他從節點獲取額外的信息來避免數據一致性問題。MHA 還提供了 mater 節點的在線切換功能,即按需切換 master-slave 節點。MHA 能夠在30秒內實現故障切換,并能在故障切換過程中,最大程度的保證數據一致性。
MHA 由兩部分組成;
MHA Manager(管理節點)和MHA Node(數據節點)。
MHA Manager
可以單獨部署在一臺獨立的機器上管理多個 master-slave 集群,也可以部署在一臺 slave節點上。MHA Node
運行在每臺 MySQL 服務器上,MHA Manager
會定時探測集群中的 master 節點,當 master 出現故障時,它可以自動將最新數據的 slave 提升為新的 master,然后將所有其他的 slave 重新指向新的 master。
整個故障轉移過程對應用程序完全透明。
在 MHA 自動故障切換過程中,MHA 試圖從宕機的主服務器上最大限度的保存二進制日志,最大程度的保證數據的不丟失,但這并不總是可行的。例如,主服務器硬件故障或無法通過 ssh 訪問,MHA 沒法保存二進制日志,只進行故障轉移而丟失了最新的數據。
使用 MySQL 5.5
開始找支持的半同步復制,可以大大降低數據丟失的風險。MHA可以與半同步復制結合起來。如果只有一個 slave 已經收到了最新的二進制日志,MHA 可以將最新的二進制日志應用于其他所有的 slave 服務器上,因此可以保證所有節點的數據一致性。
目前 MHA 主要支持一主多從的架構,要搭建 MHA,要求一個復制集群中必須最少有三臺數據庫服務器 ,一主二從,即一臺 master,一臺充當備用 master,另外一臺充當從庫,因為至少需要三臺服務器。
MHA 工作原理總結如下:
1、從宕機崩潰的 master 保存二進制日志事件(binlog events);
2、識別最新更新的 slave;
3、應用差異的中繼日志(relay log) 到其他slave;
4、應用從master保存的二進制日志事件(binlog events);
5、提升一個 slave 為新master;
6、使用其他的 slave 連接新的 master 進行復制。
優點:
1、可以支持基于 GTID 的復制模式;
2、MHA 在進行故障轉移時更不易產生數據丟失;
3、同一個監控節點可以監控多個集群。
缺點:
1、需要編寫腳本或利用第三方工具來實現 Vip 的配置;
2、MHA 啟動后只會對主數據庫進行監控;
3、需要基于 SSH 免認證配置,存在一定的安全隱患。
Galera Cluster
是由 Codership 開發的MySQL多主集群,包含在 MariaDB 中,同時支持 Percona xtradb、MySQL
,是一個易于使用的高可用解決方案,在數據完整性、可擴展性及高性能方面都有可接受的表現。
其本身具有 multi-master 特性,支持多點寫入,Galera Cluster
中每個實例都是對等的,互為主從。當客戶端讀寫數據的時候,可以選擇任一 MySQL 實例,對于讀操作,每個實例讀取到的數據都是相同的。對于寫操作,當數據寫入某一節點后,集群會將其同步到其它節點。這種架構不共享任何數據,是一種高冗余架構。
主要功能
1、同步復制;
2、真正的 multi-master,即所有節點可以同時讀寫數據庫;
3、自動的節點成員控制,失效節點自動被清除;
4、新節點加入數據自動復制;
5、真正的并行復制,行級;
6、用戶可以直接連接集群,使用感受上與 MySQL 完全一致。
優勢
1、數據一致:同步復制保證了整個集群的數據一致性,無論何時在任何節點執行相同的select查詢,結果都一樣;
2、高可用性:由于所有節點數據一致,單個節點崩潰不需要執行復雜耗時的故障切換,也不會造成丟失數據或停止服務;
3、性能改進:同步復制允許在集群中的所有節點上并行執行事務,從而提高讀寫性能;
4、更小的客戶端延遲;
5、同時具有讀和寫的擴展能力。
分析下原理
Galera Cluster
中主要用到了同步復制,主庫中的單個更新事務需要在所有從庫中同步更新,當主庫提交事務,集群中的所有節點數據保持一致。
異步復制,主庫將數據更新傳播給從庫后立即提交事務,而不論從庫是否成功讀取或重放數據變化,所以異步復制會存在短暫的,主從數據同步不一致的情況出現。
不過同步復制的缺點也是很明顯的,同步復制協議通常使用兩階段提交或分布式鎖協調不同節點的操作,也及時說節點越多需要協調的節點也就越多,那么事務沖突和死鎖的概率也就會隨之增加。
我們知道 MGR 組復制的引入也是為了解決傳統異步復制和半同步復制可能產生數據不一致的問題,MGR 中的組復制,基于 Paxos 協議,原則上事務的提交,主要大多數節點 ACK 就可以提交了。
Galera Cluster
中的同步需要同步數據到所有節點,保證所有節點都成功。基于專有通信組系統 GCommon ,所有節點都必須有 ACK。
Galera 復制是一種基于驗證的復制,基于驗證的復制使用通信和排序技術實現同步復制,通過廣播并發事務之間建立的全局總序來協調事務提交。簡單的講就是事務必須以相同的順序應用于所有實例。
事務現在本地執行,然后發送的其他節點做沖突驗證,沒有沖突的時候所有節點提交事務,否則在所有節點回滾。
當客戶端發出 commit 命令時,在實際提交之前,對數據所做的更改都會收集到一個寫集合中,寫集合中包含事務信息和所更改行的主鍵,數據庫將寫集發送到其它節點。
節點用寫集中的主鍵與當前節點中未完成事務的所有寫集的主鍵比較,確定節點是否可以提交事務,同時滿足下面三個條件會被任務存在沖突,驗證失敗:
1、兩個事務來源于不同節點;
2、兩個事務包含相同的主鍵;
3、老事務對新事務不可見,即老事務未提交完成。新老事務的劃定依賴于全局事務總序,即 GTID。
驗證失敗,節點將刪除寫集,集群將回滾原始事務,對于所有的節點都是如此,每個節點單獨進行驗證。因為所有節點都以相同的順序接收事務,它們對事務的結果都會做出相同的決定,要么全成功,要么都失敗。成功后自然就提交了,所有的節點又會重新達到數據一致的狀態。節點之間不交換“是否沖突”的信息,各個節點獨立異步處理事務。
MySQL Cluster
是一個高度可擴展的,兼容 ACID 事務的實時數據庫,基于分布式架構不存在單點故障,MySQL Cluster
支持自動水平擴容,并能做自動的讀寫負載均衡。
MySQL Cluster
使用了一個叫 NDB 的內存存儲引擎來整合多個 MySQL 實例,提供一個統一的服務集群。
NDB 是一種內存性的存儲引擎,使用 Sarding-Nothing 的無共享的架構。Sarding-Nothing 指的是每個節點有獨立的處理器,磁盤和內存,節點之間沒有共享資源完全獨立互不干擾,節點之間通過告訴網絡組在一起,每個節點相當于是一個小型的數據庫,存儲部分數據。這種架構的好處是可以利用節點的分布性并行處理數據,調高整體的性能,還有就是有很高的水平擴展性能,只需要增加節點就能增加數據的處理能力。
MySql Cluster
中包含三種節點,分別是管理節點(NDB Management Server)、數據節點(Data Nodes)和 SQL查詢節點(SQL Nodes) 。
SQL Nodes
是應用程序的接口,像普通的 mysqld 服務一樣,接受用戶的 SQL 輸入,執行并返回結果。Data Nodes
是數據存儲節點,NDB Management Server
用來管理集群中的每個 node。
其中數據節點會存儲集群中的數據分區和分區的副本,來看下 MySql Cluster
是如何對數據進行分片的操作的,首先來了解下下面幾個概念
節點組(Node Group): 一組數據節點的集合。節點組的個數=節點數 / 副本數
;
比如有集群中 4 個節點,副本數為 2(對應 NoOfReplicas 的設置),那么節點組個數為2。
另外,在可用性方面,數據的副本在組內交叉分配,一個節點組內只有要一臺機器可用,就可以保證整個集群的數據完整性,實現服務的整體可用。
分區(Partition):MySql Cluster
是一個分布式的存儲系統,數據按照 分區 劃分成多份存儲在各數據節點中,分區個數由系統自動計算,分區數 = 數據節點數 / LDM 線程數
;
副本(Replica):分區數據的備份,有幾個分區就有幾個副本,為了避免單點,保證 MySql Cluster
集群的高可用,原始數據對應的分區和副本通常會保存在不同的主機上,在一個節點組內進行交叉備份。
栗如,上面的例子,有四個數據節點(使用ndbd),副本數為2的集群,節點組被分為2組(4/2),數據被分為4個分區,數據分配情況如下:
分區0(Partition 0)保存在節點組 0(Node Group 0)中,分區數據(主副本 — Primary Replica)保存在節點1(node 1) 中,備份數據(備份副本,Backup Replica)保存在節點2(node 2) 中;
分區1(Partition 1)保存在節點組 1(Node Group 1)中,分區數據(主副本 — Primary Replica)保存在節點3(node 3) 中,備份數據(備份副本,Backup Replica)保存在節點4(node 4) 中;
分區2(Partition 2)保存在節點組 0(Node Group 0)中,分區數據(主副本 — Primary Replica)保存在節點2(node 2) 中,備份數據(備份副本,Backup Replica)保存在節點1(node 1) 中;
分區3(Partition 2)保存在節點組 1(Node Group 1)中,分區數據(主副本 — Primary Replica)保存在節點4(node 4) 中,備份數據(備份副本,Backup Replica)保存在節點3(node 3) 中;
這樣,對于一張表的一個 Partition 來說,在整個集群有兩份數據,并分布在兩個獨立的 Node 上,實現了數據容災。同時,每次對一個 Partition 的寫操作,都會在兩個 Replica 上呈現,如果 Primary Replica
異常,那么 Backup Replica
可以立即提供服務,實現數據的高可用。
mysql cluster
的優點
1、99.999%的高可用性;
2、快速的自動失效切換;
3、靈活的分布式體系結構,沒有單點故障;
4、高吞吐量和低延遲;
5、可擴展性強,支持在線擴容。
mysql cluster
的缺點
1、存在很多限制,比如:不支持外鍵,數據行不能超過8K(不包括BLOB和text中的數據);
2、部署、管理、配置很復雜;
3、占用磁盤空間大,內存大;
4、備份和恢復不方便;
5、重啟的時候,數據節點將數據 load 到內存需要很長時間。
MySQL Fabric
會組織多個 MySQL 數據庫,將大的數據分散到多個數據庫中,即數據分片(Data Shard)
,同時同一個分片數據庫中又是一個主從結構,Fabric 會挑選合適的庫作為主庫,當主庫掛掉的時候,又會重新在從庫中選出一個主庫。
MySQL Fabric
的特點:
1、高可用;
2、使用數據分片的橫向功能。
MySQL Fabric-aware
連接器把從 MySQL Fabric
獲取的路由信息存儲到緩存中,然后憑借該信息將事務或查詢發送給正確的 MySQL 服務器。
同時,每一個分片組,可以又多個一個服務器組成,構成主從結構,當主庫掛掉的時候,又會重新在從庫中選出一個主庫。保證節點的高可用。
HA Group
保證訪問指定 HA Group
的數據總是可用的,同時其基礎的數據復制是基于 MySQL Replication
實現的。
缺點
事務及查詢只支持在同一個分片內,事務中更新的數據不能跨分片,查詢語句返回的數據也不能跨分片。
以上就是關于“MySQL中常見的高可用架構部署方案有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。