來源:Neo's Blog
MySQL 叢集支援的作業系統:
* Linux (Red Hat, Novell/SUSE)
* Sun Solaris
* IBM AIX
* HP-UX
* Mac OS X
MySQL 軟體:
* MySQL Max 版本 (並不是指 MaxDB)
* MySQL NDB Cluster
(以上可在此下載)
硬體規畫:
* 官方建議叢集伺服器的節點(Node) 硬體配備最低需求:
CPU: Intel/AMD x86
Memory: 512MB RAM
HDD: 3GB
Network: 1+ nodes (Standard Ethernet - TCP/IP)
最佳硬體配備:
CPU: 2x Intel Xeon, Intel Itanium, AMD Opteron, Sun SPARC, IBM PowerPC
Memory: 16GB RAM
HDD: 4x 36GB SCSI (RAID 1 Controller)
Network: 1-8 Nodes (Gigabit Ethernet); 8+ Nodes (Dedicated Cluster Interconnect e.g. SCI)
* 由於 MySQL Cluster 5.0 的架構是把資料(包含索引) 全都放在記憶體中,所以主機的記憶體的大小就非常重要,MySQL 官方提供了記憶體需求的計算公式:
(SizeofDatabase × NumberOfReplicas × 1.1 ) / NumberOfDataNodes
* 由於 Data Nodes 之間的資料交換頻繁,建議採用 Gigabit 的網路卡,如果資料庫非常的大,可以考慮使用 SCI (Scalable Coherent Interface) 。
* MySQL 叢集間的資料交換未經過加密,尤其 Managment node 預設是開放外部連接的。因此如果 MySQL 做為網站使用,必須將 MySQL 叢集放在防火牆後面或規畫在獨立的網域內,以防止有心人士竊取及破壞。
* 要完成 MySQL 叢集的運作環境最少需要 3 台伺服器,MySQL 官方建議最少用 4 台 (註1)。
* Management node 主機若無其它特殊用途,可選用較低階的伺服器。
硬體規畫常見問題:
只有 2 台主機可以執行 MySQL Cluster 嗎?
不行,因為只有2台機器沒辦法處理 Split-Brain (註2) 的狀況。依照 MySQL 工程師的說法,只有 2 台機器的狀況下,當叢集中一台主機掛掉,整個叢集就會 Shut Down,這樣也失去了叢集的意義了。(可參考 MySQL Cluster FAQ 的 arbitrator 部份)
Management node 可以跟 SQL node 放在同一台伺服器上嗎?
可以。
Management node 可以跟 Data node 放在同一台伺服器上嗎?
建議不要。Management node 除了啟動、關閉及備份叢集之外,最大的功能就是防止 Split-brain (註2) 的產生,如果跟 Data node 放在同一台伺服器,等於球員兼裁判, 叢集一出問題便很難處理。
Management node 掛掉怎麼辦?
Management node 主要用在 MySQL 管理叢集啟動、關閉及備份,因此叢集啟動後就算 Management node
掛了,MySQL 叢集也能正常運作。除非叢集中有主機掛掉或網路斷線,而且正巧 Management node 也掛了,這時才會發生
Split-Brain (註2) 的狀況。當然也可以配置2個以上的 Management node 來防止這種狀況發生,只是要確定每個
Management node 的 config.ini 必須完全相同。
如果我的資料庫非常大怎麼辦?
MySQL Cluster 5.0 的架構是把資料跟索引全放在記憶體,資料庫愈大,代表所需的記憶體也愈大。MySQL Cluster 5.1 已經著手進行把資料及索引放在硬碟的架構,如果你像這位仁兄有 88G 的資料庫,解決的方式有二種: 如果不怕系統出問題,就是換 MySQL Cluster 5.1 (目前在 Beta 階段),再不然就是多增加幾台 Data node 伺服器了。
註1:
3台配置:
Management node (*1) SQL nodes + Data nodes (*2)
4台配置:
Management node、SQL node (自行配置) + Data nodes (*2)
(以上若為網站使用,請自行注意安全性問題)
註2:
Split-Brain 是叢集應用中常見的問題。簡單的說,當叢集中的兩個節點間斷線時,便會認為對方停止服務,因此認為自己是叢集中唯一的節點,於是開始嘗試取代對方的服務,這種狀況通常稱為 Split-brain。
Split-brain 兩個節點間斷線可能是網路斷線,也有可能是另一個節點的主機掛了。當 Split-brain 發生的時候, 二邊的節點(node) 都會認為自己是叢集中唯一的節點,因此便會造成資源衝突及資料錯亂。
-->
MySQL Cluster 為了解決這個問題,便在叢集中就設了一個仲裁者 (Arbitrator),也就是 Management node 來防止這種狀況的發生。
(可參考 fswiki 的 MySQL Cluster Split-brain)
當然 Split-brain 不是三言二語可以說的明白,也不屬於本篇探討的範圍,有興趣可以請教 Google 大神。
MySQL Cluster 官方必讀文件:
MySQL Cluster 官方文件列表
MySQL Cluster FAQ
MySQL Cluster 目前的功能限制