close

關於 MySQL Cluster 的介紹,可參考 這篇 文章以及 官網(含下載)。

截至文章發表為止的最新版本是 7.2.10 ,因為目前搜尋到的 linux 版安裝方法都是比較舊的 MySQL Cluster 版本,新版的安裝方式又略有不同,

因此參考了很多前輩的記錄才得以安裝完成。

另外,本來想下載依據官方的下載內容下載 RPM 檔裝在 OpenSuse 上,但是發現下載來的 RPM 檔沒有管理節點的安裝檔,也找不到任何說明(但是之前的版本貌似有這個套件),推測可能是整合到 server 檔裡了吧,所以後來就放棄用 RPM 檔來安裝,直接下載一般 Linux 檔案解壓縮來做,所以應該也可適用在 ubuntu 的安裝上(這也是我比較熟悉的系統)。

以下是 MySQL Cluster Linux 版的安裝隨手筆記:

1. 安裝 MySQL Cluster 前的準備動作:

(1) 利用 VMPlayer 安裝 OpenSuse Linux 12.2 最新版,安裝時選擇不安裝其他有的沒的套件,包括 MySQL、Apache 都不裝,另外也安裝 win7 測試

(2) vmplayer 網路設定:

因為主機本身是用分享器的 DHCP 指定的 ip,所以 vmplayer 內的虛擬主機也設定成 DHCP 指定的 ip,

vmplayer 網路設定為 bridge,網卡選擇實體介面的網卡,不勾選 vm 的網卡,把 opensuse 內的 ip 設定為跟實體主機一樣的虛擬 ip

目前設定:

opensuse node 1 : 192.168.100.110 -> 管理節點

opensuse node 2 : 192.168.100.111 -> 數據(data)節點

opensuse node 3 : 192.168.100.112 -> 數據(data)節點

opensuse node 4 : 192.168.100.113 -> SQL 節點

請注意:管理節點最好不要與數據節點部署在同一臺服務器上,否則可能會因為該數據節點服務器的當機,而導致管理節點服務器的問題,從而導致整個群集系統的崩潰。

(3) 預計要安裝 4 個 node 來測試,先安裝好第一個、升級完畢後,開始複製 VMPlayer 的 image 檔,複製完要把裡面的檔名修改一下,並且也要修改 .vmx 設定檔的內容。

2. 參考 這篇 說明準備安裝

3. 下載 MySQL Cluster 所有套件

4. OpenSuse 版 MySQL Cluster 安裝流程:

(1) 因為一直找不到 mysql cluster 7.2.10 的 mgm 安裝檔,所以直接下載檔案來安裝,參考 這篇 的安裝過程

(2) tar -xvzf mysql-cluster-gpl-7.2.10-linux2.6-x86_64.tar.gz

(3) cp -r mysql-cluster-gpl-7.2.10-linux2.6-x86_64 /usr/local/mysql

(4) chown -R root .  //把mysql的目錄設置成所有者為root

(5) chown -R mysql data //把data目錄設置所有者為mysql

(6) chgrp -R mysql . //改成所屬組為mysql

(7) ./scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql

(8) 設定 mysql 密碼:

/etc/init.d/mysql start

/usr/local/mysql/bin/mysqladmin -u root password 'xxx'

/usr/local/mysql/bin/mysqladmin -u root -h opensuse-node1 password 'xxx'

開機後可能要手動啟動 mysql service

5. 開始配置:管理節點

(1) cp bin/ndb_mgm* /usr/local/bin/.

(2) cd /var/lib

(3) mkdir mysql-cluster

(4) cd mysql-cluster

(5) vi config.ini

輸入下面內容:

[ndbd default]

#每個數據節點的鏡像數量

NoOfReplicas=1

#每個數據節點中給數據分配的內存

DataMemory=200M

#每個數據節點中給索引分配的內存

IndexMemory=20M

#配置管理節點

[ndb_mgmd]

NodeId=1

hostname=192.168.100.110

#管理節點數據(日誌)目錄

datadir=/var/lib/mysql-cluster/

#數據節點配置

[ndbd]

NodeId=2

hostname=192.168.100.111

#數據節點目錄

datadir=/usr/local/mysql/data/

[ndbd]

NodeId=3

hostname=192.168.100.112

datadir=/usr/local/mysql/data/

[mysqld]

hostname=192.168.100.113

#一定要留一個空的,以備擴展使用,否則會出現Failed to allocate nodeid No free node id found for ndbd(NDB)錯誤

[mysqld]

[mysqld]

註:

[NDBD DEFAULT]:表示每個數據節點的默認配置在每個節點的[NDBD]中不用再寫這些選項,只能有一個。

[NDB_MGMD]:表示管理節點的配置,只有一個。

[NDBD]:表示每個數據節點的配置,可以有多個。

[MYSQLD]:表示SQL節點的配置,可以有多個,分別寫上不同SQL節點的IP地址。

6. 開始配置:數據節點和SQL節點 192.168.100.111~192.168.100.113 都照此操作

(1) mysql 服務啟動時會默認加載 /etc/my.cnf 作為其配置文件,修改 192.168.100.111 & 192.168.100.112 上的 my.cnf

[mysqld]

ndbcluster #運行NDB存儲引擎

# datadir=/usr/local/mysql/data

# basedir=/usr/local/mysql

ndb-connectstring=192.168.100.110

# [mysql_cluster]

# ndb-connectstring=192.168.100.110 #聲明管理節點

[ndbd]
ndb-connectstring=192.168.100.110

[ndb_mgm]
ndb-connectstring=192.168.100.110

[ndb_mgmd]
config-file=/var/lib/mysql-cluster/config.ini

拷貝一份到另一台 192.168.100.112

#scp /etc/my.cnf 192.168.100.112:/etc/

SQL node 還須複製下面的檔案:

cp /home/mulder/mysql-cluster/mysql-cluster-gpl-7.2.10-linux2.6-x86_64/support-files/mysql.server /etc/init.d/.

7. 啟動

節點的啟動順序為管理節點->數據節點->SQL節點。

(1) 啟動管理節點:192.168.100.110

#cd /usr/local/bin

# ./ndb_mgmd -f /var/lib/mysql-cluster/config.ini  // ndb_mgmd是mysqlcluster的管理服務器,後面的-f表示後面的參數是啟動的參數配置文件。如果在啟動後過了幾天又添加了一個數據節點,這時修改了配置文件啟動時就必須加上--initial參數,不然添加的節點不會作用在mysql cluster中

(2) 啟動數據節點:192.168.100.111 & 192.168.100.112

安裝後第一次啟動數據節點時要加上--initial參數,其它時候不要加,除非是在備份、恢復或配置變化後重啟時

#/usr/local/mysql/bin/ndbd --initial

INFO -- Angel connected to '10.32.33.120:1186'

INFO -- Angel allocated nodeid: 36

出現上面這種信息表示啟動成功.

同樣方法,啟動另外一個機器,注意nodeid的編號。

(3) 啟動 SQL 節點:192.168.100.113

ps:sql node 啟動前,管理節點和所有的 data node 都要啟動,否則會無法啟動 sql node

#/etc/init.d/mysql.server start

#mysqld_safe --ndb_nodeid=4 --user=mysql &

8. 客戶端查看:192.168.100.110

#cd /usr/local/bin

#./ndb_mgm

ndb_mgm> show

Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.100.111 (mysql-5.5.29 ndb-7.2.10, Nodegroup: 0, Master)
id=3 @192.168.100.112 (mysql-5.5.29 ndb-7.2.10, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.100.110 (mysql-5.5.29 ndb-7.2.10)

[mysqld(API)] 2 node(s)
id=4 @192.168.100.113 (mysql-5.5.29 ndb-7.2.10)
id=5 (not connected, accepting connect from any host)

可以看到各個節點已經連接上了, mysql cluster配置完成.

管理節點關閉,在ndb_mgm>提示符下輸入shutdown,再輸入exit即可退出。

===============  終於搞定了  ===================

9. 測試。

(1) 從SQL節點A登錄,創建數據庫和表,進行簡單測試。為了測試,又多加一台 SQL node 進去

先在 SQL node 1 上建立資料庫:

#mysql -u root -p

mysql> create database zxztest ;

mysql> use zxztest;

Database changed

mysql> create table test1(id int,name varchar(10)) engine=ndbcluster ;

mysql> insert into test1 values​​(1,'zhaoxuezhi');

mysql> select * from test1 ;

+------+---------+

| id | name |

+------+---------+

| 1 | zhaoxuezhi |

+--- ---+---------+

登入 SQL node 2,也可以看到一樣的資料庫,庫,表和數據已經同步!

mysql> use zxztest;
Database changed
mysql> select * from test1 ;
+------+------------+
| id | name |
+------+------------+
| 1 | zhaoxuezhi |
+------+------------+
1 row in set (0.04 sec)

再從 SQL node 2 插入一條數據,同樣登入 SQL node 1,也能看到數據已經同步。

SQL node 2:

mysql> insert into test1 values(2,'asdfghjk');
Query OK, 1 row affected (0.02 sec)

mysql> select * from test1 ;
+------+------------+
| id | name |
+------+------------+
| 1 | zhaoxuezhi |
| 2 | asdfghjk |
+------+------------+
2 rows in set (0.00 sec)

===================================  大功告成 ===================================

感謝其他參考文章:

1. http://blog.xuite.net/itwiz/learning/58315256

2. http://blog.nekobe.tw/?p=569

全站熱搜
創作者介紹
創作者 mulderyu 的頭像
mulderyu

mulderyu的部落格

mulderyu 發表在 痞客邦 留言(0) 人氣()