前言
隨著時代的發(fā)展,新技術的層出不窮檐盟。Mysql數(shù)據(jù)庫在業(yè)務量不大的時候葵萎,我們會使用主從復制的方法實現(xiàn)服務器數(shù)據(jù)同步,一主多從或者是雙主等谎痢,但是雖然進行了讀寫分離卷雕,但是對于讀的方法限制還是比較大漫雕,所以解決數(shù)據(jù)同步的問題就是數(shù)據(jù)庫集群的意義。這里使用mysql官網(wǎng)提供的mysql-cluster實現(xiàn)集群,主要供技術學習及研究使用太雨。
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é)點员咽,mysql-cluster管理節(jié)點負責管理翔试、配置、監(jiān)控整個集群滑频。
3峡迷、數(shù)據(jù)節(jié)點,使用內存存放數(shù)據(jù)彤避,保存進數(shù)據(jù)節(jié)點的數(shù)據(jù)都會自動復制并存儲到其他數(shù)據(jù)節(jié)點夯辖。
4楼雹、mysql節(jié)點尖阔,也叫數(shù)據(jù)庫節(jié)點,和我們平時使用的mysql相同谴供,作為數(shù)據(jù)庫使用桂肌。被數(shù)據(jù)節(jié)點訪問永淌。
mysql cluster架構圖及說明
環(huán)境中的配置如圖所示遂蛀,因為虛擬機占用內存較大,只使用了3臺服務器螃宙,在實際情況中最好將數(shù)據(jù)節(jié)點和mysql節(jié)點分開。在實際中負載均衡服務還需要做備份挂捅,因為萬一負載均衡服務器宕機將會導致所有數(shù)據(jù)節(jié)點都無法訪問闲先,所以需要對負載均衡服務器備份苗缩,有條件的話,分開管理節(jié)點和負載均衡器退盯。
192.168.74.21??? 管理節(jié)點
192.168.74.22??? 數(shù)據(jù)節(jié)點渊迁、sql節(jié)點
192.168.74.23??? 數(shù)據(jù)節(jié)點灶挟、sql節(jié)點
mysql cluster安裝介質
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安裝準備工作
安裝之前稚铣,如果之前安裝過mysql,那么需要刪除相應的各種mysql文件耕漱,刪除之前請停止mysql服務抬伺。并且不要忘記刪除my.cnf這些配置文件峡钓。確保刪除干凈。不然可能會和后面的安裝有沖突寞宫。如果是實驗拉鹃,關閉防火墻统锤,實際中饲窿,防火墻打開對應端口(注意實際中需要使用的端口不只有3306端口焕蹄,還有同步需要使用的1186端口)腻脏。保證服務器之前能互相訪問,能ping通做鹰。保證固定的ip地址钾麸。保證沒有別的程序占用需要使用的端口炕桨。如3306等。這些都確認完畢后再進行安裝钥平。
關閉防火墻涉瘾、設置主機名
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
將下載后的包上傳至服務器/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é)點
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é)點
/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進去管理了
cd /usr/local/bin
ndb_mgm
ndb_mgm>show
ndb_mgm>show(使用show命令查看管理情況友扰,當數(shù)據(jù)節(jié)點配置完畢之后庶柿,我們再用這個命令查看和管理)
到此為止管理節(jié)點配置完畢浮庐,接下去配置數(shù)據(jù)和sql節(jié)點
以下的所有操作需要在所有的集群節(jié)點(管理節(jié)點除外)都要進行相同的操作
新增用戶組mysql和用戶msyql
groupadd mysql
useradd -g mysql -s/bin/false mysql
新建文件夾并賦予權限
mkdir /var/lib/mysql-cluster
chown root:mysql/var/lib/mysql-cluster
將下載后的包上傳至服務器/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)的對應版本的安裝命令囊颅。)
進入剛才創(chuàng)建的目錄的bin目錄下初始化迁酸,正常安裝mysql如何初始化就如何進行安裝就可以了,這里還可以設置安裝數(shù)據(jù)庫的data目錄等參數(shù)焙畔。
cd /usr/local/mysql/bin
./mysqld --initialize--user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
如果初始化成功之后串远,系統(tǒng)會提示一個隨機生成的數(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的初始化密碼
修改權限
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é)點
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é)點的IP
啟動集群節(jié)點上面的服務啟動mysql(成功會有success)
/etc/init.d/mysql.serverstart
啟動mysql成功之后請自己登錄進mysql內然后進行密碼修改等操作,就和正常安裝完成mysql的操作一樣括眠。需要注意的是掷豺,集群數(shù)據(jù)庫的密碼需要相同薄声。
./mysql -uroot -p??? ??????????????????????????? #登錄mysql默辨,密碼粘貼上面記錄的初始密碼
setpassword=password('123456'); ?????? #修改密碼
./mysql -uroot -p123456??????? ????????????? #測試修改后的密碼是否能夠登錄
啟動ndbd
/usr/local/mysql/bin/ndbd–initial
如果出現(xiàn)下述現(xiàn)象就成功了
最后當所有的節(jié)點配置完成婴程,回到管理節(jié)點档叔,使用上述說過的show查看,如下的類似顯示铃肯,證明已經(jīng)連接完成
到這押逼,數(shù)據(jù)節(jié)點跟sql節(jié)點配置就完成了惦界,但是管理節(jié)點查看的狀態(tài)可能還是有些連接不上的沾歪,比如上圖的sql節(jié)點就沒有連上,這個時候不要慌挫望,先把集群關閉了狂窑,再啟動一次就行了
關閉管理節(jié)點:
ndb_mgm -e shutdown
關閉SQL節(jié)點:
/etc/init.d/mysql.serverstop
啟動管理節(jié)點:
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
啟動數(shù)據(jù)節(jié)點:
/usr/local/mysql/bin/ndbd
啟動SQL節(jié)點:
/etc/init.d/mysql.serverstart
都啟動后結果是下面那樣就是成功了
mysql cluster測試
修改mysql密碼統(tǒng)一媳板,修改mysql的訪問權限,使外部ip能遠程訪問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,否則表不會進行同步
use hdp;
CREATE TABLE student(age INT) ENGINE=NDBCLUSTER;
下面是測試的截圖
同樣的搁骑,插入數(shù)據(jù)斧吐,增加又固、刪除、更改庫表都會同步煤率,這里就不一一測了仰冠。
下面測試其中一臺(192.168.74.23)宕機的情況,這里采取停掉服務的方式
/etc/init.d/mysql.serverstop
接下來新增一個表
CREATE TABLE student2(age INT) ENGINE=NDBCLUSTER;
再次啟動服務
/etc/init.d/mysql.serverstart
mysql cluster集群啟動和關閉
啟動mysql集群蝶糯。啟動順序為:管理節(jié)點→數(shù)據(jù)節(jié)點→SQL節(jié)點洋只。
啟動的命令上面都有,刪去--initial即可昼捍。
管理節(jié)點:
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
數(shù)據(jù)節(jié)點:
/usr/local/mysql/bin/ndbd
SQL節(jié)點:
/etc/init.d/mysql.server start
關閉時只需要關閉管理節(jié)點识虚,后面的數(shù)據(jù)節(jié)點會同時被關閉,mysql就和原來一樣即可
管理節(jié)點關閉命令:
ndb_mgm -e shutdown
(執(zhí)行完成之后管理節(jié)點會關閉妒茬,數(shù)據(jù)節(jié)點也會關閉担锤,但SQL節(jié)點不會,也就是數(shù)據(jù)庫服務需要手動到每一臺服務器上停止以保證數(shù)據(jù)同步)
關閉SQL節(jié)點:
/etc/init.d/mysql.serverstop
1乍钻、在實際中需要分開數(shù)據(jù)節(jié)點和sql節(jié)點肛循。
2、安裝最好參考官網(wǎng)的文檔進行配置安裝银择,網(wǎng)上的博客安裝的可能為舊版本多糠,命令可能不同,連我自己現(xiàn)在寫的不知道你看的時候是不是官網(wǎng)又出了新版本浩考,可能在某些地方進行了改動夹孔。
3、配置文件過于簡單怀挠,還有很多配置會在實際中被使用到析蝴,需要參考文檔進行添加。(my.cnf文件的配置需要根據(jù)你的實際進行修改)
4绿淋、經(jīng)過測試各種節(jié)點斷開闷畸、服務器停止、數(shù)據(jù)庫服務停止吞滞、未會出現(xiàn)數(shù)據(jù)異常等特殊情況佑菩,但是宕機的機器恢復后如果有刪庫操作,不會同步裁赠,其他刪表殿漠、刪數(shù)據(jù)不會影響。