一、MySQL集羣介紹
MySQL集羣是一種技術,該技術允許在無共享的系統中部署“內存中”數據庫的集羣。通過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由於每個組件有自己的內存和磁盤,不存在單點故障。
Mysql 集羣由三種不同節點組成,每一種節點提供特殊的服務,這三類節點分別是:
管理(MGM)節點:這類節點的作用是管理MySQL簇內的其他節點,如提供配置數據、啓動並停止節點、運行備份等。由於這類節點負責管理其他節點的配置,應在啓動其他節點之前首先啓動這類節點。MGM節點是用命令ndb_mgmd啓動的。
數據節點:這類節點用於保存簇的數據。數據節點的數目與副本的數目相關,是片段的倍數。例如,對於兩個副本,每個副本有兩個片段,那麼就有4個數據節點。沒有必要有一個以上的副本。數據節點是用命令ndbd啓動的。
SQL節點:這是用來訪問簇數據的節點。對於MySQL簇,客戶端節點是使用NDB簇存儲引擎的傳統MySQL服務器。典型情況下,SQL節點是使用命令mysqld –ndbcluster啓動的,或將ndbcluster添加到my.cnf後使用mysqld啓動。
二、實驗環境
一個管理節點、二個數據節點、二個SQL節點。系統全部使用CentOS5.5 x64,最小化安裝。
名稱 |
IP |
Mgm1 |
172.20.4.17 |
Ndb1 |
172.20.4.13 |
Ndb2 |
172.20.4.14 |
Mysql1 |
172.20.4.11 |
Mysql2 |
172.20.4.12 |
Mysql的版本爲mysql-cluster-gpl-7.1.10-linux-x86_64-glibc23.tar.gz 。
三、安裝配置步驟
1、存儲節點和SQL節點安裝
在mysql1、mysql2、ndb1和ndb2上都執行以下操作。
# groupadd mysql && useradd -g mysql mysql
# tar -zxvf /usr/local/src/mysql-cluster-gpl-7.1.9a-linux-i686-glibc23.tar.gz -C /usr/local/ && mv /usr/local/mysql-cluster-gpl-7.1.9a-linux-i686-glibc23 /usr/local/mysql
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
# chown -R root /usr/local/mysql && chown -R mysql /usr/local/mysql/data && chgrp -R mysql /usr/local/mysql
2、管理節點安裝
在管理節點mgm1上執行如下命令
# scp mysql1.cluster:/usr/local/mysql/bin/ndb_mgm* /usr/local/bin/ && chmod +x /usr/local/bin/ndb_mgm*
3、配置管理節點
#mkdir –p /usr/local/mysql/mysql-cluster
#cat > /usr/local/mysql/mysql-cluster/config.ini << EOF
[NDBD DEFAULT]
NoOfReplicas=2 #副本數
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# Managment Server
[NDB_MGMD]
HostName=172.20.4.17
# Storage Engines
[NDBD]
HostName=172.20.4.13
DataDir=/mysqll/mysql-cluster #數據存儲目錄
[NDBD]
HostName=172.20.4.14
DataDir=/mysql/mysql-cluster
[MYSQLD]
[MYSQLD]
4、配置存儲和SQL節點
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/usr/local/mysql/data
ndbcluster
ndb-connectstring=172.20.4.17
[mysql_cluster]
ndb-connectstring=172.20.4.17
EOF
5、啓動mysql集羣
? 先啓動管理節點 #ndb_mgmd –f /usr/local/mysql/mysql-cluster/config.ini
? 再啓動存儲節點 #/usr/local/mysql/bin/ndbd –initial
PS:僅應在首次啓動ndbd時,或在備份/恢復或配置變化後重啓ndbd時使用“--initial”參數,這很重要。原因在於,該參數會使節點刪除由早期ndbd實例創建的、用於恢復的任何文件,包括恢復用日誌文件。
? 最後啓動SQL節點 #cd /usr/local/mysql && bin/mysqld_safe –user=mysql &
? 在管理節點服務器mgm1上查看集羣各節點狀況
[root@mgm1 ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @172.20.4.13 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0, Master)
id=3 @172.20.4.14 (mysql-5.1.51 ndb-7.1.10, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.20.4.17 (mysql-5.1.51 ndb-7.1.10)
[mysqld(API)] 2 node(s)
id=4 @172.20.4.12 (mysql-5.1.51 ndb-7.1.10)
id=5 @172.20.4.11 (mysql-5.1.51 ndb-7.1.10)
說明:id是自動成生的,可以在config.ini文件中指定。
三、測試
1、在mysql1上登錄mysql服務器新建一個數據庫ctest,在mysql2上登錄mysql服務器也能看到數據庫已創建。
2、在mysql2上登錄mysql服務器,進入ctest新建表,同樣在mysql1上也能看到。
PS:新建表時需要在末尾指定一下表的存儲引擎。
CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
3、其它測試進行中………..