一 概述:
- mysql的群集是個比較另類的東西,它本質上只是標準Mysql伺服器的一種儲存引擎而已——名稱叫 ndb 或者 ndbcluster。該引擎必須顯式的編譯進mysqld伺服器中才可以使用
- ndb支援較為廣泛的平台及作業系統,且經過多年的發展,已經可以應用於生產環境
- ndb引擎通過tcp協議交換群集資料
- ndb不需要傳統的共用存放裝置,而是通過 專門的 ndbd資料存放區引擎 來類比共用儲存
- ndbd儲存引擎支援 自動設定、多個資料複本、資料分區、自動分組等功能
- ndb提供專門的管理工具集
二 ndb群集構架
- 管理節點:ndb_mgmd 群集的心臟
- 管理介面:ndb_mgm 群集的管理介面
- 資料節點:ndbd 虛擬共用儲存引擎
- sql節點:mysqld 支援ndb引擎的mysqld伺服器
- 用戶端:任何的用戶端、如mysql、sqlyog等等, 無特殊要求
三 ndb群集中的邏輯概念和組件
- nodeid:節點id號——唯一標識 群集內各種組件的 唯一 id 。注意:對於資料節點 範圍為:1-48;對於管理節點:範圍為:1-63。可能的話,管理節點和mysqld節點在:49-63的範圍內。控制參數為:[ndbd] [ndbd_mgmd] nodeid
- replicas:複件——資料的冗餘度,可以理解為資料的副本個數。從資料安全和群集可用上來說,replicas越大越好,但終歸要考慮效能、網路通訊量、資料安全性要求等因素,mysql給出的預設值即一般的推薦值為2。控制參數為:[nbdb default] noofreplicas 。說的遠一點,mysql群集這點比使用共用儲存的 sqlserver群集和orace群集靈活、強大多了。
- nodegroup:資料節點群組——服務於replicas的邏輯概念和實現機制1,目的是實現組內的各節點的 複件 功能, 同時實現 組間的 複件功能。通過組 將資料的 複製 簡化、明細化、可靠化。一般 組號 是動態計算的,也可以明確指定。控制參數為:[nbdb] nodegroup
- partition:資料的的一個邏輯部分——服務於replicas的邏輯概念和實現機制2,細化邏輯資料片段,應該是複件 功能的最小邏輯單元
- mysqld:使用和支援ndb的容器——當mysqld識別到ndb引擎的表時,就調用ndb儲存引擎外掛程式 進而使用 ndb群集訪問功能。必須注意:ndb對mysqld來說只是一個外掛程式儲存引擎而已,其他mysqld必須的東西 和原來一樣!!
四 群集管理節點設定檔和配置參數
mysql在這一點上真的不錯。所有的程式——無論是用戶端、伺服器、還是各組件程式——都遵循同樣的規則:識別同樣的參數、讀取同樣的設定檔、依照同樣的規則進行擴充!
- 必須注意程式讀取設定檔的 次序、路徑
- 可以通過命令列選項覆蓋預設的行為
- 每種程式都讀取特定的節,注意通用節
群集設定檔:--config-file=filename
, -f filename
:預設為 "./config.ini"
群集管理節點讀取的節有很多很多,很多參數可以用在不同的節,某些參數只能用在特定的節。注意如果executeoncomputer 和 hostname 參數都不配置,則認為是 localhost
[computer]
- id=n #注意:此處的id僅僅就是id而不是其他節中 nodeid的別名,所以,不能寫成nodeid。該值用在 [ndbd] 和 [ndbd_mgmd] 的 executeoncomputer的值中
- hostname=name_or_ip
[mgm] [ndbd_mgmd]
- nodeid={1-63}
- executeoncomputer=id #不能用在 [??? default] 中
- hostname={localhost|hostname or ip}[:port] #不能用在 [??? default] 中
- datadir={.|path} #注意不用使用引號括起來的字串
- logdestination={FILE:filename=ndb_%nodeid%_cluster.log,maxsize=1000000,maxfile=6|[CONSOLE,{SYSLOG:{[
auth
, authpriv
, cron
, daemon
, ftp
, kern
, lpr
, mail
, news
, syslog
, user
, uucp
, local0
, local1
, local2
, local3
, local4
, local5
, local6
, local7
]}},FILE]...} #日誌目標可以用多種和多個;FILE目標可以使用絕對路徑;SYSLOG有很多的系統日誌目的的!
[ndbd default] [ndbd]
- noofreplicas={2|n} #必須在[ndbd default]中
- nodegroup=n #只是第一次啟動節點是會用到,主要用來向現有的群集添加新的資料節點用。通常ndb會自動計算分配該值
- nodeid=n #只能用於[ndbd]
- hostname=string #只能用於[ndbd]
- serverport={動態|1-64K} #通常用於有防火牆的os中
- datadir=path #指示trace files, log files, pid files and error logs 的位置。預設是節點進程的工作目錄。
- filesystempath=path # 指示 metadata, REDO logs, UNDO logs (for Disk Data tables), and data files 的位置,預設是
DataDir
。該目錄必須是os存在的!在該目錄下,節點檔案夾會自動建立,形如: ndb_2_fs
.
- backupdatadir=path #指示資料節點備份的目錄 ,預設 同
FileSystemPath
- datamemory={80M|1M-1024G}
- -----其他記憶體、中繼資料等參數
[mysqld] [api]
[tcp default] [tcp]
[sci]
五 資料節點設定檔和配置參數
使用標準的my.ini或my.cnf檔案
bind-address=hostname or specified ip address
ndb-connectstring={ localhost:1186 | [nodeid=id,] { hostname_or_ip [:port]} [,....n]}
ndb-nodeid=n
initial
initial-start
nowait-nodes=node_id_1 [,.....n]
六 mysqld節點設定檔和配置參數
使用標準的my.ini或my.cnf檔案
讀取節:[mysqd]
ndbcluster | ndbcluster={on | yes | no | off} #預設是關閉的,相當於指定了 skip-ndbcluster參數
skip-ndbcluster #顯式的關閉ndb引擎,這是預設的
ndb-nodeid={1-63} #如果設定,必須在ndb-connectstring前面。設定該值 可以 覆蓋 ndb-connectstring中的指定的nodeid、可以覆蓋群集設定檔中指定的nodeid、可以禁止管理服務自動為該mysqld節點自動分配nodeid。注意:ndb-nodeid 不能和 ndb-connectstring中指定 nodeid=n同時設定;該值 必須和config指定了點nodeid相匹配、或者config中沒有指定nodeid而是讓管理服務自動分配nodeid;當然該值不能和群集中已經分配的nodeid衝突!!
ndb-connectstring={ localhost:1186 | [nodeid=id,] { hostname_or_ip [:port]} [,....n]}
七 待續............... 還有很多未盡的事宜,不斷更新補充中......