本文源連結位址:https:www.93bok.com
實驗環境: Centos6.5 minimal 64位系統
伺服器IP:
192.168.1.113(用戶端)
192.168.1.114(管理節點)
192.168.1.115(資料節點1)
192.168.1.116(資料節點2)
192.168.1.117(SQL節點1)
192.168.1.118(SQL節點2)
包版本:
MySQL Cluster:mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz
實驗拓撲:
MySQL叢集概述
MySQL Cluster是MySQL适合于分布式計算環境的高實用、高備援版本。Cluster的漢語是“叢集”的意思。它采用了NDB Cluster 存儲引擎,允許在1個 Cluster 中運作多個MySQL伺服器。
MySQL Cluster 是一種技術,該技術允許在無共享的系統中部署“記憶體中”資料庫的 Cluster 。通過無共享體系結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由于每個元件有自己的記憶體和磁盤,不存在單點故障。
MySQL叢集架構
1)SQL節點: 給上層應用層提供sql通路。
2)管理節點(MGM): 管理整個叢集。 啟動,關閉叢集。 通過ndb_mgmd指令啟動叢集
3)存儲/資料節點: 儲存cluster中的資料。 資料節點,可以提供副本。實作資料備援。
4)NDB引擎:是一種 “記憶體中”的存儲引擎 , 它具有可用性高和資料一緻性好的特點。
NDB引擎介紹
MySQL Cluster 使用了一個專用的基于記憶體的存儲引擎——NDB引擎,這樣做的好處是速度快, 沒有磁盤I/O的瓶頸,但是由于是基于記憶體的,是以資料庫的規模受系統總記憶體的限制, 如果運作NDB的MySQL伺服器一定要記憶體夠大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台伺服器上來實作資料的可靠性和擴充性,理論上 通過配置2台NDB的存儲節點就能實作整個資料庫叢集的備援性和解決單點故障問題。
缺陷:
1)基于記憶體,資料庫的規模受叢集總記憶體的大小限制
2)基于記憶體,斷電後資料可能會有資料丢失,這點還需要通過測試驗證。
3)多個節點通過網絡實作通訊和資料同步、查詢等操作,是以整體性受網絡速度影響,是以速度也比較慢
優點:
1)多個節點之間可以分布在不同的地理位置,是以也是一個實作分布式資料庫的方案。
2)擴充性很好,增加節點即可實作資料庫叢集的擴充。
3)備援性很好,多個節點上都有完整的資料庫資料,是以任何一個節點當機都不會造成服務中斷。
官網下載下傳位址
https://dev.mysql.com/downloads/cluster/
MySQL Cluster叢集搭建
一、解除安裝系統自帶的mysql所有元件(所有機器,除了客戶機)
yum -y remove mysql*
rpm -qa | grep mysql
rpm -e --nodeps xxxxx
rm -rf /var/lib/mysql/
rm -rf /etc/my.cnf
rm -rf /etc/init.d/mysqld
vim /etc/profile 删除與mysql相關内容
chkconfig --list | grep mysql
chkconfig --del mysqld
二、安裝配置管理節點(MGM)
1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster
2、建立管理節點日志目錄、配置檔案目錄
mkdir -p /var/log/mysql-cluster
mkdir -p /etc/mysql-cluster
3、建立配置檔案
vi /etc/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2 #資料寫入數量。2表示兩份,2個資料節點
DataMemory=80M #配置資料存儲可使用的記憶體
IndexMemory=18M #索引給100M
[ndb_mgmd]
nodeid=1
datadir=/var/log/mysql-cluster #管理結點的日志
HostName=192.168.1.114 #管理結點的IP位址。本機IP
###### data node options: #存儲結點
[ndbd]
HostName=192.168.1.115
DataDir=/data/mysql #mysql資料存儲路徑
nodeid=2
[ndbd]
HostName=192.168.1.116
DataDir=/data/mysql #mysql資料存儲路徑
nodeid=3
# SQL node options: #關于SQL結點
[mysqld]
HostName=192.168.1.117
nodeid=4
[mysqld]
HostName=192.168.1.118
nodeid=5
4、初始化管理節點
/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini
5、檢視叢集狀态
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
從圖中可以看到,除了管理節點,别的資料節點和SQL節點還沒有連接配接上,我們還沒配置。
三、安裝配置資料節點(NDB)
兩台資料節點(192.168.1.115、192.168.1.116)一樣的配置
1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster
2、建立mysql運作使用者
useradd -M -s /sbin/nologin mysql
3、建立mysql資料目錄、配置檔案目錄并授權
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
4、建立資料節點配置檔案
vi /etc/mysql/my.cnf
[mysqld]
datadir=/data/mysql #mysql資料存儲路徑
ndbcluster #啟動ndb引擎
ndb-connectstring=192.168.1.114 #管理節點IP位址
[mysql_cluster]
ndb-connectstring=192.168.1.114 #管理節點IP位址
5、啟動資料節點服務
/usr/local/mysql/mysql-cluster/bin/ndbd --initial
四、安裝配置SQL節點
兩台SQL節點(192.168.1.117、192.168.1.118)一樣的配置
1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓
mkdir -p /usr/local/mysql
cd /usr/local/mysql
tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster
2、建立mysql運作使用者
useradd -M -s /sbin/nologin mysql
3、建立mysql資料目錄、配置檔案目錄并授權
mkdir -p /etc/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql/
4、建立SQL節點配置檔案
vi /etc/mysql/my.cnf
[mysqld]
ndbcluster #啟動ndb引擎
ndb-connectstring=192.168.1.114 #管理節點IP位址
[mysql_cluster]
ndb-connectstring=192.168.1.114 #管理節點IP位址
5、配置mysql服務
cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
vi /etc/init.d/mysqld
6、初始化mysql資料庫
/usr/local/mysql/mysql-cluster/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/
報錯,缺少依賴,我們yum裝一下
yum -y install perl
再重新初始化一下
又報錯了,還是缺少依賴,再裝呗
yum -y install numactl
再來重新開機初始化一次,正常了
7、啟動SQL節點(和正常啟動mysql資料庫一樣)
service mysqld start
MySQL Cluster管理節點檢視
/usr/local/mysql/mysql-cluster/bin/ndb_mgm
ndb_mgm> show
SQL節點設定mysql密碼并授權用戶端可以登入
SQL節點1:(密碼123456)
/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password
/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456
mysql> grant all on *.* to [email protected]‘%‘ identified by ‘123456‘;
mysql> flush privileges;
SQL節點2:(密碼123456)
/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password
/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456
mysql> grant all on *.* to [email protected]‘%‘ identified by ‘123456‘;
mysql> flush privileges;
MySQL Cluster測試
測試一:先用用戶端登入任意一台SQL節點,然後建立庫,插入資料,檢視兩台SQL節點是否會自動同步
用戶端登入117SQL節點,建立資料:
mysql -u cluster -p123456 -h 192.168.1.117
mysql> create database BB;
mysql> use BB;
mysql> create table test2(id int)ENGINE=NDB;
mysql> insert into test2 values(33333);
用戶端退出117SQL節點,登入118SQL節點檢視資料是否同步:
mysql -u cluster -p123456 -h 192.168.1.118
mysql> select * from BB.test2;
測試二:關閉117SQL節點,然後使用用戶端登入118SQL節點,建立資料,建立完成資料之後,重新啟動117SQL節點,檢視117SQL節點是否能同步118SQL節點新建立的資料
關閉117SQL節點:
service mysqld stop
用戶端登入118SQL節點建立資料:
mysql -u cluster -p123456 -h 192.168.1.118
mysql> create database db;
mysql> use db;
mysql> create table test(id int) engine=ndb;
mysql> insert into test values(1000);
重新啟動117SQL節點:
service mysqld start
用戶端登入117SQL節點檢視在118SQL節點上建立的資料是否能同步過來:
mysql -u cluster -p123456 -h 192.168.1.117
mysql> show databases;
mysql> select * from db.test;
MySQL Cluster叢集啟動和關閉順序
請嚴格按照次序啟動和關閉叢集
啟動:
管理結點服務->資料結點服務->sql結點服務
關閉:
關閉管理結點服務,關閉管理結點服務後,nbdb資料結點服務會自動關閉->手動把sql結點服務關了。
說明:
首次啟動資料節點時,有帶上參數--initial,這是初始化參數,在以後的啟動過程中,則不能添加該參數,否則ndbd程式會清除在之前建立的所有用于恢複的資料檔案和日志檔案
筆者留下的一個天坑
由于我能力以及時間有限,在搭建過程中,發現了一個問題,這個搭建過程我是全部的防火牆都關閉了,因為我發現,如果所有伺服器的防火牆都開啟,即使我把MySQL Cluster叢集所需要的3306和1186端口開放了,搭建還是不成功,比如下圖,SQL節點怎麼都是not connected,但是隻要把防火牆關閉,瞬間就連接配接上了,哈哈,算是留下的一個坑吧,如果有大神看到這篇文章,且,知道該怎麼解決,并,願意把解決方案告訴我的,可以在網站的《關于》一欄,加一下我微信或Q群,小的在此感激不盡