MySQL Cluster 配置详细介绍
在上篇文章已經詳細說明了MySQL Cluster搭建與測試,現在來說說詳細的配置參數。在MySQL Cluster 環境的配置文件 config.ini 里面,每一類節點都有兩個(或以上)的相應配置項組,每一類節點的配置項都主要由兩部分組成,一部分是同類所有節點相同的配置項組,在[NDB_MGM DEFAULT]、[NDBD DEFAULT]和[MySQLD DEFAULT]這三個配置組里面,而且每一個配置組只出現一次;而另外一部分則是針對每一個節點獨有配置內容的配置項組[NDB_MGM]、[NDBD]和[MySQLD],由于這三類配置組中配置的每一個節點獨有的個性化配置,所以每一個配置組都能出現多次(每一個節點一次)。下面是每一類節點的各種配置說明:
1、管理節點相關配置
在整個MySQL Cluster 環境中,管理節點相關的配置為[NDBD_MGM DEFAULT]和[NDB_MGMD]相關的兩組:
1) [NDB_MGMD DEFAULT]中各管理節點的共用配置項:
PortNumber:配置管理節點的服務端程序(ndb_mgmd)監聽客戶端(ndb_mgm)連接請求和發送的指令,從文檔上可以查找到,默認端口是1186端口。一般來說這一項不需要更改,當然如果是為了在同一臺主機上面啟動多個管理節點的話,肯定需要將兩個管理節點啟動不同的監聽端口;
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/clusterlog
Datadir:設置用于管理節點存放文件輸出的位置。如 process 文 件(.pid),clusterlog 文件(當LogDestination 有FILE處理方式存在時候)。
ArbitrationRank:配置各節點在處理某些事件出現分歧的時候的級別。有 0,1,2三個值可以選擇。
a) 0 代表本節點完全聽其他節點的,不參與決策
b) 1 代表本節點有最高優先權,“一切由我來決策”
c) 2 代表本節點參與決策,但是優先權較1低,但是比0高
ArbitrationRank 參數不僅僅管理節點有,MySQL節點也有。而且一般來說,所有的管理節點一般都應該設置成1,所有SQL節點都設置成2。
2) [NDB_MGMD]是每個管理節點配置一組,所需配置項如下(下面的參數只能設置在[NDB_MGMD]參數組中):
nodeid:為節點指定一個唯一的 ID 號,要求在整個 Cluster 環境中唯一;
Hostname:配置該節點的 IP 地址或者主機名,如果是主機名,則該主機名必須要在配置文件所在的節點的/etc/hosts 文件中存在,而且綁定的IP是準確的。上面[NDB_MGMD DEFAULT]里面的所有參數項,都可以設置在下面的[NDB_MGMD]參數組里面,但是 nodeid和Hostname兩個參數只能設置在[NDB_MGMD]里面,而不能設置在[NDB_MGMDDEFAULT]里面,因為這兩個參數項針對每一個節點都是不相同的內容。
2、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官方的相關參考手冊,手冊上面都有較為詳細的介紹。
3、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性能調優與架構設計》
總結
以上是生活随笔為你收集整理的MySQL Cluster 配置详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua工具库penlight--06数据
- 下一篇: Service的生命周期