mysql cluster 分片_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個數據節點,通常設置為兩副本,兩個以上時就能實現集群的高可用保證,數據副本節點增加時,集群的處理速度會變慢。
數據更新使用讀已提交隔離級別(read-committed isolation)來保證所有節點數據的一致性,使用兩階段提交機制(two-phased commit:節點組內主從同步采用同步復制),保證所有節點都有相同的數據(如果任何一個寫操作失敗,則更新失敗)。
無共享的對等節點使得某臺服務器上的更新操作在其他服務器上立即可見。傳播更新使用一種復雜的通信機制,這一機制專用來提供跨網絡的高吞吐量。
Mysqlcluster將所有的索引列都保存在主存中,其他非索引列可以存儲在內存中或者通過建立表空間存儲到磁盤上。
如果數據發生改變(insert,update,delete等),mysql 集群將發生改變的記錄寫入重做日志,然后通過檢查點定期將數據定入磁盤。由于重做日志是異步提交的,所以故障期間可能有少量事務丟失。為了減少事務丟失,mysql集群實現延遲寫入(默認延遲兩秒,可配置),這樣就可以在故障發生時完成檢查點寫入,而不會丟失最后一個檢查點。一般單個數據節點故障不會導致任何數據丟失,因為集群內部采用同步數據復制。
由于同步復制一共需要4次消息傳遞,故mysql cluster的數據更新速度比單機mysql要慢。所以mysql cluster要求運行在千兆以上的局域網內,節點可以采用雙網卡,節點組之間采用直連方式。
對cluster進行擴容增加數據節點組時不會導致數據更新速度降低。相反,數據更新速度會變快,因為數據是分別處理,每個節點組所保存的數據是不一樣的,也能減少鎖定。
三、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 允許向正在運行的數據庫模式中聯機添加節點和更新內容,因而能支持快速變化和高度動態的負載。
缺點
基于內存,數據庫的規模受集群總內存的大小限制,重啟時,數據節點將數據load到內存耗時較長
多個節點通過網絡實現通訊和數據同步、查詢等操作,因此整體性受網絡速度影響
總結
以上是生活随笔為你收集整理的mysql cluster 分片_MySQL Cluster --01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度快照劫持代码的更新
- 下一篇: MySQL3_外键及查询