MySQL NDB Cluster簡介及環境搭建

84223932發表於2014-05-16
本文主要描述MySQL NDB Cluster簡介及環境搭建。

歡迎轉載,請註明作者、出處。
作者:張正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑問,歡迎聯絡。


MySQL Cluster的組成有:
1.MySQL Server
2.NDB:管理資料storage
NDB 節點被組織成一個一個的NDB Group,一個NDB Group 實際上就是一組
存有完全相同的物理資料的NDB 節點群。
管理節點中有一個非常重要的引數叫NoOfReplicas,這個引數
指定了每一份資料被冗餘儲存在不同節點上面的份數,該引數一般至少應該被設定成2,
3.MGMT,管理節點需要最先被啟動
ndb_mgm -e SHOW 檢視各個節點狀態是否正常,是否都已經連線到了管理節點上面。


MySQL Cluster配置:
管理節點的配置:
1.PortNumber:管理節點埠,預設為1186
2.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
3.Datadir:設定管理節點存放檔案輸出的位置。
4.ArbitrationRank:配置各節點在處理某些事件出現分歧的時候的級別。有0,1,2三個值可以選擇。
a) 0 代表本節點完全聽其他節點的,不參與決策
b) 1 代表本節點有最高優先權,“一切由我來決策”
c) 2 代表本節點參與決策,但是優先權較1 低,但是比0 高
ArbitrationRank 引數不僅僅管理節點有,MySQL 節點也有。而且一般來說,所有
的管理節點一般都應該設定成1,所有SQL 節點都設定成2。


NDB_MGMD的配置:
1. ID為節點指定一個唯一的ID號,要求在整個Cluster環境中唯一。
2. hostname:該節點的IP地址或主機名


NDB節點配置:
NDBD_DEFAULT中的配置:
1.NoOfReplicas:每一份資料存放的份數(類似於Oracle ASM中的Redundancy)
2.DataDir:指定本地的pid 檔案,trace 檔案,日誌檔案以及錯誤日誌子等存放的
路徑,無系統預設地址,所以必須設定;
3.DataMemory:設定用於存放資料和主鍵索引的記憶體段的大小,預設值80M
4.IndexMemory:設定用於存放索引(非主鍵)資料的記憶體段大小,預設值為18M
注意:DataMemory 和IndexMemory引數設定的約束,兩者任何一個達到限制數量後,
都無法再增加能儲存的資料量。如果繼續存入資料系統會報錯“table is full”。
5.FileSystemPath:指定redo 日誌,undo 日誌,資料檔案以及meta 資料等的存放
位置,預設位置為DataDir 的設定
6.BackupDataDir:設定備份目錄路徑,預設為FileSystemPath/BACKUP。


與並行事務數和其他一些並行限制有關的引數設定:
*1.MaxNoOfConcurrentTransactions:設定在一個節點上面的最大並行事務數目,預設為4096,
*2.MaxNoOfConcurrentOperations:設定同時能夠被更新(或者鎖定)的記錄數量。其值應該設定為:總記錄數,除以NDB
節點數,所得到的值
*3.MaxNoOfLocalOperations:此引數預設是MaxNoOfConcurrentOperations * 1.1
的大小,也就是說,每個節點一般可以處理超過平均值的10%的操作記錄數量。但是一般來
說,MySQL 建議單獨設定此引數而不要使用預設值,並且將此引數設定得更較大一些;
*4.MaxNoOfConcurrentIndexOperations:這個引數和MaxNoOfConcurrentOperations
引數比較類似,只不過所針對的是Index 的record 而已。其預設值為8192,
*5.MaxNoOfFiredTriggers
*6.TransactionBufferMemory


系統做table scan 或者range scan 的時候使用的一些buffer 的相關設定:
1.MaxNoOfConcurrentScans:這個引數主要控制在Cluster 環境中併發的table scan
和range scan 的總數量平均分配到每一個節點後的平均值。引數預設大小為256,最大隻能設定為500
2.MaxNoOfLocalScans
3.BatchSizePerLocalScan
4.LongMessageBuffer


與log相關的引數配置:
log level 有從0 到15,也就是共16 種。如果設定為0,則表示不記錄任何log。如果設定為最
高level,也就是15,則表示所有的資訊都會透過標準輸出來記錄log。由於這裡的所有信
息實際上都會傳遞到管理節點的cluster log 中,所以,一般來說,除了啟動時候的log
級別需要設定為1 之外,其他所有的log level 都只需要設定為0 就可以了。
1.NoOfFragmentLogFiles 相同於Oracle的redo log的group,預設為8
2.MaxNoOfSavedMessages:這個引數設定了可以保留的trace 檔案(在節點crash
的時候引數)的最大個數,文件上面說此引數預設值為25。
3.LogLevelStartup:設定啟動ndb 節點時候需要記錄的資訊的級別(不同級別所記
錄的資訊的詳細程度不一樣),預設級別為1;
4.LogLevelShutdown:設定關閉ndb 節點時候記錄日誌的資訊的級別,預設為0;
5.LogLevelStatistic:這個引數是針對於統計相關的日誌的,就像更新數量,插入
數量,buffer 使用情況,主鍵數量等等統計資訊。預設日誌級別為0;
6.LogLevelCheckpoint:checkpoint 日誌記錄級別(包括local 和global 的),預設為0;
7.LogLevelNodeRestart:ndb 節點重啟過程日誌級別,預設為0;
8.LogLevelConnection:各節點之間連線相關日誌記錄的級別,預設0;
9.LogLevelError:在整個Cluster 中錯誤或者警告資訊的日誌記錄級別,預設0;
10.LogLevelInfo:普通訊息的日誌記錄級別,預設為0。
11.UndoIndexBuffer
12.UndoDataBuffer
13.RedoBuffer


SQL節點相關配置說明:
1.ArbitrationDelay:預設為0,裁定者在開始裁定之前需要被delay 多久,單位為毫秒。一般不需要更改預設值。
2.BatchByteSize:在做全表掃描或者索引範圍掃描的時候,每一次fatch 的資料量,預設為32KB;
3.BatchSize:類似BatchByteSize 引數,只不過BatchSize 所設定的是每一次fetch
  的record 數量,而不是物理總量,預設為64,最大為992
4.MaxScanBatchSize:在Cluster 環境中,進行並行處理的情況下,所有節點的
  BatchSize 總和的最大值。預設值為256KB,最大值為16MB。
5.[MySQLD]引數組,僅有id 和hostname




MySQL Cluster搭建

下載地址:http://dev.mysql.com/downloads/cluster/#downloads
三臺主機安裝MySQL Cluster RPM包

/etc/hosts
192.168.119.128  host1    #管理節點ndb_mgm
192.169.119.129  host2  #SQL節點1、NDB節點1
192.168.119.130  host3  #SQL節點2、NDB節點2

Notes:1.其中SQL節點與NDB節點是獨立的,可位於不同的主機上
       2.MySQL Cluster的RPM包安裝後,ndbd、ndb_mgm等程式都在/usr/bin下,因此我將/usr作為basedir

三臺主機上建立mysql使用者和組、並建立目錄:
groupadd mysql
useradd -g mysql mysql
mkdir -p /opt/cluster/data
chown -R mysql:mysql /opt/cluster

一、管理節點(host1)
管理節點的配置檔案
vi /opt/cluster/config.ini
[ndbd default]
DataMemory=40M
NoOfReplicas=2
IndexMemory=10M

[ndb_mgmd]
id=1
hostname=host1
DataDir=/opt/cluster

[ndbd]
id=2
HostName=host2
DataDir=/opt/cluster   #實際的Cluster資料檔案存放位置

[ndbd]
id=3
HostName=host3
DataDir=/opt/cluster   #實際的Cluster資料檔案存放位置

[mysqld]
id=4
HostName=host2

[mysqld]
id=5
HostName=host3

二、NDB和SQL節點(host2和host3)
配置檔案:vi /etc/my.cnf
[mysqld]  #針對MySQL Server
port = 3306 #(SQL節點2為:3307)
socket = /tmp/mysql.sock
datadir=/opt/cluster/data       #MySQL節點中,系統資料檔案存放的位置
basedir=/usr
ndbcluster
ndb-connectstring=host1
#default_storage_engine=ndb     #可在整個環境搭建好後,再加上這兩個引數,
#default_tmp_storage_engine=ndb #否則在初始化啟動SQL節點時會報錯。

[mysql_cluster]    #針對NDB
ndb-connectstring=host1

[client]
socket=/tmp/mysql.sock

三、SQL節點資料庫系統檔案初始化(host2和host3)
mysql_install_db --datadir=/opt/cluster/data --basedir=/usr --user=mysql

四、啟動
1.啟動管理節點(host1)
ndb_mgmd --initial -f /opt/cluster/config.ini
2.分別啟動NDB節點(host2和host3)
ndbd --initial
3.分別啟動SQL節點(host2和host3)      #此步驟經常會報各種錯誤,需要檢視localhost.err的[ERROR]記錄逐個解決
mysqld_safe --defaults-file=/etc/my.cnf --datadir=/opt/cluster/data --user=mysql &
4.檢視各節點狀態:
ndb_mgm -e show
如下:
[root@host2 cluster]# ndb_mgm -e show
Connected to Management Server at: host1:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.119.129  (mysql-5.6.11 ndb-7.3.2, Nodegroup: 0, Master)
id=3    @192.168.119.130  (mysql-5.6.11 ndb-7.3.2, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.119.128  (mysql-5.6.11 ndb-7.3.2)

[mysqld(API)]   2 node(s)
id=4    @192.168.119.129  (mysql-5.6.11 ndb-7.3.2)
id=5    @192.168.119.130  (mysql-5.6.11 ndb-7.3.2)

5.如果root使用者無法從host2連線到host3的MySQL Server,則需增加root從host2訪問host3 的許可權:
在host3上:grant usage on *.* to root@host2;

6.可以修改MySQL Server的預設引數:
default_storage_engine=ndb    
default_tmp_storage_engine=ndb

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26355921/viewspace-1162527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章