Sunday, November 20, 2011

How to build a simple environment for MySql Cluster

一. MySQL Cluster 中主機分三類:
  1. 管理主機: 服務程式(Deamon) 稱為 ndb_mgmd (NDB Management Daemon的意思), 管理工具稱為 ndb_mgm (NDB Management 的意思),預設使用 Port 1186。
  2. Data Node: 實際存放資料的主機 (Storage node),服務程式稱為 ndbd (NDB Daemon的意思). 
  3. SQL Node : 提供存取資料庫內容,服務程式稱為 mysqld (MySQL Deamon的意思)
二.  實驗環境
  1. 五台 Virtual Machine (安裝 CentOS 6.0)
    2.
  • node 1 eth1:192.168.152.139 (MGM Node)
  • node 2 eth1:192.168.152.140 (SQL Node 1)
  • node 3 eth1:192.168.152.141 (Data Node 1)
  • node 4 eth1:192.168.152.142 (Data Node 2)
  • node 5 eth1:192.168.152.143 (Data Node 2)
三.  安裝
    0. 關閉SELinux:
  • chkconfig iptables off
  • /usr/sbin/setenforce 0 close SELINUX
  • reboot
  1. 下載以下 MySQL cluster package 至 /home/MySQL Cluster Package 目錄:
  • MySQL-Cluster-gpl-client-7.1.4b-1.rhel5.x86_64.rpm
  • MySQL-Cluster-gpl-clusterj-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-debuginfo-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-devel-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-embedded-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-extra-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-management-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-server-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-shared-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-storage-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-test-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-tools-7.1.4b-1.rhel5.x86_64
    2. 於/home/MySQL Cluster Package目錄中, 執行 rpm -Uhv *.rpm (建議全部機器都做), 若遇到 conflict 請將既有的 mysql 移除: yum -y remove mysql*

    3. MGM Node Setting
  • a. mkdir -p /var/lib/mysql-cluster
  • b. vi /var/lib/mysql-cluster/config.ini (這裡有 config.ini 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • c. 將以下內容貼上
  •  [ndbd default]
  •  NoOfReplicas=2
  •  DataMemory=80M
  •  IndexMemory=18M
  •  [tcp default]
  •  portnumber=2202
  •  [ndb_mgmd]
  •  hostname=192.168.152.139
  •  id=1
  •  datadir=/var/lib/mysql-cluster
  •  [ndbd]
  •  hostname=192.168.152.142
  •  datadir=/var/lib/mysql-cluster
  •  id=4
  •  [ndbd]
  •  hostname=192.168.152.141
  •  datadir=/var/lib/mysql-cluster
  •  id=3
  •  [mysqld]
  •  hostname=192.168.152.140
  • id=2
  •  [mysqld]
  •  hostname=192.168.152.143
  •  id=5
4. SQL Node Setting
  • a. vi /etc/my.cnf (這裡有 my.cnf 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • b. 將以下內容貼上: 

  • [mysqld]
  • ndbcluster # run NDB storage engine
  • ndb-connectstring=192.168.152.139 ## MGM Node IP Address

  • [mysql_cluster]
  • ndb-connectstring=192.168.152.139  ## MGM Node IP Address

5. 啟動 MySQL Cluster
  • a. 注意啟動順序: MGM Node > Data Node > SQL Node
  • b. 於 MGM Node: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
  • c. 於兩台 Data Node: ndbd --initial
  • d. 於兩台 SQL Node: service mysql start
6. 檢查目前狀況
  • a. 於MGM Node: ndb_mgm -e show
  • b. 畫面會出現: 
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.152.141  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)
id=4 @192.168.152.142  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.152.139  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 2 node(s)
id=2 @192.168.152.140  (mysql-5.1.44 ndb-7.1.4)
id=5 @192.168.152.143  (mysql-5.1.44 ndb-7.1.4)

7. 簡單測試
  • a. 資料庫要設為 Cluster 有些重點必須先知道:
Table 的 storage engine 須設為 NDBCLUSTER。
Table 必須有一個 primary key,若沒有,系統會自動新增一個隱藏的 primary key。
新增資料庫時,需在 Cluster 的每個 SQL node 手動執行新增該資料庫名稱。
新增 SQL node 時,需在該 node 手動新增那些要作同步的資料庫名稱。
  • b. 新增資料庫至其中一台SQL NODE:
mysql -u root -p
Enter password: 
mysql> create database testDB;
mysql> use testDB;
mysql> create table testTable (id mediumint unsigned not null auto_increment primary key, name varchar(20) not null default '') engine = ndbcluster default charset utf8;
mysql> insert into testTable value(1,'test1');
mysql> insert into testTable value(2,'test2');
**注意要達到兩台同步化一定要在table建立時加入: engine = ndbcluster

c. 兩台SQL Node 均出現以下資料
mysql> select * from testTable;
+----+-------+
| id | name  |
+----+-------+
|  1 | test1 |
|  2 | test2 |
+----+-------+
2 rows in set (0.04 sec)

8. 其他常用指令集:
  • a. MGM Node:
啟動: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
檢視目前狀況: ndb_mgm -e show
停止: ndb_mgm -e shutdown (它會把所有 MGM Node 和所有 Data Node 的 ndb_mgmd 和 ndbd 都停止掉, 但是mysqld 還留著)


  • b. Data Node: 
啟動: ndbd
  • c. SQL Node: 
啟動: service mysql start
停止: service mysql stop
重啟: service mysql restart

9. 參考資料
  1. http://helloworld.pixnet.net/blog/post/26817994-mysql-cluster-%E5%AE%89%E8%A3%9D%E7%AD%86%E8%A8%98
  2. http://space.itpub.net/15415488/viewspace-620903
  3. http://gis.nchc.org.tw/lsi/linux_basic/discuss/look.asp?id=1135&Page=2&ADMIN=1
  4. http://www.osslab.com.tw/index.php?title=User:Alang/Linux_%26_UNIX_%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98/MySQL_DBA_%E7%AD%86%E8%A8%98/MySQL_Cluster


How to build a simple environment for MySql Cluster

一. MySQL Cluster 中主機分三類:
  1. 管理主機: 服務程式(Deamon) 稱為 ndb_mgmd (NDB Management Daemon的意思), 管理工具稱為 ndb_mgm (NDB Management 的意思),預設使用 Port 1186。
  2. Data Node: 實際存放資料的主機 (Storage node),服務程式稱為 ndbd (NDB Daemon的意思). 
  3. SQL Node : 提供存取資料庫內容,服務程式稱為 mysqld (MySQL Deamon的意思)
二.  實驗環境
  1. 五台 Virtual Machine (安裝 CentOS 6.0)
    2.
  • node 1 eth1:192.168.152.139 (MGM Node)
  • node 2 eth1:192.168.152.140 (SQL Node 1)
  • node 3 eth1:192.168.152.141 (Data Node 1)
  • node 4 eth1:192.168.152.142 (Data Node 2)
  • node 5 eth1:192.168.152.143 (Data Node 2)
三.  安裝
    0. 關閉SELinux:
  • chkconfig iptables off
  • /usr/sbin/setenforce 0 close SELINUX
  • reboot
  1. 下載以下 MySQL cluster package 至 /home/MySQL Cluster Package 目錄:
  • MySQL-Cluster-gpl-client-7.1.4b-1.rhel5.x86_64.rpm
  • MySQL-Cluster-gpl-clusterj-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-debuginfo-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-devel-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-embedded-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-extra-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-management-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-server-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-shared-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-storage-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-test-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-tools-7.1.4b-1.rhel5.x86_64
    2. 於/home/MySQL Cluster Package目錄中, 執行 rpm -Uhv *.rpm (建議全部機器都做), 若遇到 conflict 請將既有的 mysql 移除: yum -y remove mysql*

    3. MGM Node Setting
  • a. mkdir -p /var/lib/mysql-cluster
  • b. vi /var/lib/mysql-cluster/config.ini (這裡有 config.ini 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • c. 將以下內容貼上
  •  [ndbd default]
  •  NoOfReplicas=2
  •  DataMemory=80M
  •  IndexMemory=18M
  •  [tcp default]
  •  portnumber=2202
  •  [ndb_mgmd]
  •  hostname=192.168.152.139
  •  id=1
  •  datadir=/var/lib/mysql-cluster
  •  [ndbd]
  •  hostname=192.168.152.142
  •  datadir=/var/lib/mysql-cluster
  •  id=4
  •  [ndbd]
  •  hostname=192.168.152.141
  •  datadir=/var/lib/mysql-cluster
  •  id=3
  •  [mysqld]
  •  hostname=192.168.152.140
  • id=2
  •  [mysqld]
  •  hostname=192.168.152.143
  •  id=5
4. SQL Node Setting
  • a. vi /etc/my.cnf (這裡有 my.cnf 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • b. 將以下內容貼上: 

  • [mysqld]
  • ndbcluster # run NDB storage engine
  • ndb-connectstring=192.168.152.139 ## MGM Node IP Address

  • [mysql_cluster]
  • ndb-connectstring=192.168.152.139  ## MGM Node IP Address

5. 啟動 MySQL Cluster
  • a. 注意啟動順序: MGM Node > Data Node > SQL Node
  • b. 於 MGM Node: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
  • c. 於兩台 Data Node: ndbd --initial
  • d. 於兩台 SQL Node: service mysql start
6. 檢查目前狀況
  • a. 於MGM Node: ndb_mgm -e show
  • b. 畫面會出現: 
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.152.141  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)
id=4 @192.168.152.142  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.152.139  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 2 node(s)
id=2 @192.168.152.140  (mysql-5.1.44 ndb-7.1.4)
id=5 @192.168.152.143  (mysql-5.1.44 ndb-7.1.4)

7. 簡單測試
  • a. 資料庫要設為 Cluster 有些重點必須先知道:
Table 的 storage engine 須設為 NDBCLUSTER。
Table 必須有一個 primary key,若沒有,系統會自動新增一個隱藏的 primary key。
新增資料庫時,需在 Cluster 的每個 SQL node 手動執行新增該資料庫名稱。
新增 SQL node 時,需在該 node 手動新增那些要作同步的資料庫名稱。
  • b. 新增資料庫至其中一台SQL NODE:
mysql -u root -p
Enter password: 
mysql> create database testDB;
mysql> use testDB;
mysql> create table testTable (id mediumint unsigned not null auto_increment primary key, name varchar(20) not null default '') engine = ndbcluster default charset utf8;
mysql> insert into testTable value(1,'test1');
mysql> insert into testTable value(2,'test2');
**注意要達到兩台同步化一定要在table建立時加入: engine = ndbcluster

c. 兩台SQL Node 均出現以下資料
mysql> select * from testTable;
+----+-------+
| id | name  |
+----+-------+
|  1 | test1 |
|  2 | test2 |
+----+-------+
2 rows in set (0.04 sec)

8. 其他常用指令集:
  • a. MGM Node:
啟動: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
檢視目前狀況: ndb_mgm -e show
停止: ndb_mgm -e shutdown (它會把所有 MGM Node 和所有 Data Node 的 ndb_mgmd 和 ndbd 都停止掉, 但是mysqld 還留著)


  • b. Data Node: 
啟動: ndbd
  • c. SQL Node: 
啟動: service mysql start
停止: service mysql stop
重啟: service mysql restart

9. 參考資料
  1. http://helloworld.pixnet.net/blog/post/26817994-mysql-cluster-%E5%AE%89%E8%A3%9D%E7%AD%86%E8%A8%98
  2. http://space.itpub.net/15415488/viewspace-620903
  3. http://gis.nchc.org.tw/lsi/linux_basic/discuss/look.asp?id=1135&Page=2&ADMIN=1
  4. http://www.osslab.com.tw/index.php?title=User:Alang/Linux_%26_UNIX_%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98/MySQL_DBA_%E7%AD%86%E8%A8%98/MySQL_Cluster


How to build a simple environment for MySql Cluster

一. MySQL Cluster 中主機分三類:
  1. 管理主機: 服務程式(Deamon) 稱為 ndb_mgmd (NDB Management Daemon的意思), 管理工具稱為 ndb_mgm (NDB Management 的意思),預設使用 Port 1186。
  2. Data Node: 實際存放資料的主機 (Storage node),服務程式稱為 ndbd (NDB Daemon的意思). 
  3. SQL Node : 提供存取資料庫內容,服務程式稱為 mysqld (MySQL Deamon的意思)
二.  實驗環境
  1. 五台 Virtual Machine (安裝 CentOS 6.0)
    2.
  • node 1 eth1:192.168.152.139 (MGM Node)
  • node 2 eth1:192.168.152.140 (SQL Node 1)
  • node 3 eth1:192.168.152.141 (Data Node 1)
  • node 4 eth1:192.168.152.142 (Data Node 2)
  • node 5 eth1:192.168.152.143 (Data Node 2)
三.  安裝
    0. 關閉SELinux:
  • chkconfig iptables off
  • /usr/sbin/setenforce 0 close SELINUX
  • reboot
  1. 下載以下 MySQL cluster package 至 /home/MySQL Cluster Package 目錄:
  • MySQL-Cluster-gpl-client-7.1.4b-1.rhel5.x86_64.rpm
  • MySQL-Cluster-gpl-clusterj-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-debuginfo-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-devel-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-embedded-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-extra-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-management-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-server-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-shared-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-storage-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-test-7.1.4b-1.rhel5.x86_64
  • MySQL-Cluster-gpl-tools-7.1.4b-1.rhel5.x86_64
    2. 於/home/MySQL Cluster Package目錄中, 執行 rpm -Uhv *.rpm (建議全部機器都做), 若遇到 conflict 請將既有的 mysql 移除: yum -y remove mysql*

    3. MGM Node Setting
  • a. mkdir -p /var/lib/mysql-cluster
  • b. vi /var/lib/mysql-cluster/config.ini (這裡有 config.ini 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • c. 將以下內容貼上
  •  [ndbd default]
  •  NoOfReplicas=2
  •  DataMemory=80M
  •  IndexMemory=18M
  •  [tcp default]
  •  portnumber=2202
  •  [ndb_mgmd]
  •  hostname=192.168.152.139
  •  id=1
  •  datadir=/var/lib/mysql-cluster
  •  [ndbd]
  •  hostname=192.168.152.142
  •  datadir=/var/lib/mysql-cluster
  •  id=4
  •  [ndbd]
  •  hostname=192.168.152.141
  •  datadir=/var/lib/mysql-cluster
  •  id=3
  •  [mysqld]
  •  hostname=192.168.152.140
  • id=2
  •  [mysqld]
  •  hostname=192.168.152.143
  •  id=5
4. SQL Node Setting
  • a. vi /etc/my.cnf (這裡有 my.cnf 的基本範例http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-config-example.html)
  • b. 將以下內容貼上: 

  • [mysqld]
  • ndbcluster # run NDB storage engine
  • ndb-connectstring=192.168.152.139 ## MGM Node IP Address

  • [mysql_cluster]
  • ndb-connectstring=192.168.152.139  ## MGM Node IP Address

5. 啟動 MySQL Cluster
  • a. 注意啟動順序: MGM Node > Data Node > SQL Node
  • b. 於 MGM Node: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
  • c. 於兩台 Data Node: ndbd --initial
  • d. 於兩台 SQL Node: service mysql start
6. 檢查目前狀況
  • a. 於MGM Node: ndb_mgm -e show
  • b. 畫面會出現: 
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.152.141  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)
id=4 @192.168.152.142  (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.152.139  (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 2 node(s)
id=2 @192.168.152.140  (mysql-5.1.44 ndb-7.1.4)
id=5 @192.168.152.143  (mysql-5.1.44 ndb-7.1.4)

7. 簡單測試
  • a. 資料庫要設為 Cluster 有些重點必須先知道:
Table 的 storage engine 須設為 NDBCLUSTER。
Table 必須有一個 primary key,若沒有,系統會自動新增一個隱藏的 primary key。
新增資料庫時,需在 Cluster 的每個 SQL node 手動執行新增該資料庫名稱。
新增 SQL node 時,需在該 node 手動新增那些要作同步的資料庫名稱。
  • b. 新增資料庫至其中一台SQL NODE:
mysql -u root -p
Enter password: 
mysql> create database testDB;
mysql> use testDB;
mysql> create table testTable (id mediumint unsigned not null auto_increment primary key, name varchar(20) not null default '') engine = ndbcluster default charset utf8;
mysql> insert into testTable value(1,'test1');
mysql> insert into testTable value(2,'test2');
**注意要達到兩台同步化一定要在table建立時加入: engine = ndbcluster

c. 兩台SQL Node 均出現以下資料
mysql> select * from testTable;
+----+-------+
| id | name  |
+----+-------+
|  1 | test1 |
|  2 | test2 |
+----+-------+
2 rows in set (0.04 sec)

8. 其他常用指令集:
  • a. MGM Node:
啟動: ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
檢視目前狀況: ndb_mgm -e show
停止: ndb_mgm -e shutdown (它會把所有 MGM Node 和所有 Data Node 的 ndb_mgmd 和 ndbd 都停止掉, 但是mysqld 還留著)


  • b. Data Node: 
啟動: ndbd
  • c. SQL Node: 
啟動: service mysql start
停止: service mysql stop
重啟: service mysql restart

9. 參考資料
  1. http://helloworld.pixnet.net/blog/post/26817994-mysql-cluster-%E5%AE%89%E8%A3%9D%E7%AD%86%E8%A8%98
  2. http://space.itpub.net/15415488/viewspace-620903
  3. http://gis.nchc.org.tw/lsi/linux_basic/discuss/look.asp?id=1135&Page=2&ADMIN=1
  4. http://www.osslab.com.tw/index.php?title=User:Alang/Linux_%26_UNIX_%E5%B7%A5%E4%BD%9C%E7%AD%86%E8%A8%98/MySQL_DBA_%E7%AD%86%E8%A8%98/MySQL_Cluster