MySQL Cluster研究(1)

mikeliuy發表於2013-10-22
最近專案中要使用MySQL Cluster,所以開始學習研究的歷程,並記錄下來,以備察看。

整個叢集基於CentOS Enterprise Linux 6.4 64位,使用的MySQL版本是MySQL-CLuster-7.2.13。

一、準備工作
1、定義機器
由於MySQL叢集包括3種節點:管理節點、資料節點、SQL節點。
管理節點是負責管理整個叢集中所有的節點,監控等。
資料節點就是一個使用NDB儲存引擎的一些機器,負責MySQL資料的儲存管理。
SQL節點是處理資料儲存之外的其它功能,使用者的請求,SQL的解析等,它是使用者訪問資料庫的“橋樑”。

定義的機器資訊如下:
192.168.36.100 叢集管理節點
192.168.36.101 資料節點1
192.168.36.102 資料節點2
192.168.36.103 SQL節點1
192.168.36.104 SQL節點2

準備好機器,安裝OS,打補丁,配置IP等不祥述了。
因為實驗,所以將iptables服務停掉,如果是生產環境,要根據要求對iptables進行配置。並且檢查機器之間的互通。
最後,上傳MySQL的RPM包。

MySQL-Cluster-client-gpl-7.2.13-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.2.13-1.el6.x86_64.rpm

二、安裝

1、管理節點

管理節點需要ndb_mgmndb_mgmd,這兩個程式在server包中,所以管理節點只需安裝serverRPM包。

[root@mysql-mgm ~]# rpm -Uhv --force MySQL-Cluster-server-gpl-7.2.13-1.el6.x86_64.rpm

--force是強制安裝,如果不加不能安裝,因為系統有些MySQL的檔案,造成衝突。

2、資料節點

由於需要ndbd程式,它也在server包中,所以也只需安裝serverRPM包。

[root@mysql-d2 ~]# rpm -Uhv --force MySQL-Cluster-server-gpl-7.2.13-1.el6.x86_64.rpm

3SQL節點

由於它負責訪問,所以serverclient都要安裝

[root@mysql-s2 ~]# rpm -Uhv --force MySQL-Cluster-server-gpl-7.2.13-1.el6.x86_64.rpm
[root@mysql-s2 ~]# rpm -Uhv --force MySQL-Cluster-client-gpl-7.2.13-1.el6.x86_64.rpm

 

三、配置

1、管理節點配置過程

[root@mysql-mgm ~]# mkdir /var/lib/mysql-cluster
[root@mysql-mgm ~]# cd /usr/share/mysql/
[root@mysql-mgm ~]# cp config.small.ini /var/lib/mysql-cluster/config.ini
[root@mysql-mgm ~]# cd /var/lib/mysql-cluster
[root@mysql-mgm ~]# vi config.ini

config.ini檔案的內容參考如下:

[NDBD DEFAULT]
NoOfReplicas: 2                    #副本數量
DataMemory: 100M                   #資料記憶體大小
IndexMemory: 80M                   #索引記憶體大小
[MGM DEFAULT]
PortNumber: 1186                   #預設監聽埠
[NDB_MGMD]
HostName: 192.168.36.100        #管理節點IP
DataDir: /var/lib/mysql-cluster
ArbitrationRank: 1
[NDBD]
HostName: 192.168.36.101        #資料節點IP
DataDir: /usr/share/mysql/data
[NDBD]
HostName: 192.168.36.102
DataDir: /usr/share/mysql/data  #注意在資料節點上建立此目錄
[API]
HostName: 192.168.36.103        #SQL節點IP
ArbitrationRank: 2
[API]                              #這些是為SQL節點預留,
                                   #可以動態加入SQL節點

 

2、資料節點配置

[root@mysql-d2 ~]# cd /usr/share/mysql/
[root@mysql-d2 ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@mysql-d2 ~]# cp my-small.cnf /etc/my.cnf
[root@mysql-d2 ~]# vi /etc/my.cnf

檔案內容參考如下:(重點是紅色部分)

[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring = 192.168.36.100

 

3SQL節點部署

官方文件說直接啟動系統配置好的mysql即可,但是啟動後,管理節點監控不到,所以按照如下配置,可以連入叢集。

首先/etc/my.cnf檔案,注意紅色字型部分。

[mysqld]
ndbcluster
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysql_cluster]
ndb-connectstring = 192.168.36.100
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 

然後,按照下面步驟執行。

[root@mysql-s2 ~]# mkdir /var/run/mysqld
[root@mysql-s2 ~]# chown -R mysql:mysql /var/run/mysqld/

 

啟動是有順序的:管理節點》》資料節點》》SQL節點。

 

1、管理節點

自己寫個指令碼,方便啟動,執行這個指令碼即可。

[root@mysql-mgm ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

 

2、資料節點

[root@mysql-d2 ~]# ndbd --initial

第一次節點啟動使用該引數,還有就是備份、恢復後的啟動使用這個引數。

一般啟動如下:

[root@mysql-d2 ~]# ndbd

 

3SQL節點

[root@mysql-s2 ~]# /usr/bin/mysqld_safe
131016 19:32:35 mysqld_safe Logging to '/var/log/mysqld.log'.
131016 19:32:35 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

 

4、檢視部署結果

[root@mysql-mgm ~]# 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    @192.168.36.101  (mysql-5.5.31 ndb-7.2.13, Nodegroup: 0, Master)
id=3    @192.168.36.102  (mysql-5.5.31 ndb-7.2.13, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.36.100  (mysql-5.5.31 ndb-7.2.13)
[mysqld(API)]   6 node(s)
id=4    @192.168.36.103  (mysql-5.5.31 ndb-7.2.13)·
id=5    @192.168.36.104  (mysql-5.5.31 ndb-7.2.13)


部署可用性測試

1、在SQL節點1上執行。

使用客戶端進行mysql

[root@mysql-s1 ~]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.31-ndb-7.2.13-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

檢視資料庫。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ctest              |
| mysql              |
| ndbinfo            |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

開啟資料庫

mysql> use ctest
Database changed

建立測試表,注意紅色字必須加,否則無法使用NDB儲存。

mysql> create table test(count int) engine=NDBCLUSTER;
Query OK, 0 rows affected (0.53 sec)

插入測試資料

mysql> insert into test values(10);
Query OK, 1 row affected (0.22 sec)

mysql> select * from test;
+-------+
| count |
+-------+
|    10 |
+-------+
1 row in set (0.95 sec)

 

2、在SQL節點2執行。

進入mysql

[root@mysql-s2 ~]# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.31-ndb-7.2.13-cluster-gpl MySQL Cluster Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

檢視資料庫資訊

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndbinfo            |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.06 sec)

SQL節點2第一次訪問叢集,資料庫列表中沒有要訪問的資料庫,需要執行下面命令。

mysql> create database ctest;
Query OK, 1 row affected (0.12 sec)

mysql> use ctest
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
開啟資料庫時,與資料節點同步。
Database changed

查詢,可以看到在SQL節點1上的操作結果。說明資料儲存在資料節點中了。

mysql> select * from test;
+-------+
| count |
+-------+
|    10 |
+-------+
1 row in set (0.02 sec)

在該SQL節點做插入操作。

mysql> insert into test values (1);
Query OK, 1 row affected (0.04 sec)

mysql> select * from test;
+-------+
| count |
+-------+
|    10 |
|     1 |
+-------+
2 rows in set (0.00 sec)

 

3、在SQL節點1上,檢視在SQL節點2的運算元據。

mysql> select * from test;
+-------+
| count |
+-------+
|     1 |
|    10 |
+-------+
2 rows in set (0.25 sec)


到此MySQL CLuster部署成功。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26812308/viewspace-774792/,如需轉載,請註明出處,否則將追究法律責任。

相關文章