依賴包要求:cmake gcc gcc-c++ ncurses Perl ncurses-develhtml
在7.3以及更高的版本中, WITH_NDB_JAVA是默認啓動的,須要配置JAVA環境,
javaWITH_CLASSPATH配置JAVA目錄
。若是不啓用,能夠: -DWITH_NDB_JAVA=OFF。
CMAKE配置選項:node
具體參閱:https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html#cmake-general-optionsmysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysqld.sock -DWITH_EXTRA_CHARSETS=all -DWITH_SSL=bundled -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_NDB_JAVA=OFF -DWITH_NDBCLUSTER_STORAGE_ENGINE=1 -DWITH_boost=/usr/local/boostc++
SQL節點存儲的是表結構,數據節點存儲的是數據文件。sql
配置參數:數據庫
數據節點配置參數參閱:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-params-ndbd.html https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbd-definition.htmlapi
SQL節點配置參數參閱:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-params-api.html https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-api-definition.html緩存
管理節點參數參閱:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-params-mgmd.html https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-mgm-definition.htmltcp
其餘參數參閱:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-params-other.html
管理節點須要一個config.ini文件,SQL節點和數據節點須要一個my.cnf文件。
SQL節點與數據節點配置(my.cnf): #SQL節點與數據節點配置都是同樣的,在管理節點上區分兩個節點。
[mysqld]
ndbcluster
skip-ndbcluster
binlog_format=row
log-bin=fb-bin
server-id=2151
ndb-connectstring=192.168.152.156
secure-file-priv=''
[mysql_cluster]
ndb-connectstring=192.168.152.156
[ndbd]
connect-string=192.168.152.156
[ndb_mgm]
connect-string=192.168.152.156
[ndb_mgmd]
config-file=/etc/mysql/config.ini
[mysqldump]
quick
max_allowed_packet = 24M
[mysql]
auto-rehash #使用TAB鍵自動補全
[mysqld_safe]
open-files-limit = 65536
管理節點(config.ini):
[ndbd default] #數據節點全部默認配置
NoOfReplicas=2 #一份數據在集羣中的存在份數,與數據節點對應
DataMemory=80M #裝載到內存中的數據大小
IndexMemory=18M #裝載到內存中索引大小
ServerPort=2202 #默認端口
LockPagesInMainMemory=1 #將進程鎖定在內存中,以免與磁盤的交換
NoOfFragmentLogFiles=300 #設置節點的REDO日誌文件的個數
DataDir=/usr/local/mysql/data #數據節點目錄,包括集羣日誌文件,進程輸出文件和守護進程的進程ID(PID)文件
MaxNoOfConcurrentOperations=100000 #設置事務中同時更新的最大記錄數
MaxNoOfConcurrentTransactions=50000 #定義節點中最大事務數
ODirect=1 #開啓這個設置會使內地版NDB嘗試採用O_DIRECT寫LCP、備份、重作日誌,一般使用更少的內存和cpu。
SchedulerSpinTimer=400 #定義線程在進入睡眠狀態以前多少毫秒被執行
SchedulerExecutionTimer=100 #定義線程在被髮送前多少毫秒被執行
RealTimeScheduler=1 #設置ndbcluster線程啓用真實時間的時序安排
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=200
RedoBuffer=32M #設置redo日誌緩存
MaxNoOfTables=1024 #該參數爲做爲總體的簇設置了最大表對象數目。該參數的默認值爲128。最小值爲8,最大值爲20320,每一個表對象每節點約需20KB的空間。
MaxNoOfOrderedIndexes=256 #設置哈希索引在系統中贊成時間被使用的總數,該參數的默認值爲128。
BackupMaxWriteSize=1M #設置備份日誌和備份數據緩衝寫入磁盤的默認大小
BackupDataBufferSize=16M #設置備份數據緩存的大小
BackupLogBufferSize=4M #設置備份日誌緩存的大小
BackupMemory=20M #備分內存,該參數是BackupDataBufferSize和BackupLogBufferSize之和。
[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M
[ndb_mgmd] #管理節點
Nodeid=1
HostName=198.51.100.10 #IP或者hostname,管理節點
DataDir=/usr/local/mysql/data #數據文件存放目錄
[ndbd] #數據節點節點1
HostName=198.51.100.30 #節點IP
NodeId=11 #節點ID
LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0
[ndbd] #數據節點節點2
HostName=198.51.100.40 #節點IP
NodeId=12
LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0
[mysqld] #sql節點1
Nodeid=21
HostName=198.51.100.20
[mysqld] #sql節點2
Nodeid=22
HostName=198.51.100.20
初始化數據庫:
5.7以前:
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
5.7以後:
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
管理節點上進行初始化:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --ndb-nodeid=1 #指定config.ini文件位置,配置文件位置
數據節點上執行:
--ndbcluster(--initial):該NDBCLUSTER
存儲引擎是必要的使用NDB簇
SQL節點上執行:
service mysqld start
啓動順序:管理節點-->數據節點-->SQL節點
關閉集羣,在管理節點上執行:
ndb_mgm -e shutdown
錯誤解決:
一、Mixing of localhost (default for [NDBD]HostName) with other hostname(192.168.152.156) is illegal
查找管理節點上config.ini文件中的[ndbd]模塊,刪除多餘的。
二、Nodegroup 0 has 1 members, NoOfReplicas=2
編輯config.ini文件,修改參數:NoOfReplicas值修改成1。
三、數據節點連接不上
檢查防火牆是否關閉,配置文件config.ini是否配置正確。
mysql cluster限制:
一、數據節點的節點ID範圍必須是1-48 管理節點的節點ID在1-255 NDB羣集中的最大節點總數爲255 元數據最大數據量爲20320
二、事物隔離級別只支持RC級別,當更新或刪除多行數據時,可能會發生讀已提交現象,這時必須使用當前讀。
三、任何包含BLOB和TEXT的列,NDB引擎都會使用S鎖來鎖定改行,可是對於有索引的列,不會使用共享鎖
四、錯誤會致使整個事物回滾
五、不適合處理大事物,由於會消耗更多的內存,自己NDB引擎是創建在內存上的
六、硬件機器必須是同一種體系結構
七、sql_log_bin
對數據操做沒有影響; 可是,它支持模式操做。NDB羣集沒法爲具備BLOB
列但沒有主鍵的表生成二進制日誌。
八、副本冗餘數量爲1時,數據丟失沒法恢復,因此必須爲2.