面試官:你如何利用 MySQL Cluster 實現整體高可用?
前言
本文,主要是介紹一下如何利用
MySQL Cluster
的特性來提高我們系統的整體可用性。
由於
MySQL Cluster
本身就是一個完整的分散式架構的系統,而且支援資料的
多點冗餘存放,
資料實時同步等特性。所以可以說他天生就已經具備了實現高可靠性的條件了,是否能夠在實際應用中滿足要求,主要就是在系統搭建配置方面的合理設定了。
由於
MySQL Cluster
的架構主要由兩個層次兩組叢集來組成,包括
SQL 節點( mysqld)
和
NDB 節點(資料節點)
,所有兩個層次都需要能夠保證高可靠性才能保證整體的可靠性。下面我們從兩個方面分別來介紹
MySQL Cluster
的高可靠性。
一、SQL 節點的高可靠性保證
MySQL Cluster
中的
SQL
節點實際上就是一個多節點的
mysqld
服務,並不包含任何資料。所以,
SQL
節點叢集就像其他任何普通的應用伺服器一樣,可替代性很高,只要安裝了支援
MySQL Cluster
的
MySQL Server
端即可。
當該叢集中的一個
SQL
節點
crash
掉之後,由於只是單純的應用服務,所以並不會造成任何的資料丟失。只需要前端的應用資料來源配置相容了叢集中某臺主機
crash
之後自動將該主機從叢集中去除就可以了。實際上,這一點對於應用伺服器來說是非常容易做到的,無論是透過自行開發判斷功能的代理還是透過硬體級別的負載均衡裝置,都可以非常容易做到。當然,前提自然也是剩下的
SQL
節點能夠承擔整體負載才行。
如上圖,當
SQL 1 crash
之後,實際上僅僅只是訪問到資料的很多條途徑中的某一條中斷了,實際上仍然還有很多條途徑可以獲取到所需要的資料。而且,由於
SQL
的可替代性很高,所以更換也非常簡單,即使更換整臺主機,也可以在短時間內完成。
二、NDB 節點的高可靠性保證
MySQL Cluster
的資料冗餘是有一個前提條件的,首先必須要保證有足夠的節點,實際上是至少需要 2 個節點才能保證資料有冗餘,因為,
MySQL Cluster
在儲存冗餘資料的時候 ,是比需要確保同一份資料的冗餘儲存在不同的節點之上。在保證了冗餘的前提下,
MySQL Cluster
才會將資料進行分割槽。
假設我們存在 4 個
NDB
節點,資料被分成 4 個
partition
存放,資料冗餘儲存,每份資料儲存 2 份,也就是說
NDB
配置中的
NoOfReplicas
引數設定為 2,4 個節點將被分成 2 個
NDB Group
。
所有資料的分佈類似於下圖所示:
在這樣的配置中,假設我們
NDB Group 0
這一組中的某一個
NDB
節點(假如是 NDB 1)出現問題,其中的部分資料(假設是 part 1)壞了,由於每一份資料都存在一個
冗餘複製,所以並不會對系統造成任何的影響,甚至完全不需要人為的操作,
MySQL
就可以繼續正常的提供服務。
假如我們兩個節點上面都出現部分資料損壞的情況,結果會怎樣?如下圖:
如果像上圖所示,如果兩個損壞部分資料的節點屬於同一個
NDB Group
,只要損壞部分並沒有包含完全相同的資料,整個
MySQL Cluster
仍然可以正常提供服務。但是,如果損壞資料中存在相同的資料,即使只有很少的部分,都會造成
MySQL Cluster
出現問題,不能完全正常的提供服務。此外,如果損壞資料的節點處於兩個不同的
NDB Group
,那麼非常幸運,不管損壞的是哪一部分資料,都不會影響
MySQL Cluster
的正常服務。
可能有朋友會說,那假如我們的硬體出現故障,整個
NDB
都
crash
了呢?是的,確實很可能存在這樣的問題,不過我們同樣不用擔心,如圖所示:
假設我們整個
NDB
節點由於硬體(或者軟體)故障而
crash
之後,由於
MySQL Cluster
保證了每份資料的複製都不在同一臺主機上,所以即使整太主機都
crash
了之後,
MySQL Cluster
仍然能夠正常提供服務,就像上圖所示的那樣,即使整個
NDB 1
節點都
crash
了 ,每一份資料都還可以透過
NDB 2
節點找回。
那如果是同時
crash
兩個節點會是什麼結果?首先可以肯定的是假如我們
crash
的兩個節點處於同一個
NDB Group
中的話,那
MySQL Cluster
也沒有辦法了,因為兩份冗餘的資料都丟失了。但是隻要
crash
的兩個節點不在同一個
NDB Group
中,
MySQL Cluster
就不會受到任何影響,還是能夠繼續提供正常服務。如下圖所示的情況:
從上面所列舉的情況我們可以知道,
MySQL Cluster
確實可以達到非常高的可靠性,畢竟同一時刻存放相同資料的兩個
NDB
節點都出現大故障的機率實在是太小了,要是這也能夠被遇上,那隻能自然倒黴了。
當然,由於
MySQL Cluster
之前的老版本需要將所有的資料全部
Load
到記憶體中才能正常執行,所有由於受到記憶體空間大小的限制,使用的人非常少。現在的新版本雖然已經支援僅僅只需要所有的索引資料
Load
到記憶體中即可,但是由於實際的成功案例還並不是很多,而且發展時間也還不是太長,所以很多使用者朋友對於
MySQL Cluster
目前還是持謹慎態度,大部分還處於測試階段。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2764023/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用Keepalived實現MySQL高可用MySql
- 如何設計和實現高可用MySQLMySql
- MySQL高可用之GC-Galera Cluster for MySQLMySqlGC
- 如何設計和實現高可用的MySQLMySql
- 面試官:聊一下你對MySQL索引實現原理?面試MySql索引
- 如何面試你的面試官面試
- MySQL高可用之MGC--MariaDB Galera ClusterMySqlGC
- keepalived+MySQL實現高可用MySql
- MySQL 實現高可用架構之 MHAMySql架構
- MySQL 資料高可用的實現思路MySql
- MMM實現mysql高可用性薦MySql
- MySQL高可用架構:mysql+keepalived實現MySql架構
- MHA+MySQL主從配置實現MySQL高可用MySql
- MySQL Cluster 7.0 +LVS 構建高可用環境MySql
- 面試官:請你實現一個深克隆面試
- CoroSync + Drbd + MySQL 實現MySQL的高可用叢集薦ROSMySql
- corosync+drbd+mysql實現的高可用薦ROSMySql
- 面試官:如何用LinkedHashMap實現LRU面試HashMap
- MySQL5.7 Galera Cluster安裝搭建及高可用測試MySql
- 利用keepalived構建高可用MySQL-HAMySql
- 面試官:volatile如何保證可見性的,具體如何實現?面試
- MySQL主主複製+MMM實現高可用(一)MySql
- 面試官:如何實現掃碼登入功能?面試
- MySQL高可用方案-PXC(Percona XtraDB Cluster)環境部署詳解MySql
- 基於Centos7.x 搭建MySQL Galera Cluster高可用架構CentOSMySql架構
- Java進階必備:優雅的告訴面試官訊息中介軟體該如何實現高可用架構?【石杉的架構筆記】Java面試架構筆記
- ELK架構下利用Kafka Group實現Logstash的高可用架構Kafka
- 構建MHA實現MySQL高可用叢集架構MySql架構
- keepalived+haproxy實現mysql負載均衡高可用MySql負載
- Go 面試官問我如何實現物件導向?Go面試物件
- 【MySQL】keepalived+haproxy實現mysql的高可用與負載均衡MySql負載
- 面試官問你:MYSQL事務和隔離級別,該如何回答面試MySql
- MySQL主主複製+slave+MMM實現高可用(二)MySql
- 如何利用容器與中介軟體實現微服務架構下的高可用性和彈性擴充套件微服務架構套件
- 面試官如何考察你的思維方式?面試
- keepalived + nginx 實現高可用Nginx
- nginx實現keepalived高可用Nginx
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構