MySQL Cluster是MySQL適合於分散式運算環境的高實用、高冗餘版本。它採用了NDB Cluster儲存引擎,允許在1個Cluster中運行多個MySQL伺服器。
MySQL Cluster是一種技術,該技術允許在無共用的系統中部署“記憶體中”資料庫的Cluster。通過無共用體繫結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由於每個組件有自己的記憶體和磁碟,不存在單點故障。
總結了些移植到MySQL Cluster要注意的常見問題。
關於串連
MySQL叢集適合用於高速頻寬的環境中,採用TCP/IP方式串連。它的效能跟主機間的串連速率有直接關係。叢集中的最小速率要求是常規的100Mb乙太網路或者等同的網路。我們建議可能的話就採用G級網路。
關於記憶體
MySQL叢集可以運行在任何啟用NDB的平台上。顯然,CPU越快,記憶體越大,對叢集效能提升越明顯,64位的CPU也可能比32位的處理器更快。每個作為資料節點的機器都必須有足夠的記憶體來儲存共用資料庫。
在MySQL 5.0中,叢集只能基於記憶體。意思是所有表的資料(包括索引)都儲存在記憶體中。如果你的資料有1GB那麼大,你想要複製一份到叢集中的話,那麼就必須要 2GB的記憶體才行(每份複製佔用1GB),這是運行叢集的電腦上相對其他動作系統其他需求的記憶體。
如果一個資料節點上的記憶體使用量超出了可用的範圍,則作業系統會使用
交換記憶體來達到上限值DataMemory。不過這會導致效能嚴重下降,並且可能導致相應時間變慢。正是由於這個原因,我們不推薦在生產環境中使用磁碟交
換空間。在任何情況下,只要達到DataMemory上限了,那麼所有的操作請求(比如插入)都會失敗。
在MySQL 5.1中實現了基於磁碟儲存的叢集,但是5.0中沒有這個功能。對於包含主鍵雜湊索引的有索引欄位,必須仍儲存在RAM中,但可以將所有其他欄位儲存在磁碟上。
需要特別注意:
每個MySQL叢集表都需要主鍵。如果沒有定義主鍵,則 NDB
儲存引擎會自動建立一個所有的資料節點的記憶體大小都要一樣,由於叢集中任何資料節點都不能使用比其他資料節點最小記憶體還多的記憶體。換句話說,如果叢集中有
4台電腦,如果有3台電腦的記憶體都是3GB,而另外一台只有1GB,那麼每個資料節點最多隻能拿出1GB記憶體用於叢集。
關於安全
MySQL叢集的2個節點之間的通訊是不安全的;它們沒有經過任何保護機制加密或者防護。安全的叢集是放在防火牆之內的私網中,在外界中無法直接存取資料和管理節點(SQL節點也要和其他MySQL伺服器一樣注意安全防護)。
關於儲存引擎
MySQL叢集只支援 NDB 儲存引擎。也就是說,想要讓一個表在叢集節點中共用,就必須指定ENGINE=NDB(或 ENGINE=NDBCLUSTER 也一樣)。
MySQL叢集中也可以使用MyISAM或InnoDB儲存引擎來建立資料表,但是那些非NDB的表不會儲存在叢集節點間共用;它們獨立於建立的MySQL伺服器或者執行個體中。
關於匯入
你可以把各種版本的MySQL資料匯入到叢集中去。唯一的要求就是要匯入的表必須是 NDB 儲存引擎,也就是用 ENGINE=NDB 或 ENGINE=NDBCLUSTER方式建立的表。
關於資料類型
MySQL叢集支援所有常用的資料類型,除了跟MySQL相關的空間擴充類型(詳情請看 Chapter 16, Spatial Extensions)。另外,NDB表的索引也有些不同。
注意: MySQL叢集表(即 NDB 或 NDBCLUSTER
類型表)只支援固定長度記錄。這也意味著(舉例)如果有一條記錄包含有 VARCHAR(255)
欄位,那麼它就會需要用到255個字元的空間(和資料表使用的字元集和校正所要求的空間一樣大),而不管實際儲存的字元數。但是在MySQL
5.1中,只儲存被記錄實際佔用的欄位部分。
在NDB表中,資料庫名稱、表名稱和屬性名稱不能與其他表處理常式
中的一樣長。屬性名稱將被截短至31個字元,截短後如果不是唯一的,將導致錯誤。資料庫名稱和表名的總最大長度為122個字元(也就是說,NDB簇表名的
最大長度為122個字元減去該表所屬的資料庫的名稱中的字元數)。
關於事務
NDB儲存引擎的表都支援事務。在MySQL 5.0中,叢集只支援READ COMMITTED隔離等級。
關於外鍵
NDB儲存引擎不支援外鍵。跟MyISAM一樣,它們都不支援。
關於FULLTEXT索引
在MySQL 5.0中,NDB儲存引擎不支援FULLTEXT索引,其他除了MyISAM儲存引擎外也不支援。