搭建MySQL-Cluster集羣架構

實驗需求:部署MySQL集羣,減少數據庫單點故障。


實驗方案:準備5臺服務器,mgmd(192.168.100.1)作爲管理節點,sqlA(192.168.100.2)和sqlB(192.168.100.3)作爲SQL節點,ndbA(192.168.100.4)和ndbB(192.168.100.5)作爲數據節點,這5個節點構成MySQL Cluster體系


實施過程:

一.公共配置

1.所有節點上安裝MySQL集羣軟件

1.1所有節點卸載衝突包

官方提供的MySQL-Cluster相關軟件包已集成數據庫服務端/客戶端程序,因此可直接用來替換普通的MySQL服務端/客戶端程序。如果已安裝有普通版的mysql-server、mysql、MySQL-server、MySQL-client包,請先將其卸載(若沒有則忽略):

# service  mysql  stop

# chkconfig  mysql   off

# rpm -e  --nodeps  MySQL-server   MySQL-client MySQL-shared MySQL-embedded MySQL-test MySQL-devel


1.2清理殘餘配置文件

mv  /etc/my.cnf  /etc/my.cnf.bak

useradd    mysql


1.3 所有節點安裝MySQL-Cluster相關軟件包

# tar xvf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar

MySQL-Cluster-shared-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-shared-compat-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-server-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-client-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-test-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-devel-gpl-7.3.3-1.el6.x86_64.rpm

MySQL-Cluster-embedded-gpl-7.3.3-1.el6.x86_64.rpm

rpm -Uvh MySQL-Cluster-*.rpm


2.在SQL節點(sqlA、sqlB)服務器上,修改MySQL數據庫的root密碼


3.SQL節點添加授權數據庫用戶,方便客戶端訪問

mysql>grant all on*.*to'root'@'192.168.100.%'identifiedby'123456';


二.配置管理節點 mgmd (192.168.100.1)

1.創建工作文件夾

# mkdir -p /var/log/mysql-cluster


2.創建配置文件

[ndbd default]:爲所有的數據節點指定默認配置。

[ndbd]:指定某一個數據節點的配置。

[ndb_mgmd default]:爲所有的管理節點指定默認配置。

[ndb_mgmd]:指定某一個管理節點的配置。

[mysqld default]:爲所有的SQL節點指定默認配置。

[mysqld]:指定某一個SQL節點的配置。

# vim /etc/config.ini

[ndbd default]

NoOfReplicas=2//保留2份數據拷貝

DataMemory=80M                                 //數據緩存大小

IndexMemory=18M                             //索引緩存大小

[ndb_mgmd]

nodeid=1//第1個管理節點的ID號

hostname=192.168.100.1//此管理節點的地址

datadir=/var/log/mysql-cluster             //此管理節點的工作目錄

[mysqld]

nodeid=2//第1個SQL節點的ID號

hostname=192.168.100.2                    //第1個SQL節點的地址

[mysqld]

nodeid=3//第2個SQL節點的ID號

hostname=192.168.100.3                  //第2個SQL節點的地址

[ndbd]

nodeid=4//第1個數據節點的ID號

hostname=192.168.100.4               //第1個數據節點的地址

datadir=/mysql-cluster/data           //第1個數據節點的工作目錄,需創建

[ndbd]

nodeid=5//第2個數據節點的ID號

hostname=192.168.100.5//第2個數據節點的地址

datadir=/mysql-cluster/data         //第2個數據節點的工作目錄,需創建


三.配置數據節點 ndbA(192.168.100.4) 、ndbB (192.168.100.5)

1.創建工作文件夾

# mkdir -p /mysql-cluster/data


2.創建配置文件

# vim /etc/my.cnf

[mysqld]

datadir=/mysql-cluster/data                //指定數據存儲目錄

ndb-connectstring=192.168.100.1             //要連接的管理服務器的IP地址

ndbcluster                                  //指定運行的存儲引擎

[mysql_cluster]                              //集羣連接配置段

ndb-connectstring=192.168.100.1


四.配置SQL節點sqlA(192.168.100.2) 、sqlB (192.168.100.3)

在MySQL-Cluster集羣環境中,若某個數據庫未採用ndbcluster引擎(而是InnoDB、MyISAM等其他引擎),則當更新數據庫表時,可能無法同步到其他節點。

# vim /etc/my.cnf

ndbcluster                                     //指定運行的存儲引擎

default-storage-engine=ndbcluster             //設置默認存儲引擎

[mysql_cluster]                                //集羣連接配置段

ndb-connectstring=192.168.100.1


五.啓動MySQL集羣

正確的啓動順序:管理節點 --> 數據節點 --> SQL節點。

關閉順序:SQL節點 --> 數據節點 --> 管理節點。

數據節點、SQL節點都正常運行後,理論上管理節點可關閉(無監控等任務的話)。


1.啓動管理節點mgmd

# ndb_mgmd -f /etc/config.ini         //啓動管理節點,-f指定集羣配置文件

關於管理節點的啓動,有以下幾個需要注意的地方:

ndb_mgmd默認以後臺模式運行(--daemon),調試過程中可添加選項--nodaemon來禁用後臺模式。

ndb_mgmd初次啓動成功以後,會自動保存集羣配置,以後再啓動時會忽略-f指定的配置文件,除非添加--inital選項(比如向集羣中添加新的節點時,就應該重新初始化)。

若希望每次開機後自動運行ndb_mgmd,可將上述啓動操作寫入到/etc/rc.local配置文件內,例如:

# vim /etc/rc.local

....

ndb_mgmd -f /etc/config.ini


啓動完成後可查看監聽狀態:

# netstat -tuanlp | grep ndb


確認自動保存的集羣配置數據:

# ls -lh /usr/mysql-cluster/ndb_1_config.bin.1

-rw-r--r--.1 root root 4.1K 12月 2417:52/usr/mysql-cluster/ndb_1_config.bin.1


查看日誌文件相關數據:

# ls /var/log/mysql-cluster/

ndb_1_cluster.log ndb_1_out.log ndb_1.pid


2.啓動數據節點ndbA、ndbB

MySQL Cluster數據節點的對應服務程序爲ndbd(單線程的)、ndbmtd(多線程的),首次啓動或重新初始化時加 --initial選項,以後不用加。

# ndbd --initial         //啓動數據節點

在ndbA和ndbB服務器上,修改/etc/rc.local配置文件,以便每次開機後能自動啓動數據節點服務:

# vim /etc/rc.local

....

ndbd


3.啓動SQL節點sqlA、sqlB

對於MySQL Cluster的SQL節點來說,對應的服務程序就是mysqld,正常通過mysql腳本重新啓動服務就可以了。

# service mysql restart

# chkconfig mysql on


4.在管理節點mgmd上查看羣集狀態

直接執行ndb_mgm可進入羣集管理環境:

# ndb_mgm

ndb_mgm>

進入ndb_mgm> 環境後,執行SHOW可查看當前各節點的狀態,確保本例中的5個節點都已經成功連接;

ndb_mgm> SHOW


六.MySQL集羣的高可用性測試

1.數據同步測試

從客戶機訪問sqlA,執行寫數據庫、表相關操作:

# mysql -u root -p -h 192.168.100.2

mysql> create database mycluster;                                    

mysql> create table mycluster.a(id int(3));          

mysql> insert into mycluster.a values(123),(456);       //插入測試記錄

然後從客戶機訪問sqlB,確認結果(能看到從sqlA上所建的庫、表、表記錄):

# mysql -u root -p -h 192.168.100.3

mysql> select * from mycluster.a;        //查看錶記錄也一致


2.高可用性測試(關閉一臺數據節點)

關閉數據節點ndbA上的ndbd進程:

# killall -9 ndbd                     //暴力結束ndbd進程

# netstat -tulanp | grep ndbd             //確認已結束

此時從管理節點上查看集羣狀態,會發現ndbA已斷開連接:

ndb_mgm> show

然後從客戶機訪問sqlA或sqlB,仍然可讀、寫數據庫。比如可向mycluster.a表中再添加一條記錄:

mysql> insert into mycluster.a values(789);       //添加一條表記錄

以上測試成立說明:只要還有一臺數據節點可用,MYSQL數據庫整體就仍然可用。

接下來可進一步驗證故障恢復過程 —— 重新啓動ndbA上的ndbd服務進程,稍待片刻後強制關閉ndbB上的ndbd服務進程。然後再次訪問sqlA或sqlB節點,查詢mycluster.a表的記錄,發現與前面添加的結果一致:

mysql> select * from mycluster.a;                      //確認結果

以上測試成立說明:因故障中斷的數據節點(ndbA)恢復後,會立即從正常的數據節點(ndbB)同步數據,確保數據一致性。


3.高可用性測試(關閉一臺SQL節點)

當MySQL集羣內有多個SQL節點時,只要有一臺SQL節點可用,就可以通過它來訪問MySQL數據庫中保存的表數據。

關閉sqlA、sqlB中的任何一臺以後,還可以通過另外一臺來訪問mycluster庫。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章