技術(shù)文檔——Mysql-Cluster-7.5集群搭建
前言
隨著時代的發(fā)展,新技術(shù)的層出不窮。Mysql數(shù)據(jù)庫在業(yè)務(wù)量不大的時候,我們會使用主從復(fù)制的方法實現(xiàn)服務(wù)器數(shù)據(jù)同步,一主多從或者是雙主等,但是雖然進(jìn)行了讀寫分離,但是對于讀的方法限制還是比較大,所以解決數(shù)據(jù)同步的問題就是數(shù)據(jù)庫集群的意義。這里使用mysql官網(wǎng)提供的mysql-cluster實現(xiàn)集群,主要供技術(shù)學(xué)習(xí)及研究使用。
mysql cluster簡介
1、mysql-cluster已經(jīng)包含了mysql,這里使用的mysql-cluster7.5,官方說明包含的是mysql版本是5.7。所以不需要使用別的msyql的安裝包安裝數(shù)據(jù)庫。同時注意mysql5.7的版本在安裝的命令和配置上面和之前的版本有很大的不同,所以網(wǎng)上有很多mysql-cluster7.5之前的版本,所包含的mysql版本不同,所以安裝方法不同。
2、管理節(jié)點(diǎn),mysql-cluster管理節(jié)點(diǎn)負(fù)責(zé)管理、配置、監(jiān)控整個集群。
3、數(shù)據(jù)節(jié)點(diǎn),使用內(nèi)存存放數(shù)據(jù),保存進(jìn)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)都會自動復(fù)制并存儲到其他數(shù)據(jù)節(jié)點(diǎn)。
4、mysql節(jié)點(diǎn),也叫數(shù)據(jù)庫節(jié)點(diǎn),和我們平時使用的mysql相同,作為數(shù)據(jù)庫使用。被數(shù)據(jù)節(jié)點(diǎn)訪問。
mysql cluster架構(gòu)圖及說明

環(huán)境中的配置如圖所示,因為虛擬機(jī)占用內(nèi)存較大,只使用了3臺服務(wù)器,在實際情況中最好將數(shù)據(jù)節(jié)點(diǎn)和mysql節(jié)點(diǎn)分開。在實際中負(fù)載均衡服務(wù)還需要做備份,因為萬一負(fù)載均衡服務(wù)器宕機(jī)將會導(dǎo)致所有數(shù)據(jù)節(jié)點(diǎn)都無法訪問,所以需要對負(fù)載均衡服務(wù)器備份,有條件的話,分開管理節(jié)點(diǎn)和負(fù)載均衡器。
192.168.74.21??? 管理節(jié)點(diǎn)
192.168.74.22??? 數(shù)據(jù)節(jié)點(diǎn)、sql節(jié)點(diǎn)
192.168.74.23??? 數(shù)據(jù)節(jié)點(diǎn)、sql節(jié)點(diǎn)
mysql cluster安裝介質(zhì)
CentOS操作系統(tǒng)版本:CentOS-7-x86_64-DVD-1511.iso
mysql cluster版本:mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz?
mysql cluster安裝準(zhǔn)備工作
安裝之前,如果之前安裝過mysql,那么需要刪除相應(yīng)的各種mysql文件,刪除之前請停止mysql服務(wù)。并且不要忘記刪除my.cnf這些配置文件。確保刪除干凈。不然可能會和后面的安裝有沖突。如果是實驗,關(guān)閉防火墻,實際中,防火墻打開對應(yīng)端口(注意實際中需要使用的端口不只有3306端口,還有同步需要使用的1186端口)。保證服務(wù)器之前能互相訪問,能ping通。保證固定的ip地址。保證沒有別的程序占用需要使用的端口。如3306等。這些都確認(rèn)完畢后再進(jìn)行安裝。
關(guān)閉防火墻、設(shè)置主機(jī)名
systemctl stopfirewalld.service
systemctl disable firewalld.service
vi /etc/hosts
192.168.74.21 hdp21
192.168.74.22 hdp22
192.168.74.23 hdp23
將下載后的包上傳至服務(wù)器/usr/local下
cd /usr/local
tar xvfmysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
將需要的文件取出
cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64
cp bin/ndb_mgm*/usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*
新建配置文件并且初始化管理節(jié)點(diǎn)
mkdir/var/lib/mysql-cluster
mkdir /usr/local/mysql
vi/var/lib/mysql-cluster/config.ini
下面是配置文件,根據(jù)自己的需求修改。
[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M
[ndb_mgmd]
HostName=192.168.74.21
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.74.22
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.74.23
DataDir=/var/lib/mysql-cluster
[mysqld]
HostName=192.168.74.22
[mysqld]
HostName=192.168.74.23
使用配置文件初始化管理節(jié)點(diǎn)
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini --initial
出現(xiàn)MySQL Cluster Management Server mysql-5.7.16 ndb-7.5.4

然后就能使用ndbd進(jìn)去管理了
cd /usr/local/bin
ndb_mgm
ndb_mgm>show

ndb_mgm>show(使用show命令查看管理情況,當(dāng)數(shù)據(jù)節(jié)點(diǎn)配置完畢之后,我們再用這個命令查看和管理)
到此為止管理節(jié)點(diǎn)配置完畢,接下去配置數(shù)據(jù)和sql節(jié)點(diǎn)
安裝配置數(shù)據(jù)和mysql節(jié)點(diǎn)
以下的所有操作需要在所有的集群節(jié)點(diǎn)(管理節(jié)點(diǎn)除外)都要進(jìn)行相同的操作
新增用戶組mysql和用戶msyql
groupadd mysql
useradd -g mysql -s/bin/false mysql
新建文件夾并賦予權(quán)限
mkdir /var/lib/mysql-cluster
chown root:mysql/var/lib/mysql-cluster
將下載后的包上傳至服務(wù)器/usr/local下
解壓
cd /usr/local
tar xvfmysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
創(chuàng)建鏈接方便訪問
ln -s /usr/local/mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64/usr/local/mysql
初始化數(shù)據(jù)庫(這里要注意,如果安裝的版本不同,數(shù)據(jù)庫初始化的命令可能不同的,很多之前的版本會使用:scripts/mysql_install_db --user=mysql來初始化,這個已經(jīng)被mysql在新的版本中廢棄了,所以需要使用下面的命令安裝,如果需要安裝別的版本請參考mysql官網(wǎng)的對應(yīng)版本的安裝命令。)
進(jìn)入剛才創(chuàng)建的目錄的bin目錄下初始化,正常安裝mysql如何初始化就如何進(jìn)行安裝就可以了,這里還可以設(shè)置安裝數(shù)據(jù)庫的data目錄等參數(shù)。
cd /usr/local/mysql/bin
./mysqld --initialize--user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
如果初始化成功之后,系統(tǒng)會提示一個隨機(jī)生成的數(shù)據(jù)庫密碼,此時需要記住這個密碼,之后登錄數(shù)據(jù)庫需要使用這個密碼。
192.168.74.22 ??? p.(V9O+2*etk ???????????????????? #記錄192.168.74.22的初始化密碼
192.168.74.23???? vKeCI;+4Igl?? ???????????????????? #記錄192.168.74.23的初始化密碼
修改權(quán)限
chown -R root .
chown -R mysql data
chgrp -R mysql .
cp support-files/mysql.server/etc/rc.d/init.d/
chmod +x/etc/rc.d/init.d/mysql.server
chkconfig --addmysql.server
配置數(shù)據(jù)節(jié)點(diǎn)
vi /etc/my.cnf
[client]
port = 3306
socket =/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
user=root
port=3306
socket=/tmp/mysql.sock
server-id = 1
ndbcluster
ndb-connectstring=192.168.74.21
[mysql_cluster]
ndb-connectstring=192.168.74.21
其中的IP為管理節(jié)點(diǎn)的IP
啟動集群節(jié)點(diǎn)上面的服務(wù)啟動mysql(成功會有success)
/etc/init.d/mysql.serverstart

啟動mysql成功之后請自己登錄進(jìn)mysql內(nèi)然后進(jìn)行密碼修改等操作,就和正常安裝完成mysql的操作一樣。需要注意的是,集群數(shù)據(jù)庫的密碼需要相同。
./mysql -uroot -p??? ??????????????????????????? #登錄mysql,密碼粘貼上面記錄的初始密碼
setpassword=password('123456'); ?????? #修改密碼
./mysql -uroot -p123456??????? ????????????? #測試修改后的密碼是否能夠登錄
啟動ndbd
/usr/local/mysql/bin/ndbd–initial
如果出現(xiàn)下述現(xiàn)象就成功了

最后當(dāng)所有的節(jié)點(diǎn)配置完成,回到管理節(jié)點(diǎn),使用上述說過的show查看,如下的類似顯示,證明已經(jīng)連接完成

到這,數(shù)據(jù)節(jié)點(diǎn)跟sql節(jié)點(diǎn)配置就完成了,但是管理節(jié)點(diǎn)查看的狀態(tài)可能還是有些連接不上的,比如上圖的sql節(jié)點(diǎn)就沒有連上,這個時候不要慌,先把集群關(guān)閉了,再啟動一次就行了
關(guān)閉管理節(jié)點(diǎn):
ndb_mgm -e shutdown
關(guān)閉SQL節(jié)點(diǎn):
/etc/init.d/mysql.serverstop
啟動管理節(jié)點(diǎn):
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
啟動數(shù)據(jù)節(jié)點(diǎn):
/usr/local/mysql/bin/ndbd
啟動SQL節(jié)點(diǎn):
/etc/init.d/mysql.serverstart
都啟動后結(jié)果是下面那樣就是成功了

mysql cluster測試
修改mysql密碼統(tǒng)一,修改mysql的訪問權(quán)限,使外部ip能遠(yuǎn)程訪問mysql
cd /usr/local/mysql/bin
GRANT ALL PRIVILEGES ON*.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
然后創(chuàng)建在一臺上面創(chuàng)建數(shù)據(jù)庫,看另一臺是否被同步,然后創(chuàng)建表,然后新增刪除等等。
下列命令都在192.168.74.22上執(zhí)行,同時在192.168.74.22和192.168.74.23上查看
create database hdp;
show databases;


需要注意的是,創(chuàng)建表的時候必須選擇表的引擎為NDBCLUSTER,否則表不會進(jìn)行同步
use hdp;
CREATE TABLE student(age INT) ENGINE=NDBCLUSTER;

下面是測試的截圖


同樣的,插入數(shù)據(jù),增加、刪除、更改庫表都會同步,這里就不一一測了。
下面測試其中一臺(192.168.74.23)宕機(jī)的情況,這里采取停掉服務(wù)的方式
/etc/init.d/mysql.serverstop

接下來新增一個表
CREATE TABLE student2(age INT) ENGINE=NDBCLUSTER;

再次啟動服務(wù)
/etc/init.d/mysql.serverstart


mysql cluster集群啟動和關(guān)閉
啟動mysql集群。啟動順序為:管理節(jié)點(diǎn)→數(shù)據(jù)節(jié)點(diǎn)→SQL節(jié)點(diǎn)。
啟動的命令上面都有,刪去--initial即可。
管理節(jié)點(diǎn):
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
數(shù)據(jù)節(jié)點(diǎn):
/usr/local/mysql/bin/ndbd
SQL節(jié)點(diǎn):
/etc/init.d/mysql.server start
關(guān)閉時只需要關(guān)閉管理節(jié)點(diǎn),后面的數(shù)據(jù)節(jié)點(diǎn)會同時被關(guān)閉,mysql就和原來一樣即可
管理節(jié)點(diǎn)關(guān)閉命令:
ndb_mgm -e shutdown
(執(zhí)行完成之后管理節(jié)點(diǎn)會關(guān)閉,數(shù)據(jù)節(jié)點(diǎn)也會關(guān)閉,但SQL節(jié)點(diǎn)不會,也就是數(shù)據(jù)庫服務(wù)需要手動到每一臺服務(wù)器上停止以保證數(shù)據(jù)同步)
關(guān)閉SQL節(jié)點(diǎn):
/etc/init.d/mysql.serverstop
1、在實際中需要分開數(shù)據(jù)節(jié)點(diǎn)和sql節(jié)點(diǎn)。
2、安裝最好參考官網(wǎng)的文檔進(jìn)行配置安裝,網(wǎng)上的博客安裝的可能為舊版本,命令可能不同,連我自己現(xiàn)在寫的不知道你看的時候是不是官網(wǎng)又出了新版本,可能在某些地方進(jìn)行了改動。
3、配置文件過于簡單,還有很多配置會在實際中被使用到,需要參考文檔進(jìn)行添加。(my.cnf文件的配置需要根據(jù)你的實際進(jìn)行修改)
4、經(jīng)過測試各種節(jié)點(diǎn)斷開、服務(wù)器停止、數(shù)據(jù)庫服務(wù)停止、未會出現(xiàn)數(shù)據(jù)異常等特殊情況,但是宕機(jī)的機(jī)器恢復(fù)后如果有刪庫操作,不會同步,其他刪表、刪數(shù)據(jù)不會影響。