在3台主机上安装mysql-cluster
时间:2010-04-09 来源:*梦*
1.準備三台主機,每一台的規格盡量一致,如i386,RAM大小,作業系統(這邊用CentOS release 5.2)
2.這三台主機網路要互通 , 三台主機我們命名為 mysqlA,mysqlB,mysqlC ,都在內網 , 都有內網ip
3.把主機的iptables 先關掉(#service iptables stop)
4. 各自ip為
mysqlA:192.168.0.11 (這台當作管理端,可以管理這個Cluster上的各個node)
mysqlB:192.168.0.12
mysqlC:192.168.0.13
5.node有三種
Management node:用來控制或監看三台主機的狀況
Storage node : 這個node最重要了, 是用來存取資料的,管理者通常會費比較多心思在上面
SQL node :它們負責跟application作連接,執行sql指令,負責跟Storage node連接.
7.規劃哪一台主機要安裝哪一種node,本範例的分配如下
mysqlA:Management node+Storage node+SQL node
mysqlB:Storage node+SQL node
mysqlC:Storage node+SQL node
共6個nodes(不含Management node)
8.不使用作業系統配給的MySQL,若有預設安裝在裡面,請移除.至MySQL網站下載這些rpm檔
MySQL-Cluster-gpl-management-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA)
MySQL-Cluster-gpl-extra-6.2.15-0.rhel5.i386.rpm (選擇性的,可裝可不裝,我安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-server-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-client-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-storage-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-devel-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-tools-6.2.15-0.rhel5.i386.rpm (安裝在mysqlA,mysqlB,mysqlC)
MySQL-Cluster-gpl-shared-6.2.15-0.rhel5.i386.rpm (選擇性的,可裝可不裝,安裝在mysqlA,mysqlB,mysqlC)
9.以上套件安裝完成後,請在mysqlA 上面編寫一個檔案,如下:
#mkdir -p /var/lib/mysql-cluster
#vi /var/lib/mysql-cluster/config.ini ,寫入以下設定項目
[NDBD DEFAULT]
NoOfReplicas=3
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=192.168.1.11
#Storage Engines
[NDBD]
HostName=192.168.1.11
DataDir= /var/lib/mysql-cluster
DataMemory=1024MB
IndexMemory=128MB
[NDBD]
HostName=192.168.1.12
DataDir= /var/lib/mysql-cluster
DataMemory=1024MB
IndexMemory=128MB
[NDBD]
HostName=192.168.1.13
DataDir=/var/lib/mysql-cluster
DataMemory=1024MB
IndexMemory=128MB
# 2 MySQL Clients
# I personally leave this blank to allow rapid changes of the mysql clients;
# you can enter the hostnames of the above two servers here. I suggest you dont.
[MYSQLD]
HostName=192.168.1.11
[MYSQLD]
HostName=192.168.1.12
[MYSQLD]
HostName=192.168.1.13
10. 請在mysqlA,mysqlB,mysqlC 的/etc/ 下編寫my.cnf檔 :
mysqlA,mysqlB,mysqlC 都一樣如下:
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.11
[mysql_cluster]
ndb-connectstring=192.168.0.11
11.請至每一台,啟動 mysql server,並確定每一台登入mysql沒問題
#service mysql start
#mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15644
Server version: 5.1.23-ndb-6.2.15-cluster-gpl MySQL Cluster Server (GPL)
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
12.至mysqlA 啟動 management node,storage node,SQL node
#cd /var/lib/mysql-cluster
#/usr/sbin/ndb_mgmd ./config.ini
#/usr/sbin/ndbd –initial (DB裡面有資料後 千萬不能這樣重啟,資料會被清光從零開始 這是第一次啟動時用的)
#service mysql restart
13.請至 mysqlB 跟mysqlC 啟動 storage node,SQL node
#cd /var/lib/mysql-cluster
#/usr/sbin/ndbd –initial
#service mysql restart
14.至mysqlA 查看各個node的狀況,如下
#ndb_mgm
– NDB Cluster — Management Client –
ndb_mgm> show
Connected to Management Server at: 127.0.0.1:1186
Cluster Configuration
———————
[ndbd(NDB)] 3 node(s)
id=2 @192.168.1.11 (mysql-5.1.23 ndb-6.2.15, Nodegroup: 0, Master)
id=3 @192.168.1.12 (mysql-5.1.23 ndb-6.2.15, Nodegroup: 0)
id=4 @192.168.1.13 (mysql-5.1.23 ndb-6.2.15, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.11 (mysql-5.1.23 ndb-6.2.15)
[mysqld(API)] 3 node(s)
id=5 @192.168.1.11 (mysql-5.1.23 ndb-6.2.15)
id=6 @192.168.1.12 (mysql-5.1.23 ndb-6.2.15)
id=7 @192.168.1.13 (mysql-5.1.23 ndb-6.2.15)
看到這個,就算成功一半了.
14.測試建立一個db到任意一台主機,如mysqlA
#mysql
mysql>create database haha;
Query OK, 1 row affected (0.15 sec)
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| haha |
| mysql |
| test |
+——————–+
5 rows in set (0.00 sec)
再到其他台上查看有沒有haha這個資料庫.有的話就成功了.在任何一台刪除haha,其他台也會跟著刪.
15.注意,建立資料表時,一定要用ndb_cluster這種資料型態,才有作用,如果想要import data進來
要先確定資料表的型態,不然它不會傳播到其他台.NDB(Network Database)
16.注意安裝Storage node的主機,RAM 要夠大,本例使用的主機都有2G的RAM,計算每個Storage node主機會用到的
RAM: (SizeofDatabases x NumberOfReplicas x 1.1) / NumberOfDataNodes
17.重啟整個ndbd的方式
到所屬的機器
#ps axu | grep ndbd (抓出 process ID,通常有兩個ndbd)
#kill -9 ID1 ID2 (強制刪除這兩個程序)
#/usr/sbin/ndbd (啟動ndbd)