Data node 記憶體需求計算
Ndb cluster是把資料、索引全部放記憶體,所以記憶體需求很高。
(SizeofDatabase × NumberOfReplicas × 1.1 ) / NumberOfDataNodes 範例: (200G * 2 *1.1)/ 2 =220G
Node Group 數量計算
每個節點組,要有相同的 data node 數量
Node group = Data nodes / NoOfReplicas 假設有4個 data node config.ini中 NoOfReplicas=1,4/1=4,有4個節點組,每個節點組1個副本 NoOfReplicas=2,4/2=2,有2個節點組,每個節點組2個副本 NoOfReplicas=4,4/4=1,有1個節點組,有4個副本 NDB cluster 的重點是 data node, 以 data node 為中心。
SQL 語法不同
CREATE TABLE 要加上 ENGING=NDBCluster
CREATE TABLE tbl_name (col_name column_definitions) ENGINE=NDBCLUSTER; 每个NDBCLUSTERtable 都有一个主键。 如果在创建 table 时用户未定义主键, 则NDBCLUSTER存储引擎会自动生成一个隐藏的主键
ALTER TABLE 要加上 ENGING=NDBCluster
ALTER TABLE tbl_name ENGINE=NDBCLUSTER;
Cluster Online 開關測試
ndb_mgm> 1 stop // stop data node id 4
shell> ndbd //在 data node id 4 啟動 ndbd
//可正常關閉、啟動
ndb_mgm> 1 stop
shell> ndbd --initial //用 initial option 啟動
//可正常、關閉啟動,資料無影響
ndb_mgm> 1 stop
shell> ndbd
ndb_mgm> exit //ndb 啟動中, mgm exit
//可正常、關閉啟動
ndb_mgm> 1 stop
shell> ndbd
ndb_mgm> exit //ndb 啟動中, mgm exit
//可正常、關閉啟動
ndb_mgm> 1 stop
shell> ndbd --initial
ndb_mgm> exit //ndb initial 啟動中, mgm exit
//可正常、關閉啟動
關全部 ndb_mgmd
shell> kill 全部 ndb_mgmd shell> 啟動第一台 ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload shell> 啟動第二台 ndb_mgmd -f /var/lib/mysql-cluster/config.ini ndb_mgm> 1 stop //依序關閉,啟動 ndbd
先關data,再關全部 ndb_mgmd
ndb_mgm> 1 stop shell> kill 全部 ndb_mgmdpid shell> 啟動第一台 ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload shell> 啟動第二台 ndb_mgmd -f /var/lib/mysql-cluster/config.ini shell> ndbd (node 1) shell> ndbd --initial (node 2) //第二台需要initial啟動各node
首次啟動
啟動順序: 1 shell>sudo ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini --reload 有更改 config.ini ,重新啟動 mgmd 要加 --reload,沒更改不需加。 2 shell>sudo ndbd(data node全部) 3 shell>sudo systemctl start mysqld(sql node全部)一般啟動
啟動順序: 1 shell>sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload 2 shell>sudo ndbd(data node全部) 帶c參數 shell> sudo ndbd -c 10.10.100.100 //指定 mgm 位址 帶initial參數 shell>sudo ndbd --initial ////會重整這台ndbd的文件,只有第一次需要,每次都下initial 也沒關係 --initial 會清掉這台ndb 的file system,並且從其他node 載入data 及 metadata. 3 shell>sudo systemctl start mysqld(sql node全部)一般關閉
關閉順序: 1 shell>sudo systemctl stop mysqld 2 ndb_mgm> node_id stop 3 kill ndb_mgm_pid(kill mgm process)關閉重啟某個 data node
關閉順序: 1 ndb_mgm> node_id stop 2 等關閉完成 3 shell > ndbd / ndbd --initialRolling Restart (依序重啟cluster mgm/data node)
有幾種情況需要重啟
1 改 config.ini
2 增加 data node
3 改 node host
4 cluster重啟
流程: 1 關掉全部 ndb_mgmd,改全部 config.ini,全部重啟,reload config。 shell>ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload //第一個 ndb_mgmd shell>ndb_mgmd //其餘的 ndb_mgmd 如果有某個 ndb_mgmd 在執行,那麼啟動的ndb_mgmd,會使用該程式的設定, 所以要全部關閉才會生效。只有第一個ndb_mgmd --reload,後續的不需要 reload。 2 依序關閉 ndbd,改config, 重啟。可依序 node 處理。 3 依序關閉 mysql,改 config,重啟。可依序處理。
實務開關經驗
備份某個200G的線上 data node,要5小時
啟動某個200G的線上 data node,要3.5小時
關閉某個200G的線上 data node,要 ? 小時
設定檔
ndb_mgmd 設定檔 config.ini
/var/lib/mysql-cluster/confing.ini[ndb_mgmd] #Management Node 1 HostName=10.10.100.157 DataDir=/var/lib/mysql-cluster [ndb_mgmd] #Management Node 2 HostName=10.10.100.199 DataDir=/var/lib/mysql-cluster [ndbd default] NoOfReplicas=2 # Number of replicas DataMemory=912G # Memory allocate for data storage IndexMemory = 48G DataDir=/var/lib/mysql-cluster MaxNoOfTables = 1024 MaxNoOfAttributes = 5000000 MaxNoOfOrderedIndexes = 100000 FragmentLogFileSize=256M MaxNoOfConcurrentOperations=400000 MaxNoOfLocalOperations=440000 //配置多少記憶體給string,例如table name //defalut 25 = 25% 最大 25 //超過 100,ndbd會解釋為設定多少 bytes #StringMemory=25 [ndbd] HostName=10.10.100.157 NodeId=3 [ndbd] HostName=10.10.100.199 NodeId=4 [mysqld] #Node 5 HostName=10.10.100.165 [mysqld] #Node 6 HostName=10.10.100.166 [mysqld] #Node 7 HostName=10.10.100.200 [mysqld] #Node 8 HostName=10.10.100.201ndbd 設定檔
/etc/my.cnf[mysqld] ndbcluster ndb-connectstring=10.10.100.157 ndb-connectstring=10.10.100.199 [MYSQL_CLUSTER] ndb-connectstring=10.10.100.157 ndb-connectstring=10.10.100.199mysql node設定檔
/etc/my.cnf[mysqld] ndbcluster ndb-connectstring=10.10.100.157 ndb-connectstring=10.10.100.199 default-storage-engine=NDBCLUSTER validate_password_length=6 validate_password_policy=LOW datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid max_connections=5000 max_connect_errors=1844674407370954751 connect_timeout=15 default-time-zone='+07:00' max_user_connections=4900 #slow query slow_query_log=1 slow_query_log_file=/var/lib/mysql/slow-query.log long_query_time=1 max_heap_table_size=1024M tmp_table_size=1024M [MYSQL_CLUSTER] ndb-connectstring=10.10.100.157 ndb-connectstring=10.10.100.199
沒有留言:
張貼留言