一、什麼是MySQL##叢集
MySQL叢集是一個不共享的(shared-nothing)、分散式節點架構的存儲方案,其目的是提供容錯性和高性能。 資料更新使用讀取已提交隔離等級(read-committedisolation)來保證所有節點資料的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的資料(如果任何一個寫入操作失敗,則更新失敗)。 無共享的對等節點讓某台伺服器上的更新作業在其他伺服器上立即可見。傳播更新使用一種複雜的通訊機制,這種機制專用來提供跨網路的高吞吐量。
透過多個MySQL伺服器分配負載,從而最大程式地達到高效能,透過在不同位置儲存資料保證高可用性和冗餘。
三、如何儲存資料
#1.Mysqlcluster資料節點群組內主從同步採用的是同步複製,來保證群組內節點資料的一致性。一般透過兩階段提交 協定來實現,一般工作流程如下:
a)Master執行提交語句時,事務被傳送到slave,slave開始準備事務的提交。
b)每個slave都要準備事務,然後向master發送OK(或ABORT)訊息,表示事務已經準備好(或無法準備該事務)。
c)Master等待所有Slave發送OK或ABORT訊息
如果Master收到所有Slave的OK訊息,它就會向所有Slave發送提交訊息,告訴Slave提交該事務;
如果Master收到來自任何一個Slave的ABORT訊息,它就向所有Slave發送ABORT訊息,告訴Slave去中止事務。
2.Mysqlcluster將所有的索引列都保存在主記憶體中,其他非索引列可以儲存在記憶體中或透過建立表空間儲存到磁碟上。如果資料改變(insert,update,delete等),mysql 叢集將發生變更的記錄寫入重做日誌,然後透過檢查點定期將資料定入磁碟。由於重做日誌是非同步提交的,所以故障期間可能有少量交易遺失。為了減少交易遺失,mysql叢集實現延遲寫入(預設延遲兩秒,可配置),這樣就可以在故障發生時完成檢查點寫入,而不會遺失最後一個檢查點。一般單一資料節點故障不會導致任何資料遺失,因為叢集內部採用同步資料複製。
四、#MySQL叢集的橫向擴充
#1.新增資料節點群組來擴充寫操作,提高cluster的儲存能力。支援線上擴容,先將新的節點加入clsuter裡,啟動後用
ALTER ONLINE TABLE table_name REORGANIZE PARTITION
指令進行資料遷移,把資料平均分配到資料節點上。
2.新增Slave只是擴充讀,而無法做到寫入作業的橫向擴充。
整個系統的平均負載可以描述為:
AverageLoad=∑readload+ ∑writeload / ∑capacity
假設每個伺服器每秒有10000的事務量,而Master每秒的寫入負載為4000個事務,每秒的讀負載為6000,結果就是:
AverageLoad=6000+4000/10000=100%
現在,增加3個slave,每秒的交易量增加到40000。因為寫入操作也會被複製,每個寫入操作執行4次,這樣每個slave的寫入負載就是每秒4000個交易。那麼現在的平均負載為:
AverageLoad=6000+4*4000/ 4*10000=55%
五、MySQL
#叢集的優缺點
優點:
a) 99.999%的高可用性
#b)快速的自動失效切換
c)靈活的分散式體系結構,沒有單點故障
d )高吞吐量和低延遲
e)可擴展性強,支援線上擴容
##缺點:
#a)有許多限制,例如:不支援外鍵
b)部署、管理、設定很複雜
###### c)佔用磁碟空間大,記憶體大############d)備份和恢復不方便############e)重啟的時候,資料節點將數據load到記憶體需要很長時間######以上是簡單介紹mysql集群(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!