MySQL Cluster 配置詳細介紹

在上篇文章已經詳細說明了MySQL Cluster搭建與測試,如今來講說詳細的配置參數。在MySQL Cluster 環境的配置文件 config.ini 裏面,每一類節點都有兩個(或以上)的相應配置項組,每一類節點的配置項都主要由兩部分組成,一部分是同類全部節點相同的配置項組,在[NDB_MGM DEFAULT]、[NDBD DEFAULT]和[MySQLD DEFAULT]這三個配置組裏面,並且每個配置組只出現一次;而另一部分則是針對每個節點獨有配置內容的配置項組[NDB_MGM]、[NDBD]和[MySQLD],因爲這三類配置組中配置的每個節點獨有的個性化配置,因此每個配置組都能出現屢次(每個節點一次)。下面是每一類節點的各類配置說明:
一、管理節點相關配置
在整個MySQL Cluster 環境中,管理節點相關的配置爲[NDBD_MGM DEFAULT]和[NDB_MGMD]相關的兩組:
1) [NDB_MGMD DEFAULT]中各管理節點的共用配置項:
PortNumber:配置管理節點的服務端程序(ndb_mgmd)監聽客戶端(ndb_mgm)鏈接請求和發送的指令,從文檔上能夠查找到,默認端口是1186端口。通常來講這一項不須要更改,固然若是是爲了在同一臺主機上面啓動多個管理節點的話,確定須要將兩個管理節點啓動不一樣的監聽端口;html

LogDestination:配置管理節點上面的 cluster 日誌處理方式。
a) 能夠寫入文件如:LogDestination=FILE:filename=mycluster.log,maxsize=500000,maxfiles=4;
b) 也能夠經過標準輸出來打印出來如:LogDestination=CONSOLE;
c) 還能夠計入 syslog 裏面如:LogDestination=SYSLOG:facility=syslog ;
d) 甚至多種方式共存:
LogDestination=CONSOLE;SYSLOG:facility=syslog;FILE:filename=/var/log/clusterlognode

Datadir:設置用於管理節點存放文件輸出的位置。如 process 文 件(.pid),clusterlog 文件(當LogDestination 有FILE處理方式存在時候)。
ArbitrationRank:配置各節點在處理某些事件出現分歧的時候的級別。有 0,1,2三個值能夠選擇。
a) 0 表明本節點徹底聽其餘節點的,不參與決策
b) 1 表明本節點有最高優先權,「一切由我來決策」
c) 2 表明本節點參與決策,可是優先權較1低,可是比0高
ArbitrationRank 參數不只僅管理節點有,MySQL節點也有。並且通常來講,全部的管理節點通常都應該設置成1,全部SQL節點都設置成2。mysql

2) [NDB_MGMD]是每一個管理節點配置一組,所需配置項以下(下面的參數只能設置在[NDB_MGMD]參數組中):
nodeid:爲節點指定一個惟一的 ID 號,要求在整個 Cluster 環境中惟一;
Hostname:配置該節點的 IP 地址或者主機名,若是是主機名,則該主機名必需要在配置文件所在的節點的/etc/hosts 文件中存在,並且綁定的IP是準確的。上面[NDB_MGMD DEFAULT]裏面的全部參數項,均可以設置在下面的[NDB_MGMD]參數組裏面,可是 nodeid和Hostname兩個參數只能設置在[NDB_MGMD]裏面,而不能設置在[NDB_MGMDDEFAULT]裏面,由於這兩個參數項針對每個節點都是不相同的內容。sql

二、NDB 節點相關配置
NDB 節點和管理節點同樣,既有各個節點共用的配置信息組[NDBD DEFAULT],也有每個節點個性化配置的[NDBD]配置組(實際上 SQL 節點也是如此)。
1) [NDBD DEFAULT]中的配置項:
NoOfReplicas:定義在 Cluster 環境中相同數據的分數,通俗一點來講就是每一份數據存放NoOfReplicas份。若是但願可以冗餘,那麼至少設置爲2(通常狀況來講此參數值設置爲2就夠了),最大隻能設置爲4。另外,NoOfReplicas值得大小,實際上也就是node group大小的定義。NoOfReplicas參數沒有系統默認值,因此必須設定,並且只能設置在[NDBD DEFAULT]中,由於此數值在整個Cluster集羣中一個node group中全部的NDBD節點都須要同樣。另外NoOfReplicas 的數目對整個Cluster環境中NDB節點數量有較大的影響,由於NDB 節點總數量是 NoOfReplicas * 2 * node_group_num;數據庫

DataDir:指定本地的pid 文件,trace文件,日誌文件以及錯誤日誌子等存放的路徑,無系統默認地址,因此必須設定;
DataMemory:設定用於存放數據和主鍵索引的內存段的大小。這個大小限制了能存放的數據的大小,由於ndb存儲引擎需屬於內存數據庫引擎,須要將全部的數據(包括索引 )都load到內存中。這個參數並非必定須要設定的,可是默認值很是小(80M),只也就是說若是使用默認值,將只能存放很小的數據。參數設置須要帶上單位,如 512M,2G 等。另外,DataMemory 裏面還會存放 UNDO 相關的信息,因此,事務的大小和事務併發量也決定了DataMemory 的使用量,建議儘可能使用小事務;
IndexMemory:設定用於存放索引(非主鍵)數據的內存段大小。和 DataMemory相似,這個參數值的大小一樣也會限制該節點能存放的數據的大小,由於索引的大小是隨着數據量增加而增加的。參數設置也如 DataMemory 同樣須要單位。IndexMemory 默認大小爲18M;實際上,一個 NDB 節點能存放的數據量是會受到 DataMemory 和 IndexMemory 兩個參數設置的約束,二者任何一個達到限制數量後,都沒法再增長能存儲的數據量。若是繼續存入數據系統會報錯「table is full」。
FileSystemPath:指定 redo 日誌,undo 日誌,數據文件以及meta 數據等的存放位置,默認位置爲 DataDir 的設置,而且在 ndbd 初始化的時候,參數所設定的文件夾必須存在。在第一次啓動的時候,ndbd 進程會在所設定的文件夾下創建一個子文件夾叫ndb_id_fs,這裏的 id 爲節點的 ID 值,如節點 id 爲3則文件夾名稱爲 ndb_3_fs。固然,這個參數也不必定非得設置在[NDBD DEFAULT]參數組裏面讓全部節點的設置都同樣(不過建議這樣設置),還能夠設置在[NDBD]參數組下爲每個節點單獨設置本身的 FileSystemPath值;
BackupDataDir:設置備份目錄路徑,默認爲 FileSystemPath/BACKUP。接下來的幾個參數也是很是重要的,主要都是與並行事務數和其餘一些並行限制有關的參數設置。
MaxNoOfConcurrentTransactions:設置在一個節點上面的最大並行事務數目,默認爲 4096,通常狀況下來講是足夠了的。這個參數值全部節點必須設置同樣,因此通常都是設置在[NDBD DEFAULT]參數組下面;
MaxNoOfConcurrentOperations:設置同時可以被更新(或者鎖定)的記錄數量。通常來講能夠設置爲在整個集羣中相同時間內可能被更新(或者鎖定)的總記錄數,除以 NDB節點數,所獲得的值。好比,在集羣中有兩個 NDB 節點,而但願可以處理同時更新(或鎖定 )100000 條記錄,那麼此參數應該被設置爲:100000 / 4 = 25000。此外,這裏的記錄數量並非指單純的表裏面的記錄數,而是指事物裏面的操做記錄。當使用到惟一索引的時候,表的數據和索引二者都要算在裏面,也就是說,若是是經過一個惟一索引來做爲過濾條件更新某一條記錄,那麼這裏算是兩條操做記錄。並且即便是鎖定也會產生操做記錄,好比經過惟一索引來查找一條記錄,就會產生以下兩條操做記錄:經過讀取惟一索引中的某個記錄數據會產生鎖定,產生一條操做記錄,而後讀取基表裏面的數據,這裏也會產生讀鎖,也會產生一條操做記錄。MaxNoOfConcurrentOperations 參數的默認值爲 32768。當咱們額度系統運行過程當中,若是出現此參數不夠的時候,就會報出「Out of operation records intransaction coordinator」這樣的錯誤信息;
MaxNoOfLocalOperations:此參數默認是 MaxNoOfConcurrentOperations * 1.1的大小,也就是說,每一個節點通常能夠處理超過平均值的 10%的操做記錄數量。可是通常來講,MySQL 建議單獨設置此參數而不要使用默認值,而且將此參數設置得更較大一些;
如下的三個參數主要是在一個事務中執行一條 query 的時候臨時用到存儲(或者內存)的狀況下所使用到的,所使用的存儲信息會在事務結束(commit 或者 rollback)的時候釋放資源;
MaxNoOfConcurrentIndexOperations:這個參數和 MaxNoOfConcurrentOperations參數比較相似,只不過所針對的是 Index 的 record 而已。其默認值爲 8192,對伊通常的系統來講都已經足夠了,只有在事務併發很是很是大的系統上纔有須要增長這個參數的設置。固然,此參數越大,系統運行時候爲此而消耗的內存也會越大;
MaxNoOfFiredTriggers:觸發惟一索引(hash index)操做的最大的操做數,這個操做數是影響索引的操做條目數,而不是操做的次數。系統默認值爲 4000,通常系統來講夠用了。固然,若是系統併發事務很是高,並且涉及到索引的操做也很是多,天然也就須要提升這個參數值的設置了;
TransactionBufferMemory:這個 buffer 值得設置主要是指定用於跟蹤索引操做而使用的。主要是用來存儲索引操做中涉及到的索引 key 值和 column 的實際信息。這個參數的值通常來講也不多須要調整,由於實際系統中須要的這部分 buffer 量很是小,雖然默認值只是 1M,可是對於通常應用也已經足夠了;數組

下面要介紹到的參數主要是在系統處理中作 table scan 或者 range scan 的時候使用的一些 buffer 的相關設置,設置的恰當能夠既節省內存又達到足夠的性能要求。
MaxNoOfConcurrentScans:這個參數主要控制在 Cluster 環境中併發的 table scan和 range scan 的總數量平均分配到每個節點後的平均值。通常來講,每個 scan 都是經過並行的掃描全部的 partition 來完成的,每個 partition 的掃描都會在該 partition所在的節點上面使用一個 scan record。因此,這個參數值得大小應該是「scan record」數目 * 節點數目。參數默認大小爲 256,最大隻能設置爲 500;MaxNoOfLocalScans:和上面的這個參數相對應,只不過設置的是在本節點上面的併發 table scan 和 range scan 數量。若是在系統中有大量的併發並且通常都不使用並行的話,須要注意此參數的設置。默認爲 MaxNoOfConcurrentScans * node 數目;
BatchSizePerLocalScan:該參用於計算在 Localscan(併發)過程當中被鎖住的記錄數,文檔上說明默認爲 64;
LongMessageBuffer:這個參數定義的是消息傳遞時候的 buffer 大小,而這裏的消息傳遞主要是內部信息傳遞以及節點與節點之間的信息傳遞。這個參數通常不多須要調整,默認大小爲 1MB 大小;架構

下面介紹一下與 log 相關的參數配置說明,包括 log level。併發

這裏的 log level 有多種,從 0 到 15,也就是共 16 種。若是設定爲 0,則表示不記錄任何 log。若是設置爲最高 level,也就是 15,則表示全部的信息都會經過標準輸出來記錄 log。因爲這裏的全部信息實際上都會傳遞到管理節點的 cluster log 中,因此,通常來講,除了啓動時候的 log級別須要設置爲 1 以外,其餘全部的 log level 都只須要設置爲 0 就能夠了。NoOfFragmentLogFiles:這個參數實際上和 Oracle 的 redo log 的 group 同樣的。其實就是 ndb 的 redo log group 數目,這些 redo log 用於存放 ndb 引擎所作的全部須要變動數據的事情,以及各類 checkpoint 信息等。默認值爲 8;
MaxNoOfSavedMessages:這個參數設定了能夠保留的 trace 文件(在節點 crash的時候參數)的最大個數,文檔上面說此參數默認值爲 25。
LogLevelStartup:設定啓動 ndb 節點時候須要記錄的信息的級別(不一樣級別所記錄的信息的詳細程度不同),默認級別爲 1;
LogLevelShutdown:設定關閉 ndb 節點時候記錄日誌的信息的級別,默認爲 0;
LogLevelStatistic:這個參數是針對於統計相關的日誌的,就像更新數量,插入數量,buffer 使用狀況,主鍵數量等等統計信息。默認日誌級別爲 0;
LogLevelCheckpoint:checkpoint 日誌記錄級別(包括 local 和 global 的),默認爲 0;
LogLevelNodeRestart:ndb 節點重啓過程日誌級別,默認爲 0;
LogLevelConnection:各節點之間鏈接相關日誌記錄的級別,默認 0;
LogLevelError:在整個 Cluster 中錯誤或者警告信息的日誌記錄級別,默認 0;
LogLevelInfo:普通訊息的日誌記錄級別,默認爲 0。性能

這裏再介紹幾個用來做爲 log 記錄時候須要用到的 Buffer 相關參數,這些參數對於性能都有必定的影響。固然,若是節點運行在無盤模式下的話,則影響不大。
UndoIndexBuffer:undo index buffer 主要是用於存儲主鍵 hash 索引在變動以後產生的 undo 信息的緩衝區。默認值爲 2M 大小,最小能夠設置爲 1M,對於大多數應用來講,2M 的默認值是夠的。固然,在更新很是頻繁的應用裏面,適當的調大此參數值對性能仍是有必定幫助的。若是此參數過小,會報出 677 錯誤:Index UNDO buffers overloaded;
UndoDataBuffer:和 undo index buffer 相似,undo data buffer 主要是在數據發生變動的時候所須要的 undo 信息的緩衝區。默認大小爲 16M,最小一樣爲 1M。當這個參數值過小的時候,系統會報出以下的錯誤: Data UNDO buffers overloaded,錯誤號爲 891;
RedoBuffer:Redo buffer 是用 redo log 信息的緩衝區,默認大小爲 8M,最小爲 1M。若是此 buffer 過小,會報 1221 錯誤:REDO log buffers overloaded。此外,NDB 節點還有一些和 metadata 以及內部控制相關的參數,但大部分參數都基本上不須要任何調整,因此就不作進一步介紹。若是有興趣但願詳細瞭解,能夠根據 MySQL官方的相關參考手冊,手冊上面都有較爲詳細的介紹。測試

三、SQL 節點相關配置說明
1) 和其餘節點同樣,先介紹一些適用於全部節點的[MySQLD DEFAULT]參數ArbitrationRank:這個參數在介紹管理節點的參數時候已經介紹過了,用於設定節點級別(主要是在多個節點在處理相關操做時候出現分歧時候設定裁定者)的。通常來講 ,全部的 SQL 節點都應該設定爲 2;
ArbitrationDelay:默認爲 0,裁定者在開始裁定以前須要被 delay 多久,單位爲毫秒。通常不須要更改默認值。
BatchByteSize:在作全表掃描或者索引範圍掃描的時候,每一次 fatch 的數據量,默認爲 32KB;
BatchSize:相似 BatchByteSize 參數,只不過 BatchSize 所設定的是每一次 fetch的 record 數量,而不是物理總量,默認爲 64,最大爲 992(暫時還不知道這個值是基於什麼理論而設定的)。在實際運行 query 的過程當中, fetch 的量受到 BatchByteSize 和 BatchSize兩個參數的共同制約,兩者取最小值;
MaxScanBatchSize:在 Cluster 環境中,進行並行處理的狀況下,全部節點的BatchSize 總和的最大值。默認值爲 256KB,最大值爲 16MB。
2) 每一個節點獨有的[MySQLD]參數組,僅有 id 和 hostname 參數須要配置,在以前各種節點均有介紹了,這裏就再也不說明了。

 

參考文章:

《MySQL性能調優與架構設計》

相關文章
相關標籤/搜索