2012-05-01 51 views
0

我正在用3臺機器構建一個非常小的NDB羣集。這意味着機器1將作爲MGM服務器,MySQL服務器和NDB數據節點。數據庫只有7 GB,因此我打算至少複製一次每個節點。現在,由於查詢最終可能會使用緩存在機器上的NDB節點中的數據,即使它不是該數據的主要來源節點,訪問速度也會更快(出於顯而易見的原因)。MySQL NDB羣集是否考慮節點距離?如果它們更近,它會使用複製嗎?

NDB集羣是否像這樣工作?我看到的每個例子都有至少5臺機器。手冊似乎沒有提及如何處理像這樣的節點差異。

+0

你是什麼意思,一個節點會緩存? NDB是內存數據庫引擎。數據被複制到每個節點。他們都有相同的數據。你只查詢MySQL服務器,不用擔心它使用哪個節點。 – Ami

+0

@Ami:什麼是[NoOfReplicas](http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-noofreplicas),如果數據是複製到每個節點? [本頁](http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-disk-data.html)也聲稱有可能擁有磁盤數據。 –

回答

2

有幾個問題在這裏:

可用性/ NoOfReplicas

MySQL集羣可以給當數據在2個或多個數據節點流程複製的高可用性。這要求NoOfReplicas配置參數設置爲2或更大。在NoOfReplicas = 1的情況下,每行僅存儲在一個數據節點中,而數據節點故障則意味着某些數據不可用,因此數據庫整體不可用。機/主機

對於NoOfReplicas = 2 HA配置的

數量,應該有至少3個獨立的主機。每個數據節點進程都需要1個數據節點進程,它具有所有數據的副本。當兩個數據節點進程之間的通信失敗時,需要三分之一的角色作爲「仲裁者」。這確保只有一個數據節點繼續接受寫入事務,並避免數據分歧(腦裂)。如果只有兩臺主機,則羣集只能適應其中一臺主機的故障,如果另一臺主機發生故障,整個羣集將失敗。仲裁角色非常輕便,所以這臺第三臺機器也可以用於幾乎任何其他任務。

數據局部性

在具有NoOfReplicas = 2 2節點配置中,每個數據節點處理存儲的所有數據。但是,這並不意味着只有一個數據節點進程用於讀取/寫入數據。這兩個過程都與寫入有關(因爲它們必須保留副本),並且通常,任一過程都可能參與讀取。

正在考慮改進雙節點配置讀取局部性的一些工作,但沒有具體的。

這意味着,當MySQLD(或另一個NdbApi客戶端)與兩個數據節點中的一個共同存在時,仍然會與其他數據節點進行大量通信。

相關問題