2010-03-08 147 views
5

我讀過許多MySQL集羣文檔和一些教程,但我仍然有一些事情不清楚,他們的主要現在是:的MySQL集羣問題

  1. 當一個數據節點重新啓動(崩潰並再次上升)它的數據仍然可用?更新/添加將像往常一樣工作?它會「同步」嗎?
  2. 集羣的運行速度是否快於獨立運行?特別是,我多次更新行,但每次更新一行,這意味着網絡延遲可能會影響性能。有什麼模式可以讓事情變得更快,比如添加更多的SQL節點或添加模式數據節點?

關於問題#2中,行的更新是在以下語法:

UPDATE db_accounts.tbl_items SET items=items+%lld WHERE id_account=%u 

「id_account」 是一個索引(唯一的)。

回答

8

MySQL Cluster是一個內存數據庫(儘管某些列可以存儲在磁盤上,索引列不能)。如果插頭被拔出,您的數據就會消失。節點重新加入集羣的恢復過程是,它從正常存活的節點中提取丟失的數據(要求節點間有良好的快速鏈接),然後仔細應用複製事件,直到它趕上並可以主動參與。如果最近的備份可用,則可以從其中重建該備份而不是另一個節點,但原理相同:節點必須從頭開始重新填充數據。

MySQL簇基本上是一個分佈式散列表。保存特定行數據的NDB節點由應用於主鍵的散列算法確定。假設您的數據在整個節點上傳播良好,性能會因增加節點而增加。如果查詢必須觸及多個節點,性能可能受到嚴重影響 - 即。複雜的連接 - 但閃回很快,用於檢索指定主鍵的特定行。

顯然,考慮到節點是分佈式的,緩慢或擁塞的網絡會嚴重影響性能。

+0

非常感謝,我認爲會的! – Poni 2010-03-09 14:33:22

+0

「保存特定行數據的NDB節點由應用於主鍵的散列算法確定。」不在其他NDB節點中複製行嗎? – metdos 2011-12-12 08:01:19

5

即使您的MySQL簇表在內存中,默認情況下,任何寫操作都是異步檢查點到磁盤(可以基於每個表將其關閉)。

如果整個羣集失敗(數據中心斷電),那麼當您恢復數據時,將從這些磁盤檢查點檢索數據。缺點是,由於它們是異步創建的,因此您可能會錯過一些更新。

如果單個數據節點出現故障,並且從本地磁盤備份中恢復,它將通過應用來自其對等數據節點的最新更新而迎頭趕上。

要進一步提高數據的可用性,您可以使用MySQL異步複製到第二個站點(如果需要,可以在世界的另一側)。