




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MySQL Cluster集群1 MySQL Cluster介紹MySQL Cluster 實(shí)際上是在無(wú)共享存儲(chǔ)設(shè)備的情況下實(shí)現(xiàn)的一種完全分布式數(shù)據(jù)庫(kù)系統(tǒng),其主要通過(guò) NDB Cluster(簡(jiǎn)稱NDB)存儲(chǔ)引擎來(lái)實(shí)現(xiàn)。MySQL Cluster 剛剛誕生的時(shí)候可以說(shuō)是一個(gè)可以對(duì)數(shù)據(jù)進(jìn)行持久化的內(nèi)存數(shù)據(jù)庫(kù),所有數(shù)據(jù)和索引都必須裝載在內(nèi)存中才能夠正常運(yùn)行,但是最新的 MySQL Cluster 版本已經(jīng)可以做到僅僅將所有索引裝載在內(nèi)存中即可,實(shí)際的數(shù)據(jù)可以不用全部裝載到內(nèi)存中。1.1 組件介紹1.1.1 SQL節(jié)點(diǎn)SQL層的SQL服務(wù)器節(jié)點(diǎn)(后面簡(jiǎn)稱為SQL節(jié)點(diǎn)):也就是我們常說(shuō)的MySQL S
2、erver。主要負(fù)責(zé)實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)在存儲(chǔ)層之上的所有事情,比如連接管理,Query優(yōu)化和響應(yīng) ,Cache管理等等,只有存儲(chǔ)層的工作交給了NDB數(shù)據(jù)節(jié)點(diǎn)去處理了。也就是說(shuō),在純粹的MySQL Cluster環(huán)境中的SQL節(jié)點(diǎn),可以被認(rèn)為是一個(gè)不需要提供任何存儲(chǔ)引擎的MySQL服務(wù)器,因?yàn)樗拇鎯?chǔ)引擎有Cluster 環(huán)境中的NDB 節(jié)點(diǎn)來(lái)?yè)?dān)任。所以,SQL層各MySQL服務(wù)器的啟動(dòng)與普通的MySQL Server啟動(dòng)也有一定的區(qū)別,必須要添加ndbcluster參數(shù)選項(xiàng)才行。我們可以添加在f配置文件中,也可以通過(guò)啟動(dòng)命令行來(lái)指定。1.1.2 NDB數(shù)據(jù)節(jié)點(diǎn)Storage層的NDB數(shù)據(jù)節(jié)點(diǎn):也就
3、是上面說(shuō)的NDB Cluster。最初的NDB是一個(gè)內(nèi)存式存儲(chǔ)引擎,當(dāng)然也會(huì)將數(shù)據(jù)持久化到存儲(chǔ)設(shè)備上。但是最新的NDB Cluster存儲(chǔ)引擎已經(jīng)改進(jìn)了這一點(diǎn),可以選擇數(shù)據(jù)是全部加載到內(nèi)存中還是僅僅加載索引數(shù)據(jù)。NDB節(jié)點(diǎn)主要是實(shí)現(xiàn)底層數(shù)據(jù)存儲(chǔ)功能,來(lái)保存Cluster的數(shù)據(jù)。每一個(gè)Cluster節(jié)點(diǎn)保存完整數(shù)據(jù)的一個(gè)fragment,也就是一個(gè)數(shù)據(jù)分片(或者一份完整的數(shù)據(jù),視節(jié)點(diǎn)數(shù)目和配置而定),所以只要配置得當(dāng),MySQL Cluster在存儲(chǔ)層不會(huì)出現(xiàn)單點(diǎn)的問(wèn)題。一般來(lái)說(shuō),NDB節(jié)點(diǎn)被組織成一個(gè)一個(gè)的NDB Group,一個(gè)NDB Group實(shí)際上就是一組存有完全相同的物理數(shù)據(jù)的NDB節(jié)
4、點(diǎn)群。上面提到了NDB各個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)的組織,可能每個(gè)節(jié)點(diǎn)都存有全部的數(shù)據(jù)也可能只保存一部分?jǐn)?shù)據(jù),主要是受節(jié)點(diǎn)數(shù)目和參數(shù)來(lái)控制的。首先在MySQL Cluster主配置文件(在管理節(jié)點(diǎn)上面,一般為config.ini)中,有一個(gè)非常重要的參數(shù)叫NoOfReplicas,這個(gè)參數(shù)指定了每一份數(shù)據(jù)被冗余存儲(chǔ)在不同節(jié)點(diǎn)上面的份數(shù),該參數(shù)一般至少應(yīng)該被設(shè)置成2,也只需要設(shè)置成2就可以了。因?yàn)檎?lái)說(shuō),兩個(gè)互為冗余的節(jié)點(diǎn)同時(shí)出現(xiàn)故障的概率還是非常小的,當(dāng)然如果機(jī)器和內(nèi)存足夠多的話,也可以繼續(xù)增大來(lái)更進(jìn)一步減小出現(xiàn)故障的概率。此外,一個(gè)節(jié)點(diǎn)上面是保存所有的數(shù)據(jù)還是一部分?jǐn)?shù)據(jù)還受到存儲(chǔ)節(jié)點(diǎn)數(shù)目的限制。NDB
5、存儲(chǔ)引擎首先保證NoOfReplicas參數(shù)配置的要求來(lái)使用存儲(chǔ)節(jié)點(diǎn),對(duì)數(shù)據(jù)進(jìn)行冗余,然后再根據(jù)節(jié)點(diǎn)數(shù)目將數(shù)據(jù)分段來(lái)繼續(xù)使用多余的NDB節(jié)點(diǎn)。分段的數(shù)目為節(jié)點(diǎn)總數(shù)除以NoOfReplicas 所得。1.1.3 Manager節(jié)點(diǎn)負(fù)責(zé)管理各個(gè)節(jié)點(diǎn)的Manage節(jié)點(diǎn)主機(jī);管理節(jié)點(diǎn)負(fù)責(zé)整個(gè)Cluster集群中各個(gè)節(jié)點(diǎn)的管理工作,包括集群的配置,啟動(dòng)關(guān)閉各節(jié)點(diǎn),對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行常規(guī)維護(hù),以及實(shí)施數(shù)據(jù)的備份恢復(fù)等。管理節(jié)點(diǎn)會(huì)獲取整個(gè)Cluster環(huán)境中各節(jié)點(diǎn)的狀態(tài)和錯(cuò)誤信息,并且將各 Cluster 集群中各個(gè)節(jié)點(diǎn)的信息反饋給整個(gè)集群中其他的所有節(jié)點(diǎn)。由于管理節(jié)點(diǎn)上保存了整個(gè)Cluster 環(huán)境的配置,同
6、時(shí)擔(dān)任了集群中各節(jié)點(diǎn)的基本溝通工作,所以他必須是最先被啟動(dòng)的節(jié)點(diǎn)。1.2 應(yīng)用場(chǎng)景2 MySQL Cluster搭建2.1 安裝包下載1、下載下載地址:2、下載下載地址:2.2 目錄說(shuō)明/data/software/ 軟件存放目錄/data/program/mysqlCluster/ 數(shù)據(jù)存放路徑2.3 環(huán)境準(zhǔn)備搭建 MySQL Cluster首先需要至少一個(gè)管理節(jié)點(diǎn)主機(jī)來(lái)實(shí)現(xiàn)管理功能,一個(gè)SQL節(jié)點(diǎn)主機(jī)來(lái)實(shí)現(xiàn)MySQL server功能和兩個(gè)ndb節(jié)點(diǎn)主機(jī)實(shí)現(xiàn)NDB Cluster的功能。我在這里測(cè)試使用雙SQL節(jié)點(diǎn)來(lái)搭建測(cè)試環(huán)境,具體信息如下:2.3.1 系統(tǒng)及網(wǎng)絡(luò)準(zhǔn)備所有節(jié)點(diǎn)均使用Cen
7、tOS7.0操作系統(tǒng),采用Mini最簡(jiǎn)化安裝。系統(tǒng)鏡像:CentOS-7-x86_64-DVD-1503-01.isoMySQL節(jié)點(diǎn)1 1 sql01MySQL節(jié)點(diǎn)2 1 sql02ndb節(jié)點(diǎn)1 1 ndb01ndb節(jié)點(diǎn)2 1 ndb02管理節(jié)點(diǎn) 1 mgr2.3.2 修改主機(jī)名稱#vim /etc/HOSTNAMEmgr#vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4:1 localhost localhost.localdomain localhost6 l
8、ocalhost6.localdomain610.0.33.11 mgr10.0.33.137 ndb0210.0.33.130 ndb0110.0.33.217 sql0110.0.33.219 sql022.3.3 關(guān)閉SElinux和防火墻1、關(guān)閉系統(tǒng)防火墻#systemctl stop firewalld.service 關(guān)閉防火墻#systemctl disable firewalld.service 禁用防火墻2、關(guān)閉SElinux#sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config#setenf
9、orce 0 立即生效2.3.4 安裝編譯代碼需要的包#yum -y install make git gcc-c+ bison-devel ncurses-devel perl per-devel ncurses-devel bison cmake java-1.8.0-openjdk 2.3.5 mysql舊版本清除首先使用如下命令來(lái)清理之前操作系統(tǒng)自帶的mysql安裝: # yum -y remove mysql 然后使用如下命令: # rpm -qa | grep mysql* 對(duì)于找到的剩余mysql包,請(qǐng)按照如下的命令格式予以刪除: # rpm -e -nodeps my
10、sql-libs-5.1.61-4.el6.x86_64 # rpm -e -nodeps2.4 創(chuàng)建數(shù)據(jù)存放目錄# mkdir -p /data/program/mysqlCluster/bin,ndbdata,tmp2.5 新建mysql用戶及用戶組# groupadd mysql# useradd -g mysql -s /usr/sbin/nologin mysql# chown -R mysql:mysql /data/program/mysqlCluster2.6 解壓縮安裝包# cd /data/software# tar xzvf# tar xzvf# cd mysql-clu
11、ster-gpl-7.5.82.7 編譯將以下全部拷貝到窗口執(zhí)行。注意,特別強(qiáng)調(diào),下面編譯參數(shù)的"="之間不能有空格。#cmake -DCMAKE_INSTALL_PREFIX=/data/program/mysqlCluster -DMYSQL_UNIX_ADDR=/data/program/mysqlCluster/tmp/mysql-cluster.sock -DMYSQL_DATADIR=/data/program/mysqlCluster/ndbdata-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_
12、ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DEXTRA_CHARSETS=all -DWITH_EMBEDDED_SERVER=0 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_NDBCLUSTE
13、R_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DWITH_DEBUG=0 -DWITH_NDB_JAVA=OFF-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/data/software -DENABLE_DOWNLOADS=1若此步發(fā)生錯(cuò)誤,干掉當(dāng)前目錄下的CMakeCache.txt,重新再執(zhí)行一次。rootmgr mysql-cluster-gpl-7.5.8 # rm -rf CMakeCache.txt安裝成功!# make &&am
14、p; make install過(guò)程會(huì)持續(xù)大概40分鐘。2.8 配置環(huán)境變量#vi /etc/profile#在文件中添加以下內(nèi)容export PATH=$PATH:/data/program/mysqlCluster/bin# source /etc/profile2.9 安裝My Cluster#cd /data/program/mysqlCluster/bin/#mysqld -collation-server=utf8_general_ci -character-set-server=utf8 -user=mysql -basedir=/data/program/mysqlCluster
15、 -datadir=/data/program/mysqlCluster/ndbdata -secure-file-priv=/data/program/mysqlCluster/test/ -initialize#將標(biāo)紅色的密碼記下來(lái),下面有用。密碼為:g_kKsm6j=ggj注意:需要先確保 datadir 目標(biāo)目錄下是空的,避免誤操作破壞已有數(shù)據(jù)。如果想強(qiáng)制初始化,那么直接刪除data目錄就可以了。至此,準(zhǔn)備的虛擬機(jī)模板已搞定!模板名稱為:(MySQL Cluster template)。下一步將通過(guò)此模板創(chuàng)建兩個(gè)MySQL節(jié)點(diǎn),兩個(gè)NDB節(jié)點(diǎn)。并將這些節(jié)點(diǎn)修改ip地址和主機(jī)名稱。2.1
16、0 管理節(jié)點(diǎn)配置2.10.1 創(chuàng)建配置文件目錄及文件 # mkdir /data/program/mysqlCluster/etc# vi /data/program/mysqlCluster/etc/config.ini#config.ini配置文件如下所示ndb_mgmd defaultdatadir=/data/program/mysqlCluster/ndbdatandbd defaultNoOfReplicas = 2DataMemory = 200MIndexMemory = 20Mdatadir=/data/program/mysqlCluster/ndbdatandb
17、_mgmdNodeId = 1HostNamedatadir=/data/program/mysqlCluster/ndbdatandbdNodeId = 11HostNamedatadir=/data/program/mysqlCluster/ndbdatandbdNodeId=12HostNamedatadir=/data/program/mysqlCluster/ndbdatamysqldNodeId = 21HostNamemysqldNodeId=22HostNamemysqldmysqldmysqld2.10.2 啟動(dòng)管理節(jié)點(diǎn)首次加載/data/program/mysqlClust
18、er/etc/config.ini文件有改變,其它時(shí)候不要加,除非是在備份、恢復(fù)或配置變化后重啟時(shí),其他時(shí)候不要加,不然數(shù)據(jù)就清空了。正常啟動(dòng)方式:# ndb_mgmd -f /data/program/mysqlCluster/etc/config.ini -initial如果有改動(dòng)要加上:# rm -rf /data/program/mysqlCluster/mysql# ndb_mgmd -f /data/program/mysqlCluster/etc/config.ini2.10.3 查看集群狀態(tài)# ndb_mgm- NDB Cluster - Management Client -
19、ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration-ndbd(NDB)2 node(s)id=11 (not connected, accepting connect from 10.0.33.130)id=12 (not connected, accepting connect from 10.0.33.137)ndb_mgmd(MGM)1 node(s)id=110.0.33.11 (mysql-5.7.20 ndb-7.5.8)mysqld(API)5 node(s)
20、id=21 (not connected, accepting connect from 10.0.33.217)id=22 (not connected, accepting connect from 10.0.33.219)id=23 (not connected, accepting connect from any host)id=24 (not connected, accepting connect from any host)id=25 (not connected, accepting connect from any host)關(guān)閉管理節(jié)點(diǎn):ndb_mgm> shutd
21、own2.11 NDB節(jié)點(diǎn)配置2.11.1 編輯f編輯/etc/f,在最后添加如下。#vi f ndbclusterndb-connectstring=10.mysql_clusterndb-connectstring=10.2.11.2 啟動(dòng)數(shù)據(jù)節(jié)點(diǎn)只是在第一次啟動(dòng)或在備份恢復(fù)或配置變化后重啟ndbd時(shí),才加initial參數(shù)!#ndbd initial2017-11-02 22:58:00 ndbd INFO - Angel connected to '10.0.33.11:1186'2017-11-02 22:58:00 ndbd INFO - Angel allocat
22、ed nodeid: 11正常啟動(dòng)方式:#ndbd2.11.3 查看 ndbd 啟動(dòng)狀態(tài)# ps -ef | grep ndbdroot 3209 1 0 07:35 ? 00:00:00 ndbd -initialroot 3210 3209 13 07:35 ? 00:00:02 ndbd -initialroot 3253 2936 0 07:36 pts/0 00:00:00 grep -color=auto ndbd2.12 MySQL節(jié)點(diǎn)配置2.12.1 設(shè)置mysqld的開(kāi)機(jī)啟動(dòng):# cd# cp mysql.server /etc/init.d/mysql# chmod 755
23、 /etc/init.d/mysql # chkconfig mysql on2.12.2 編輯f編輯/etc/f,添加如下內(nèi)容:mysqldbasedir =/data/program/mysqlClusterdatadir =/data/program/mysqlCluster/ndbdatasocket=/data/program/mysqlCluster/tmp/mysql-cluster.sockndbclusterndb-connectstring = sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESclientdefault-
24、character-set = utf8mysqldcharacter_set_server=utf8mysql_clusterndb-connectstring = 2.12.3 啟動(dòng)mysql# service mysql start #啟動(dòng)Starting MySQL. SUCCESS!# service mysql stop #停止# service mysql restart #重啟2.12.4 重置root帳戶的密碼將所有MySQL節(jié)點(diǎn)重新設(shè)置賬戶密碼,將前面步驟“安裝My cluster”隨機(jī)生成的密碼輸入。# mysql -u root -pmysql> SET PASS
25、WORD = PASSWORD('123456');將外部訪問(wèn)root 的密碼設(shè)置為123456mysql> GRANT ALL PRIVILEGES ON *.* TO 'root''%' IDENTIFIED BY '123456' WITH GRANT OPTION;2.12.5 集群狀態(tài)查看節(jié)點(diǎn)全部啟動(dòng)成功后,在管理節(jié)點(diǎn)使用ndb_mgm工具的show命令查看集群狀態(tài):ndb_mgm工具是ndb_mgmd(MySQL Cluster Server)的客戶端管理工具,通過(guò)該工具可以方便的檢查Cluster的狀態(tài),啟動(dòng)備
26、份,關(guān)閉等功能。更詳細(xì)的方法可以通過(guò)ndb_mgm -help命令來(lái)進(jìn)行查看。從上面顯示的狀態(tài)可以看出如下信息。(1)集群目前的管理服務(wù)器端口是1186。Connected to Management Server at: localhost:1186(2)集群的數(shù)據(jù)節(jié)點(diǎn)(NDB)有2個(gè)。(3)集群的管理節(jié)點(diǎn)有一個(gè)。(4)SQL節(jié)點(diǎn)有5個(gè),目前處于連接狀態(tài)的有2個(gè)。到這里MySQL Cluster就已經(jīng)搭建完成了。3 高可用測(cè)試成功啟動(dòng)后,下面來(lái)測(cè)試一下Cluster的功能。如果要使用cluster,則表的引擎必須為NDB,其他類型存儲(chǔ)引擎的數(shù)據(jù)不會(huì)保存到數(shù)據(jù)節(jié)點(diǎn)中。對(duì)于cluster的一個(gè)重
27、要功能就是防止單點(diǎn)故障。我們下面對(duì)這些問(wèn)題分別來(lái)進(jìn)行測(cè)試。3.1 NDB存儲(chǔ)引擎測(cè)試(1)在任意一個(gè)SQL節(jié)點(diǎn)(我這里選擇)的test庫(kù)中創(chuàng)建測(cè)試表t1,設(shè)置存儲(chǔ)引擎為NDB,并插入兩條測(cè)試數(shù)據(jù):mysql> create table t1 ( -> id int, -> name varchar(20) -> ) -> engine=ndb -> ;Query OK, 0 rows affected (0.44 sec)mysql> insert into t1 select 1,'yayun'Query OK, 1 row affe
28、cted (0.11 sec)Records: 1 Duplicates: 0 Warnings: 0mysql> insert into t1 select 1,'atlas'Query OK, 1 row affected (0.03 sec)Records: 1 Duplicates: 0 Warnings: 0(2)在另外一SQL節(jié)點(diǎn)()查詢test庫(kù)中t1表,結(jié)果如下:mysql> select * from test.t1;+-+-個(gè)-+| id | name |+-+-+| 1 | atlas | 1 | yayun |+-+-+2 rows in s
29、et (0.08 sec)顯然,兩個(gè)SQL節(jié)點(diǎn)查詢的數(shù)據(jù)時(shí)一致的。(3)在SQL節(jié)點(diǎn)上把測(cè)試表t1引擎改為MyISAM,再次插入測(cè)試數(shù)據(jù):mysql> alter table t1 engine=myisam;Query OK, 2 rows affected (0.50 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> insert into t1 select 2,'good boy'Query OK, 1 row affected (0.00 sec)Records: 1 Duplicates: 0 Warnings
30、: 0(4)在SQL節(jié)點(diǎn)上再次查詢表t1,結(jié)果如下:mysql> select * from t1;ERROR 1146 (42S02): Table 'test.t1' doesn't existmysql> show tables;Empty set (0.04 sec)直接報(bào)錯(cuò),說(shuō)表不存在了。(老版本是報(bào)ERROR 1412:Table definition ha changed,please retry transaction)。(5)我們?cè)俅胃幕豊DB引擎。mysql> alter table t1 engine=ndb;Quer
31、y OK, 3 rows affected (0.25 sec)Records: 3 Duplicates: 0 Warnings: 0(6)再次進(jìn)行查詢?nèi)缦拢簃ysql> select * from t1;+-+-+| id | name |+-+-+| 1 | atlas | 2 | good boy | 1 | yayun |+-+-+3 rows in set (0.02 sec)發(fā)現(xiàn)表t1的數(shù)據(jù)再次同步到了數(shù)據(jù)節(jié)點(diǎn)。所有SQL節(jié)點(diǎn)又都可以正常查詢數(shù)據(jù)。3.2 單點(diǎn)故障測(cè)試對(duì)于任意一種節(jié)點(diǎn),都存在單點(diǎn)故障的可能性。在cluster的設(shè)置過(guò)程中,應(yīng)該盡量對(duì)每一類節(jié)點(diǎn)設(shè)置冗余,以防止
32、單點(diǎn)故障發(fā)生時(shí)造成的應(yīng)用中斷。對(duì)于管理節(jié)點(diǎn),一般不需要特殊的配置,只需要將管理工具和配置文件防止多臺(tái)服務(wù)器上即可。下面我們測(cè)試一下SQL節(jié)點(diǎn)和NDB(數(shù)據(jù)節(jié)點(diǎn))的單點(diǎn)故障。3.2.1 SQL節(jié)點(diǎn)單點(diǎn)故障對(duì)于上面的測(cè)試環(huán)境中,我們?cè)O(shè)置了兩個(gè)SQL節(jié)點(diǎn),應(yīng)用從兩個(gè)節(jié)點(diǎn)對(duì)數(shù)據(jù)訪問(wèn)都可以得到一致的結(jié)果。如果有一個(gè)節(jié)點(diǎn)故障,系統(tǒng)會(huì)正常運(yùn)行嗎?我們測(cè)試便知。(1)將SQL節(jié)點(diǎn)上的MySQL服務(wù)停止:root # /etc/init.d/mysqld stopShutting down MySQL. OK root # (2)查看cluster狀態(tài):ndb_mgm> showCluster Confi
33、guration-ndbd(NDB) 2 node(s)id=2 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0, Master)id=3 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 1)ndb_mgmd(MGM) 1 node(s)id=1 (mysql-5.5.19 ndb-7.2.4)mysqld(API) 3 node(s)id=4 (mysql-5.5.19 ndb-7.2.4)id=5 (not connected, accepting connect from )id=6 (not connected, accepting
34、connect from any host)可以發(fā)現(xiàn)SQL節(jié)點(diǎn)已經(jīng)斷開(kāi),但是另外一個(gè)SQL節(jié)點(diǎn)仍然處于正常狀態(tài)。(3)從SQL節(jié)點(diǎn)上查看表t1,結(jié)果如下:mysql> select * from t1;+-+-+| id | name |+-+-+| 2 | good boy | 1 | yayun | 1 | atlas |+-+-+3 rows in set (0.01 sec)顯然,SQL節(jié)點(diǎn)的單點(diǎn)故障并沒(méi)有引起數(shù)據(jù)查詢的故障。對(duì)于應(yīng)用來(lái)說(shuō),需要改變的就是將以前對(duì)故障節(jié)點(diǎn)的訪問(wèn)改為對(duì)非故障節(jié)點(diǎn)的訪問(wèn)(SQL節(jié)點(diǎn)前面可以掛LVS,然后做各種檢測(cè))3.2.2 NDB節(jié)點(diǎn)的單點(diǎn)故障在這個(gè)
35、測(cè)試環(huán)境中,數(shù)據(jù)節(jié)點(diǎn)也是兩個(gè),那么他們對(duì)數(shù)據(jù)的存儲(chǔ)是互相鏡像還是一份數(shù)據(jù)分成幾塊存儲(chǔ)呢?這個(gè)答案關(guān)鍵在于配置文件中NDBD DEFAULT組中的NoOfReplicas參數(shù),如果這個(gè)參數(shù)等于1,表示只有一份數(shù)據(jù),但是分成N塊分別存儲(chǔ)在N個(gè)數(shù)據(jù)節(jié)點(diǎn)上,如果該值等于2,則表示數(shù)據(jù)被分成N/2,每塊數(shù)據(jù)都有兩個(gè)備份,這樣即使有任意一個(gè)節(jié)點(diǎn)發(fā)生故障,只要它的備份節(jié)點(diǎn)正常,數(shù)據(jù)就可以正常查詢。在下面的例子中,先將兩個(gè)數(shù)據(jù)節(jié)點(diǎn)之一停止,訪問(wèn)表t1,看能否正常訪問(wèn);然后將NoOfReplicas配置改為2,這時(shí),數(shù)據(jù)節(jié)點(diǎn)實(shí)際上已經(jīng)互為鏡像,保存了兩份。這時(shí)再停止任意一個(gè)數(shù)據(jù)節(jié)點(diǎn),看是否能訪問(wèn)表t1。(1)將
36、數(shù)據(jù)節(jié)點(diǎn)上的NDB進(jìn)程停止:root # ps -ef | grep ndbdroot 2266 1 0 21:51 ? 00:00:00 ndbd -initialroot 2267 2266 1 21:51 ? 00:01:03 ndbd -initialroot 2368 1300 0 23:06 pts/0 00:00:00 grep ndbdroot # pkill -9 ndbdroot # ps -ef | grep ndbdroot 2371 1300 0 23:07 pts/0 00:00:00 grep ndbd(2)在任意節(jié)點(diǎn),這里是查看表t1的數(shù)據(jù):mysql>
37、select * from t1;ERROR 1296 (HY000): Got error 157 'Unknown error code' from NDBCLUSTERmysql> 顯然無(wú)法訪問(wèn)表t1的數(shù)據(jù)了。(3)將配置文件中的NoOfReplicas改為2,按照前面的步驟重新啟動(dòng)集群:# grep 'NoOfReplicas' /data/program/mysql-cluster/etc/config.ini NoOfReplicas=2 #每個(gè)數(shù)據(jù)節(jié)點(diǎn)的鏡像數(shù)量最后發(fā)現(xiàn)無(wú)法啟動(dòng)數(shù)據(jù)節(jié)點(diǎn),查看錯(cuò)誤日志如下:Time: Tuesday 15 Ap
38、ril 2014 - 23:22:51Status: Permanent error, external action neededMessage: Invalid configuration received from Management Server (Configuration error)Error: 2350Error data: Illegal configuration change. Initial start needs to be performed when changing no of replicas (1 != 2)Error object: DBDIH (Lin
39、e: 4820) 0x00000002Program: ndbd看來(lái)NoOfReplicas參數(shù)無(wú)法臨時(shí)更改,我們開(kāi)始就需要設(shè)置好,不要到后面才想到更改,那時(shí)就悲劇了。如果重新ndbd -initial,將會(huì)丟失所有數(shù)據(jù),記住這個(gè)坑,下次就不會(huì)踩進(jìn)去了。一切正常。我們現(xiàn)在停止NDB節(jié)點(diǎn),看是否還能訪問(wèn)數(shù)據(jù):ndb_mgm> showCluster Configuration-ndbd(NDB) 2 node(s)id=2 (not connected, accepting connect from )id=3 (mysql-5.5.19 ndb-7.2.4, Nodegroup: 0,
40、Master)ndb_mgmd(MGM) 1 node(s)id=1 (mysql-5.5.19 ndb-7.2.4)mysqld(API) 3 node(s)id=4 (mysql-5.5.19 ndb-7.2.4)id=5 (mysql-5.5.19 ndb-7.2.4)id=6 (not connected, accepting connect from any host)看見(jiàn)只有一個(gè)NDB節(jié)點(diǎn)在運(yùn)行。訪問(wèn)任意SQL節(jié)點(diǎn)查詢數(shù)據(jù),我這里用,查詢結(jié)果如下:mysql> select * from t1;+-+| name |+-+| atlas | yayun |+-+2 rows
41、in set (0.01 sec)顯然掛掉一個(gè)NDB節(jié)點(diǎn)不影響我們正常的數(shù)據(jù)查詢,數(shù)據(jù)節(jié)點(diǎn)的冗余同樣防止了單點(diǎn)故障。4 動(dòng)態(tài)增加數(shù)據(jù)節(jié)點(diǎn)4.1 更新管理節(jié)點(diǎn)config.ini文件# vim /data/program/mysqlCluster/etc/config.ini添加ndb節(jié)點(diǎn)ndbdNodeId=13HostName=datadir=/data/program/mysqlCluster/ndbdatandbdNodeId=14HostName=20datadir=/data/program/mysqlCluster/ndbdata由于4.2 重新啟動(dòng)管理節(jié)點(diǎn)服務(wù)4.2.1 停止管理
42、節(jié)點(diǎn)ndb_mgm> 1 stopNode 1 has shutdown.Disconnecting to allow Management Server to shutdown4.2.2 重新加載配置文件# ndb_mgmd -f /data/program/mysqlCluster/etc/config.ini -reload# ndb_mgmndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration-ndbd(NDB)4 node(s)id=1110.0.33.130
43、(mysql-5.7.20 ndb-7.5.8, Nodegroup: 0)id=1210.0.33.137 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0, *)id=13 (not connected, accepting connect from 10.0.33.219)id=20)ndb_mgmd(MGM)1 node(s)id=110.0.33.11 (mysql-5.7.20 ndb-7.5.8)mysqld(API)1 node(s)id=2110.0.33.217 (mysql-5.7.20 ndb-7.5.8)4.2.3 重啟NDB數(shù)據(jù)節(jié)點(diǎn)對(duì)已經(jīng)存
44、在的數(shù)據(jù)節(jié)點(diǎn)執(zhí)行環(huán)狀重啟。ndb_mgm> 1 RESTARTNode 1: Node shutdown initiatedNode 1: Node shutdown completed, restarting, no start.Node 1 is being restartedndb_mgm> Node 1: Start initiated (version 7.1.20)Node 1: Started (version 7.1.20)ndb_mgm> 2 RESTARTNode 2: Node shutdown initiatedNode 2: Node shutdow
45、n completed, restarting, no start.Node 2 is being restartedndb_mgm> Node 2: Start initiated (version 7.1.20)ndb_mgm> Node 2: Started (version 7.1.20)注意:一定要等到管理端報(bào)告ndb節(jié)點(diǎn)已經(jīng)啟動(dòng)后再重啟下一個(gè)ndb節(jié)點(diǎn)。4.2.4 重啟SQL節(jié)點(diǎn)對(duì)mysql節(jié)點(diǎn)執(zhí)行環(huán)狀重啟。# service mysqld restart4.2.5 初始化新NDB數(shù)據(jù)節(jié)點(diǎn)對(duì)新NDB數(shù)據(jù)節(jié)點(diǎn)進(jìn)行初始化啟動(dòng)。# ndbd -c -initial# ndbd
46、 -c 20 initial注意:這里不需要一個(gè)數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)后在啟動(dòng)另一個(gè),可以同時(shí)啟動(dòng)。4.2.6 為新數(shù)據(jù)節(jié)點(diǎn)分配新的組ndb_mgm> CREATE NODEGROUP 3,4Nodegroup 1 createdndb_mgm> SHOWConnected to Management Server at: localhost:1186Cluster Configuration-ndbd(NDB)4 node(s)id=1110.0.33.130 (mysql-5.7.20 ndb-7.5.8, Nodegroup: 0)id=1210.0.33.137 (mysql-5.7
47、.20 ndb-7.5.8, Nodegroup: 0, *)id=13 10.0.33.219 (5.1.61-ndb-7.1.20, Nodegroup: 1)id=14 10.0.33.220 (5.1.61-ndb-7.1.20, Nodegroup: 1)ndb_mgmd(MGM)1 node(s)id=110.0.33.11 (mysql-5.7.20 ndb-7.5.8)mysqld(API)1 node(s)id=2110.0.33.217 (mysql-5.7.20 ndb-7.5.8)4.2.7 重新分配集群數(shù)據(jù)當(dāng)新加入數(shù)據(jù)節(jié)
48、點(diǎn)時(shí),已經(jīng)存在的數(shù)據(jù)或者索引不會(huì)被自動(dòng)分配到新的節(jié)點(diǎn)上,如下所示:ndb_mgm> ALL REPORT MEMORYNode 1: Data usage is 5%(177 32K pages of total 3200)Node 1: Index usage is 0%(108 8K pages of total 12832)Node 2: Data usage is 5%(177 32K pages of total 3200)Node 2: Index usage is 0%(108 8K pages of total 12832)Node 3: Data usage is 0%
49、(0 32K pages of total 3200)Node 3: Index usage is 0%(0 8K pages of total 12832) Node 4: Data usage is 0%(0 32K pages of total 3200)Node 4: Index usage is 0%(0 8K pages of total 12832)在SQL節(jié)點(diǎn)上執(zhí)行對(duì)所有的ndbcluster引擎的表,分發(fā)數(shù)據(jù)命令:mysql>Alter online table 表reorganize partition; 例如: mysql> alter online table 'test.t1' reorganize partition;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'online table 'test.t1' reorganize partition&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司搬遷營(yíng)銷活動(dòng)方案
- 公司線下招募活動(dòng)方案
- 公司生產(chǎn)策劃方案
- 公司聯(lián)誼文案策劃方案
- 公司服裝秀活動(dòng)方案
- 公司職員聚餐活動(dòng)方案
- 公司聯(lián)誼特色活動(dòng)方案
- 公司茶藝沙龍活動(dòng)方案
- 公司節(jié)能減耗活動(dòng)方案
- 公司植樹(shù)節(jié)新穎活動(dòng)方案
- 樹(shù)枝狀水系長(zhǎng)江亞馬孫河
- 地鐵公司運(yùn)營(yíng)培訓(xùn)課件:光纖通信基礎(chǔ)
- GB/T 40219-2021拉曼光譜儀通用規(guī)范
- 事故回溯報(bào)告模板
- GB/T 24218.6-2010紡織品非織造布試驗(yàn)方法第6部分:吸收性的測(cè)定
- GB/T 13663.3-2018給水用聚乙烯(PE)管道系統(tǒng)第3部分:管件
- GB/T 1167-1996過(guò)渡配合螺紋
- 鋼框架結(jié)構(gòu)優(yōu)秀畢業(yè)設(shè)計(jì)計(jì)算書(shū)
- 市政工程監(jiān)理規(guī)劃范本
- 2022年南京中華中等專業(yè)學(xué)校教師招聘筆試題庫(kù)及答案解析
- 2021年廣東省歷史中考試題及答案
評(píng)論
0/150
提交評(píng)論