配置文件結構總覽
###########################################################################
## MySQL Cluster 配置文件 config.ini
## [!] 參數有詳細說明,建議參考官方文檔
## [!!] 參數設置需詳細閱讀官方描述
## 官方文檔: https://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html
###########################################################################
1. TCP/IP 連接默認配置
[TCP DEFAULT]
SendBufferMemory=256k # [!] TCP 發送緩存,默認 256KB
#SendSignalId=0 # [!] 消息 ID 傳輸,默認關閉
#Checksum=0 # [!] 校驗和計算,默認關閉
ReceiveBufferMemory=64k # 接收緩存,默認 64KB,極少需修改
2. 管理節點 (NDB_MGMD) 配置
[NDB_MGMD DEFAULT]
[NDB_MGMD]
id=1 # 節點唯一 ID (1-63)
HostName=192.168.1.100 # 管理節點 IP/主機名
#ExecuteOnComputer= # 引用 [COMPUTER] 定義
PortNumber=2202 # 監聽端口,默認 2202
LogDestination=FILE:filename=/var/log/mgmd.log # 日誌輸出:文件/控制台/SYSLOG
ArbitrationRank=1 # 仲裁優先級:1=高,0=不參與,2=低(建議 MGM=1,SQL=0)
ArbitrationDelay=0 # 仲裁延遲(ms),默認 0
DataDir=/var/lib/mysql-cluster # 數據/日誌/PID 文件目錄
3. 數據節點默認配置 (NDBD DEFAULT)
[NDBD DEFAULT]
NoOfReplicas=1 # 副本數/節點組大小,無默認值,最大 4,必須設置
4. 數據節點 (NDBD) 具體配置
[NDBD]
id=11 # 數據節點 ID
HostName=192.168.1.101 # 數據節點 IP
#ExecuteOnComputer=
DataDir=/var/lib/mysql-cluster
#FileSystemPath= # 元數據/REDO/UNDO/數據文件目錄(需預先存在)
#BackupDataDir= # 備份目錄,默認 {FileSystemPath}/BACKUP
DataMemory=80M # 數據內存,默認 80MB,最小 1MB
IndexMemory=18M # 索引內存,默認 18MB,最小 1MB
#MaxNoOfConcurrentTransactions=4096 # [!] 並發事務數,全節點必須一致
#MaxNoOfConcurrentOperations=32768 # [!] 並發操作/鎖記錄數
#MaxNoOfLocalOperations= # [!] 本地操作數,默認 1.1x ConcurrentOperations
#MaxNoOfConcurrentIndexOperations=8192 # [!] 並發索引操作
#MaxNoOfFiredTriggers=4000 # [!] 觸發器並發數
#TransactionBufferMemory=1M # [!] 事務緩存
#MaxNoOfConcurrentScans=256 # [!] 並發掃描數,最大 500
#MaxNoOfLocalScans= # [!] 本地掃描記錄數
#BatchSizePerLocalScan= # [!] 掃描批次大小
#LongMessageBuffer=1M # [!] 內部消息緩存
#NoOfFragmentLogFiles=8 # [!] REDO 日誌文件數
#MaxNoOfSavedMessages=25 # [!] 追蹤文件最大數
#MaxNoOfAttributes=1000 # [!] 最大屬性數,最小 32
#MaxNoOfTables=128 # [!] 最大表數,範圍 8-1600
#MaxNoOfOrderedIndexes=128 # [!] 最大有序索引數
#MaxNoOfUniqueHashIndexes=64 # [!] 最大唯一哈希索引數
#MaxNoOfTriggers=768 # [!] 最大觸發器數
#LockPagesInMainMemory=0 # 鎖定內存頁面,避免交換,默認關閉
#StopOnError=1 # 錯誤時退出還是重啟,默認啟用
#Diskless=0 # 無磁盤模式,默認關閉
#RestartOnErrorInsert=0 # 僅調試版可用
#TimeBetweenWatchDogCheck=4000 # [!] 看門狗檢查間隔(ms)
#StartPartialTimeout=30000 # [!] 等待所有數據節點超時(ms),0=無限
#StartPartitionedTimeout=60000 # [!] 就緒但可能隔離時等待(ms)
#StartFailureTimeout=60000 # [!] 數據節點啟動序列超時(ms),0=無超時
#HeartbeatIntervalDbDb=1500 # [!] 數據節點間心跳間隔(ms)
#HeartbeatIntervalDbApi=1500 # [!] 數據節點-API節點心跳(ms)
#TimeBetweenLocalCheckpoints=20 # [!] 本地檢查點間隔
#TimeBetweenGlobalCheckpoints=2000 # [!] 全局檢查點間隔(ms)
#TimeBetweenInactiveTransactionAbortCheck=1000 # [!] 非活動事務檢查間隔(ms)
#TransactionInactiveTimeout=0 # [!] 事務非活動超時(ms)
#TransactionDeadlockDetectionTimeout=1200 # [!] 死鎖檢測超時(ms)
#NoOfDiskPagesToDiskAfterRestartTUP=40 # [!] 重啟後數據頁寫入速度(3.2MB/s)
#NoOfDiskPagesToDiskAfterRestartACC=20 # [!] 重啟後索引頁寫入速度(1.6MB/s)
#NoOfDiskPagesToDiskDuringRestartTUP=40 # [!] 重啟期間數據頁寫入速度
#NoOfDiskPagesToDiskDuringRestartACC=20 # [!] 重啟期間索引頁寫入速度
#ArbitrationTimeout=1000 # [!] 仲裁超時(ms)
#UndoIndexBuffer=2M # [!] UNDO 索引緩存,最小 1MB
#UndoDataBuffer=16M # [!] UNDO 數據緩存,最小 1MB
#RedoBuffer=8M # [!] REDO 緩存,最小 1MB
# 日誌級別 (默認級別括號內)
#LogLevelStartup=1 # 啟動
#LogLevelShutdown=0 # 關閉
#LogLevelStatistic=0 # 統計
#LogLevelCheckpoint=0 # 檢查點
#LogLevelNodeRestart=0 # 節點重啟
#LogLevelConnection=0 # 連接
#LogLevelError=0 # 錯誤警告
#LogLevelInfo=0 # 一般信息
#BackupDataBufferSize=2M # [!] 備份數據緩存
#BackupLogBufferSize=2M # [!] 備份日誌緩存
#BackupMemory=4M # 總備份緩存 = Data + Log
#BackupWriteSize=32k # 備份寫入塊大小
5. SQL 節點 (MYSQLD) 配置
[MYSQLD DEFAULT]
[MYSQLD]
id=21 # SQL 節點 ID
HostName=192.168.1.102 # SQL 節點 IP
#ExecuteOnComputer=
ArbitrationRank=0 # SQL 節點不參與仲裁
ArbitrationDelay=0
#BatchByteSize=32k # [!!] 批次字節數,默認 32KB
#BatchSize=64 # [!!] 批次記錄數,默認 64,最大 992
#MaxScanBatchSize=256k # [!] 掃描批次大小,默認 256KB,最大 16MB
關鍵配置提醒
- NoOfReplicas 為必填項,決定高可用架構
- DataMemory/IndexMemory 需根據實際數據量規劃,總和勿超過物理內存 70-80%
- ArbitrationRank:管理節點設 1,SQL 節點設 0,確保單一仲裁者
- 所有節點
MaxNoOfConcurrentTransactions 必須一致
- 生產環境建議啟用
LockPagesInMainMemory=1 防止 swap
- 詳細參數說明請參考 MySQL 官方文檔