mysqlcluster的常見問題

2022-03-11 13:12:51 字數 2394 閱讀 9871

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儲存引擎外也不支援。

ndb和innodb一樣會設定檢查點,定期的將資料寫入到磁碟中,ndb啟動的時候會將資料載入到記憶體(磁碟表只載入主鍵和索引的列,稍後會提到)。

記憶體和磁碟表的最大的區別就是:磁碟表只會將主鍵列和索引列以及索引load到記憶體中,其他沒有索引的列儲存在磁碟,儲存在表空間的資料檔案中。而記憶體表是全部列都load到記憶體

記憶體表直接從記憶體中讀取,速度快。磁碟表如果你能用到覆蓋索引也非常快,如果不能就要通過記憶體中的主鍵索引定位到磁碟,從磁碟中讀取會慢一點。至於ndb啟動時候如何載入你可以看一下官方文件,看一下ndb的下詳細啟動過程。

mysql cluster的常見問題

ndb和innodb一樣會設定檢查點,定期的將資料寫入到磁碟中,ndb啟動的時候會將資料載入到記憶體 磁碟表只載入主鍵和索引的列,稍後會提到 記憶體和磁碟表的最大的區別就是 磁碟表只會將主鍵列和索引列以及索引load到記憶體中,其他沒有索引的列儲存在磁碟,儲存在表空間的資料檔案中。而記憶體表是全部列...

mysql cluster 安裝測試

mysql cluster 實際上是在無共享儲存裝置的情況下實現的一種完全分布式資料庫系統,其主要通過ndb cluster 簡稱ndb 儲存引擎來實現。也就是資料庫集群,最開始的版本是將資料放在記憶體,新的版本是只將索引放入記憶體。記憶體和網路影響 mysql cluster 效能。一安裝mysq...

Ubuntu安裝Mysqlcluster集群

可參考 具體的安裝過程,可參考mysqlcluster手冊中的第4章。安裝 1,檢查系統是否已存在mysql組和mysql使用者,若不存在則新建mysql使用者組和mysql使用者 2,解壓到 usr local目錄下並建立mysql的軟鏈結 3,初始化mysql,在執行初始化之前必須先安裝依賴包 ...