本篇內(nèi)容主要講解“怎么構(gòu)建Mysql高可用集群系統(tǒng)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么構(gòu)建Mysql高可用集群系統(tǒng)”吧!
一、 MySQL復(fù)制的實(shí)現(xiàn)原理
MySQL支持單向、雙向復(fù)制、異步復(fù)制,復(fù)制過(guò)程中一個(gè)服務(wù)器充當(dāng)主服務(wù)器,而一個(gè)或多個(gè)其它服務(wù)器充 當(dāng)從服務(wù)器。主服務(wù)器將更新寫(xiě)入一個(gè)二進(jìn)制日志文件中,并創(chuàng)建一個(gè)索引文件以跟蹤日志循環(huán)。這些日志可以記錄發(fā)送到從服務(wù)器的更新。當(dāng)一個(gè)從服務(wù)器連接主 服務(wù)器時(shí),日志文件會(huì)通知主服務(wù)器,從服務(wù)器在日志中讀取的最后一次成功更新的位置。接著,從服務(wù)器在上次成功更新的位置處開(kāi)始進(jìn)入更新操作。更新完成后 從服務(wù)器開(kāi)始進(jìn)入等待狀態(tài),等待主服務(wù)器后續(xù)的更新。
需要注意的是:在進(jìn)行復(fù)制時(shí),所有對(duì)復(fù)制中的表的更新必須在主服務(wù)器上進(jìn)行。否則,可能發(fā)生對(duì)主服務(wù)器上的表進(jìn)行的更新與對(duì)從服務(wù)器上的表所進(jìn)行的更新之間的沖突。
單向復(fù)制有利于健壯性、速度和系統(tǒng)管理.
主服務(wù)器/從服務(wù)器設(shè)置增加了健壯性。主服務(wù)器出現(xiàn)問(wèn)題時(shí),可以切換到從服務(wù)器。
通過(guò)在主服務(wù)器和從服務(wù)器之間切分處理客戶查詢的負(fù)荷,可以得到更好的客戶響應(yīng)時(shí)間。SELECT查詢可以發(fā)送到從服務(wù)器以降低主服務(wù)器的查詢處理負(fù)荷。但修改數(shù)據(jù)的語(yǔ)句仍然應(yīng)發(fā)送到主服務(wù)器,以便主服務(wù)器和從服務(wù)器保持同步。
MySQL提供了數(shù)據(jù)庫(kù)的同步功能,這對(duì)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的冗災(zāi)、備份、恢復(fù)、負(fù)載均衡等都是有極大幫助的。
一般情況下,在Mysql復(fù)制中,主服務(wù)器也稱為master,二從服務(wù)器稱為slave,因此,想要啟用同步機(jī)制,在master上就必須啟用二進(jìn)制日 志。每個(gè)slave接受來(lái)自master上在二進(jìn)制日志中記錄的更新操作,而在slave上相當(dāng)于執(zhí)行了這個(gè)操作的一個(gè)拷貝。
二、 MySQL同步細(xì)節(jié)
MySQL同步功能由3個(gè)線程(master上1個(gè)binlog dump,slave上2個(gè),分別是Sql進(jìn)程和IO進(jìn)程)來(lái)實(shí)現(xiàn)。執(zhí)行“START SLAVE”語(yǔ)句后,slave就創(chuàng)建一個(gè)I/O線程。I/O線程連接到master上,并請(qǐng)求master發(fā)送二進(jìn)制日志中的語(yǔ)句。master創(chuàng)建一 個(gè)線程來(lái)把日志的內(nèi)容發(fā)送到slave上。
slave上的I/O線程讀取master的Binlog Dump線程發(fā)送的語(yǔ)句,并且把它們拷貝到其數(shù)據(jù)目錄下的中繼日志(relay logs)中。第三個(gè)是SQL線程,salve用它來(lái)讀取中繼日志,然后執(zhí)行它們來(lái)更新數(shù)據(jù)。
slave上使用2個(gè)線程的優(yōu)點(diǎn)是,把讀日志和執(zhí)行分開(kāi)成2個(gè)獨(dú)立的任務(wù)。執(zhí)行任務(wù)如果慢的話,讀日志任務(wù)不會(huì)跟著慢下來(lái)。例如,如果slave停止了一 段時(shí)間,那么I/O線程可以在slave啟動(dòng)后很快地從master上讀取全部日志,盡管SQL線程可能落后I/O線程好幾的小時(shí)。如果slave在 SQL線程沒(méi)全部執(zhí)行完就停止了,但I(xiàn)/O線程卻已經(jīng)把所有的更新日志都讀取并且保存在本地的中繼日志中了,因此在slave再次啟動(dòng)后就會(huì)繼續(xù)執(zhí)行它們 了。這就允許在master上清除二進(jìn)制日志,因?yàn)閟lave已經(jīng)無(wú)需去master讀取更新日志了。
本文講解的環(huán)境為:一個(gè)mysql的master主節(jié)點(diǎn)node1,三個(gè)Mysql的Slave節(jié)點(diǎn),三個(gè)Slave節(jié)點(diǎn)都從primary節(jié)點(diǎn)進(jìn)行實(shí)時(shí)的同步數(shù)據(jù),Mysql高可用集群主機(jī)信息如圖1所示:
三、在node1、slave1、slave2、slave3上安裝MYSQL
安裝MySQL有多種方法,這里僅以rpm安裝為列說(shuō)明。
[root@node1~]#yum -y install mysql-server mysql-devel mysql mysql-bench mysql-test
安裝完成后,使用如下命令啟動(dòng)mysql服務(wù):
[root@node1 ~]# /etc/init.d/mysqld start
為了保障數(shù)據(jù)安全,建議把數(shù)據(jù)放到專業(yè)的存儲(chǔ)設(shè)備或者磁盤(pán)陣列分區(qū),這里假定磁盤(pán)陣列的分區(qū)為/data目錄,接著把數(shù)據(jù)文件放到/data目錄下:
[root@node1 ~]# cp -R /var/lib/mysql /data/mysql
[root@node1 ~]# chown –R mysql:mysql /data/mysql
修改/etc/my.cnf文件,在[mysqld]組增加如下配置:
datadir = /data/mysql
最后,重啟MySQL服務(wù)即可。
四、在Mysql主節(jié)點(diǎn)node1上編輯配置文件my.cnf
編輯主服務(wù)器的配置文件/etc/my.cnf,在[mysqld]中添加如下內(nèi)容即可:
server-id = 1 #服務(wù)器ID。服務(wù)器之間不能有重復(fù)ID,一般master是1
log-bin=mysql-bin #打開(kāi)mysql的binlog功能,后面的名字可以自己指定,如果不改名字的話,默認(rèn)是以主機(jī)名字命名
binlog-do-db=ixdba #ixdba是需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
binlog-ignore-db=mysql #不需要備份的數(shù)據(jù)庫(kù)名稱,如果需要忽略備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可。
五、在master節(jié)點(diǎn)node1上建立復(fù)制用戶
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'repl_password';
這里一定將repl_user用戶設(shè)置為遠(yuǎn)程任意節(jié)點(diǎn)可以登錄。
六、備份Master數(shù)據(jù)
備份Master上的數(shù)據(jù),首先執(zhí)行如下SQL語(yǔ)句:
mysql>FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)
不要退出這個(gè)終端,否則這個(gè)鎖就失效了;在不退出終端的情況,再開(kāi)一個(gè)終端直接打包壓縮數(shù)據(jù)文件或使用mysqldump工具來(lái)導(dǎo)出數(shù)據(jù)。
[root@node1 ~]# cd /var/lib/ #進(jìn)入mysql的數(shù)據(jù)目錄,根據(jù)自己情況而定。
[root@node1 lib]# tar zcvf mysql.tar.gz mysql
[root@node1 lib]# scp mysql.tar.gz 192.168.12.231/232/233:/var/lib/
用scp命令把打包的數(shù)據(jù)傳到其他幾臺(tái)Slave機(jī)器上。
數(shù)據(jù)傳輸完成之后,在上面的命令終端上執(zhí)行:
mysql>UNLOCK TABLES;
七、設(shè)置Slave主機(jī)
編輯/etc/my.cnf文件,在[mysqld]中添加如下內(nèi)容即可:
server-id = 2
log-bin=mysql-bin
binlog-do-db=ixdba
binlog-ignore-db=mysql
其他的Slave以此類推,保證server-id全局即可。
八、 在slave上執(zhí)行如下命令
mysql> CHANGE MASTER TO MASTER_HOST='192.168.12.135',
-> MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=98;
執(zhí)行完之后執(zhí)行:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
從輸出可以看到:Slave_IO_Running和Slave_SQL_Running如果都為Yes時(shí),表示配置成功。
九、需要注意的幾個(gè)問(wèn)題
(1)如果在my.cnf里面定義了log-bin、relay-log參數(shù),那么要保證定義與hostname無(wú)關(guān),因?yàn)槿绻@兩類log的文件名與主機(jī)名有關(guān),切換過(guò)程會(huì)導(dǎo)致slave主機(jī)不能繼續(xù)同步的問(wèn)題。例如可以做下設(shè)置:
log-bin = mysql-bin
relay-log = mysql-relay-bin
保證在兩臺(tái)主機(jī)上兩種文件的名字一樣。
(2)好把my.cnf文件也放入磁盤(pán)陣列所在分區(qū)的數(shù)據(jù)目錄。
到此,相信大家對(duì)“怎么構(gòu)建Mysql高可用集群系統(tǒng)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
名稱欄目:怎么構(gòu)建Mysql高可用集群系統(tǒng)-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://aaarwkj.com/article42/dohphc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、靜態(tài)網(wǎng)站、App設(shè)計(jì)、網(wǎng)站制作、云服務(wù)器、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容