MySQL Cluster --01
MySQL Cluster 是MySQL 官方集群部署方案, 支持自動分片、讀寫擴展;通過實時備份冗余數據。適合於分布式計算環境的高實用、高冗余版本,是可用性最高的方案,官方聲稱可做到99.999%的可用性。MySQL Cluster采用NDB Cluster 存儲引擎,包括MySQL服務器、NDB Cluster數據節點、管理服務器,以及(可能)專門的數據訪問程序。
NDB 是一種“內存中”的存儲引擎,它具有可用性高和數據一致性等特點。
實際上,MySQL集群是把NDB 內存集群存儲引擎與標準的MySQL服務器集成。它包含一組計算機,每個都跑一個或者多個進程,這可能包括一個MySQL服務器,一個數據節點,一個管理服務器和一個專有的一個數據訪問程序。
MySQL cluster配置中,由3個不同功能的服務構成,每個服務由一個專用的守護進程提供,一項服務也叫做一個節點,下面來介紹每個節點的功能:
一、管理(MGM)節點
MGM節點作用是管理MySQL Cluster內的其他節點,如提供配置數據、啟動並停止節點、運行備份等。由於這類節點負責管理其他節點的配置,應在啟動其他節點之前首先啟動這類節點。理論上一般只啟動一個,而且宕機也不影響 cluster 的服務,這個進程只在cluster 啟動以及節點加入集群時起作用, 所以這個節點不是很需要冗余,理論上通過一臺服務器提供服務就可以了。
管理服務器(MGM節點)負責管理 Cluster配置文件和 Cluster日誌。 Cluster中的每個節點從管理服務器檢索配置數據,並請求確定管理服務器所在位置的方式。當數據節點內出現新的事件時,節點將關於這類事件的信息傳輸到管理服務器,然後,將這類信息寫入 Cluster日誌。
二、數據節點
用於保存 Cluster的數據。數據節點的數目與副本的數目相關,是片段的倍數,分段的數目為節點總數除以NoOfReplicas 所得。例如,對於兩個副本,每個副本有兩個片段,那麽就有4個數據節點,通常設置為兩副本,兩個以上時就能實現集群的高可用保證,數據節點增加時,集群的處理速度會變慢。
三、SQL節點
用來訪問 Cluster數據的節點。對於MySQL Cluster,客戶端節點是使用NDB Cluster存儲引擎的傳統MySQL服務器。Cluster中可以有多個sql節點,通過每個sql節點查詢到的數據都是一致的,通常來說,sql節點越多,分配到每個sql節點的負載就越小,系統的整體性能就越好。
所有的這些節點構成一個完成的MySQL集群體系: 數據保存在“NDB存儲服務器”的存儲引擎中,表(結構)則保存在“MySQL服務器”中。應用程序通過“MySQL服務器”訪問這些數據表,集群管理服務器通過管理工具(ndb_mgmd)來管理“NDB存儲服務器”。
通過將MySQL Cluster 引入開放源碼世界,MySQL為所有需要它的人員提供了具有高可用性、高性能和可縮放性的 Cluster 數據管理。
【NDB存儲引擎】
MySQL Cluster 使用了一個專用的基於內存的存儲引擎NDB,這樣做的好處是速度快, 沒有磁盤I/O的瓶頸,但是由於是基於內存的,所以數據庫的規模受系統總內存的限制, 如運行NDB的MySQL服務器一定要內存夠大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多臺服務器上來實現數據的可靠性和擴展性,理論上 通過配置2臺NDB的存儲節點就能實現整個數據庫集群的冗余性和解決單點故障問題。
在ndb上可以建立兩種類型的表:
1、內存表:所有數據(包括index)都在內存中。同時會在磁盤上保存數據,因此不用擔心數據會丟失,datanode會在啟動的時候把數據加載到內存。
2、磁盤表:僅主鍵、索引字段保存在內存中,其他字段保存在磁盤文件裏。
MySQL Cluster 特性
- 通過自動分片實現高水平的寫入擴展能力:MySQL Cluster 自動將表分片(或分區)到不同節點上,使數據庫可以在低成本的商用硬件上橫向擴展,同時保持對應用程序完全應用透明。
- 99.999% 的可用性:憑借其分布式、無共享架構,MySQL Cluster 可提供 99.999% 的可用性,確保了較強的故障恢復能力和在不停機的情況下執行預定維護的能力。
- SQL 和NoSQL API:MySQL Cluster 讓用戶可以在解決方案中整合關系數據庫技術和NoSQL技術中的最佳部分,從而降低成本、風險和復雜性。
- 實時性能:MySQL Cluster 提供實時的響應時間和吞吐量,能滿足最苛刻的 Web、電信及企業應用程序的需求。
- 具有跨地域復制功能的多站點集群:跨地域復制使多個集群可以分布在不同的地點,從而提高了災難恢復能力和全球 Web 服務的擴展能力。
- 聯機擴展和模式升級:為支持持續運營,MySQL Cluster 允許向正在運行的數據庫模式中聯機添加節點和更新內容,因而能支持快速變化和高度動態的負載。
缺點
- 基於內存,數據庫的規模受集群總內存的大小限制
- 多個節點通過網絡實現通訊和數據同步、查詢等操作,因此整體性受網絡速度影響
MySQL Cluster --01