本文介紹了MySQL Cluster的概念和架構,並通過幾個實例詳細討論了Cluster的配置方法,啟動關閉,常用維護方法的概念。 ...
Cluster簡單來說,就是一組“節點”,節點是一個邏輯概念,一臺電腦可以代表一個節點,也可以代表多個節點,這些節點的功能有所不同,有的節點是用來存放數據的(數據節點),存放數據表結構的(sql節點),有的用來對其他節點進行管理(管理節點),這些節點組合在一起,可以為應用提供高可用、高性能和可縮放的Cluster數據管理。
MySQL使用NDB存儲引擎來對數據節點進行存儲。理論上,MySQL Cluster通過數據的分散式存儲和可擴展的系統架構,滿足更大規模的應用,而且通過冗餘策略,大大提高了系統的可靠性和數據的有效性。
1.MySQL Cluster架構
MySQL Cluster按照節點類型分為3部分
管理節點
用來對其他的節點進行管理,實際操作中,通過一個叫做config.ini的配置文件進行維護而起到管理作用,該文件可以用來配置有多少需要維護的副本、需要在每個數據節點上為數據和索引分配多少記憶體、數據節點的位置,在每個數據節點上保存數據的磁碟位置,sql節點的位置等信息。管理節點只能有一個,配置要求不高。
sql節點
可以理解為和應用和數據節點之間的一個橋梁,應用不能直接訪問數據節點,只能先訪問sql節點,然後sql節點再去訪問數據節點返回數據,cluster中可以有多個sql節點,通常來說,sql節點越多分配到每個的負載就越小。
數據節點
用來存放cluster中的數據,可以有多個數據節點,每個數據節點可以有多個鏡像節點,任何一個放生故障,只要鏡像節點正常,cluster就能正常運行。
MySQL Cluster的訪問過程:
前臺應用一定的負載均衡演算法將對資料庫的訪問分散到不同的sql節點上,然後sql節點對數據節點進行數據訪問並從數據節點返回結果,最後sql節點將受到的結果返回給前臺應用。而管理節點並不參與訪問過程,它只用來對sql節點和數據節點進行配置管理。
1.1 MySQL Cluster配置
管理節點配置,示例說明
1.在伺服器192.168.7.187的/home/zzx2/下創建目錄mysql-cluster文件夾,並且創建配置文件config.ini
mkdir /home/zzx2/mysql-cluster cd /home/zzx2/mysql-cluster touch config.ini
其中config.ini的配置如下
[NDBD DEFAULT] NoOfReplicas=1 #每個數據節點的鏡像 DataMemory=500M #每個數據節點中給數據分配的記憶體 IndexMemory=300M #每個數據節點給索引分配的記憶體 [TCP DEFAULT] portnumber=2202 #數據節點的預設連接埠 [NDB_MGMD] id=1 hostname=192.168.7.187 datadir=/home/zzx2/mysql-cluster [NDBD] id=2 hostname=192.168.7.187 datadir=/home/zzx2/mysql/data [NDBD] id=3 hostname=192.168.7.55 datadir=/home/zzx2/mysql/data [MYSQLD] hostname=192.168.7.187 [MYSQLD] hostname=192.168.7.55 [MYSQLD]# Options for mysqld process;
[NDB_MGMD] 表示管理節點的配置,只能有一個
[NDBD DEFAULT] 表示每個數據節點的預設配置,只有一個
[NDBD] 每個數據節點的配置,有多個
[MYSQLD] 表示SQL的配置,有多個,分別寫上不同的SQL的IP地址
SQL節點的配置
只需要在MySQL的配置文件,my.cnf中增加
#Options for mysqld process: [MYSQLD] ndbcluster # 運行NDB的存儲引擎 ndb-connectstring=192.168.7.187 # 定位管理節點 #Options for ndbd procsess: [MYSQL_CLUSTER] ndb-connectstring=192.168.7.187
2. 使用Cluster
2.1.Cluster的啟動
節點的啟動順序:管理節點--數據節點--SQL節點
ndb_mgmd 是cluster的管理伺服器
ndbd進程:是使用NDB儲存引擎處理表中數據的進程,通過該進程,存儲節點能夠實現分散式事務管理,節點恢復,線上備份。
ndb_mgm工具: 在節點全部啟動成功後,可以用show命令來查看集群的狀態。
2.2.Cluster的測試
NDB存儲引擎的測試
Cluster只能使用NDB存儲引擎表,
在任意一個SQL節點的test庫中創建測試表,設置存儲引擎為NDB
在另外一個SQL節點中查詢測試表
將測試表的存儲引擎改為MyISAM,在此插入
再次查詢發現無法查詢
單點故障測試
任何一種節點,都存在單點故障的可能性,在Cluster的設置中,應該儘量對每一類節點設置冗餘。對於管理節點,一般不需要特殊配置,只需要將管理工具和配置文件放在多台主機上。
SQL節點故障並不會引起數據查詢故障
數據節點的故障的影響取決於數據的存儲是相互鏡像還是一份數據分成幾塊存儲。
2.3.Cluster的關閉
關閉命令:ndb_mgm -e shutdown
註意的是:SQL節點關閉後,MySQL服務並不會停止。
3. 維護Cluster
3.1.數據備份
方法1:使用mysqldump工具,
方法2:cluster的物理備份方法,啟動管理伺服器(ndb_mgm),執行“start backup”,
備份的數據保存在每個數據節點下,
對於大數據量的備份,MySQL cluster提供了幾個備份的參數可供調整:
backdatabuffersize: 將數據寫入磁碟之前用於對數據進行緩衝處理的記憶體量。
backlogbuffersize: 將日誌記錄寫入磁碟前對其進行緩衝處理的記憶體量
backupmemory: 將資料庫節點只為備份分配的總記憶體。
3.2.數據恢復
對於用“start backup”進行備份的cluster,必須使用ndb_restore工具進行數據恢復,shell命令如下:
ndb_restore -b 3 -n 2 -c host=192.168.7.187:1186 -m -r /home/zzx2/mysql/data/backup/backup-3
命令行各參數的意義:
參數 | 說明 |
-b | 備份id |
-n | 節點id |
-m | 恢復表定義 |
-r | 恢復路徑 |
-c | cluster管理器連接串 |
3.3.日誌管理
MySQL提供了兩種日誌,分別是集群日誌和節點日誌,前者提供了所有的Cluster節點生成的日誌,後者僅僅記錄了數據節點的本地事件。
可以使用ndb_mgm客戶端工具打開或者關閉日誌。
在shell中執行ndb_mgm命令;執行clusterlog info命令查看當前日誌狀態;當前日誌是打開的,用clusterlog off關閉,在此查看用哪個clusterlog on打開。
Cluster的日誌類型有很多,可以按照下麵的類別進行過濾:
1.Category(類別),可以是以下值:startup,shutdown,checkpoint,noderestart,connection,error等
2.Prior(優先順序),有1~15表示,1最重要,每種category都有一個預設的優先順序閾值,達到閾值會被記錄
3.Severity Level(嚴重級別),可以使以下值之一,alert,critical,error,warning,info或debug
過濾的方法可以使用ndb_mgm工具完成。