MySQL高可用實(shí)踐
本文為您說(shuō)明如何基于阿里云數(shù)據(jù)庫(kù)存儲(chǔ)服務(wù)DBFS來(lái)實(shí)現(xiàn)MySQL的高可用構(gòu)建。
優(yōu)勢(shì)說(shuō)明
如何保證數(shù)據(jù)庫(kù)服務(wù)的高可用性,一直是業(yè)界討論的重要課題之一。下面就主要的兩種解決方案進(jìn)行對(duì)比說(shuō)明:
對(duì)比項(xiàng) | 基于DBFS共享存儲(chǔ)構(gòu)建 | 基于主備同步方式構(gòu)建 |
性能 | 高。主備共享一份數(shù)據(jù),不需要同步,可關(guān)閉binary log。 | 弱。開(kāi)啟MySQL binary log后,性能下降。強(qiáng)同步模式下,性能下降明顯。 |
成本 | 低。主備共享一份數(shù)據(jù)。 | 高。主備庫(kù)兩份數(shù)據(jù)存儲(chǔ)。 |
一致性 | 強(qiáng)一致。 | 弱一致。一般采用異步模式復(fù)制。半同步復(fù)制模式下,仍然存在主備庫(kù)數(shù)據(jù)狀態(tài)不一致問(wèn)題。 |
易用性 | 部署與切換簡(jiǎn)單 | 部署與切換邏輯復(fù)雜,另需保證第三方切換工具的自身高可用性。 |
環(huán)境準(zhǔn)備
從以上比較可知,基于DBFS共享存儲(chǔ)構(gòu)建MySQL高可用的方案,在性能、成本、數(shù)據(jù)一致性、易用性等方面上都有非常好的收益。
在展開(kāi)構(gòu)建步驟陳述之前,先做前置條件說(shuō)明:
可用區(qū):構(gòu)建雙機(jī)的ECS以及DBFS需要在同一個(gè)可用區(qū)。
專有網(wǎng)絡(luò)VPC:在阿里云 “控制臺(tái)” -》“專有網(wǎng)絡(luò)VPC” 中創(chuàng)建VPC。
傳統(tǒng)型負(fù)載均衡 CLB(原SLB):在阿里云 “控制臺(tái)” -》“傳統(tǒng)型負(fù)載均衡 CLB(原SLB)” 中創(chuàng)建”主備服務(wù)器組“類型的CLB,需與ECS在同一個(gè)VPC網(wǎng)絡(luò)中。
環(huán)境部署清單如下:
資源 | IP/掛載點(diǎn) | 端口 | 系統(tǒng) | 角色 |
dbfs1-node1 | 172.16.198.79 | 3306 | Alibaba Cloud Linux 2.1903 64位 | MASTER |
dbfs1-node2 | 172.16.198.80 | 3306 | Alibaba Cloud Linux 2.1903 64位 | SLAVE |
SLB VIP | 172.16.198.99 | 3306 | N/A | 負(fù)載均衡 |
應(yīng)用機(jī)器 | 172.16.198.157 | 3306 | N/A | MySQL客戶端 |
共享存儲(chǔ) | /mnt/dbfs/hgsrb6i8ebd4/dbfs-ytr9rtr9tgvwyrv******* | N/A | N/A | DBFS掛載點(diǎn) |
服務(wù)高可用構(gòu)建
以下為基于DBFS共享存儲(chǔ)的MySQL雙機(jī)高可用部署步驟:
掛載DBFS到兩個(gè)ECS節(jié)點(diǎn)
參考“掛載與卸載”,將DBFS掛載到之前申請(qǐng)的兩臺(tái)ECS上。
部署MySQL服務(wù)守護(hù)服務(wù)
基于DBFS的分布式flock功能,部署將更加簡(jiǎn)單。腳本內(nèi)容如下:
#!/bin/bash #MySQL服務(wù)守護(hù)腳本,基于DBFS的flock實(shí)現(xiàn)。腳本需要用戶自己安排定期執(zhí)行。 #成功拿到flock的節(jié)點(diǎn)可拉起mysql服務(wù)。“start_mysql.sh”由用戶根據(jù)自己情況來(lái)編寫。 flock -xn /mnt/dbfs/hgsrb6i8****/dbfs-ytr9rtr9tgvwyrv*******/lock/dbfs_mysql_ha.lock -c "/home/mysql/start_mysql.sh"
安裝MySQL
請(qǐng)參考“MySQL存儲(chǔ)計(jì)算分離實(shí)踐”文章。
測(cè)試高可用
場(chǎng)景一:停掉Master上的MySQL數(shù)據(jù)庫(kù)
#殺掉Master上的MySQL進(jìn)程,在客戶端機(jī)器上連接MySQL。 #如果連接成功說(shuō)明VIP已經(jīng)連到slave上。 [mysql@iZbp156ycm6s06x******** ~]# mysql -usbtest -h 172.16.198.99 -P 3306 -p MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sbtest | | sys | +--------------------+ 5 rows in set (0.02 sec)
場(chǎng)景二:停掉Master ECS
#停掉Master ECS,在客戶端機(jī)器上連接MySQL。 #如果連接成功說(shuō)明VIP已經(jīng)連到slave上。 [mysql@iZbp156ycm6s06x******** ~]# mysql -usbtest -h 172.16.198.99 -P 3306 -p MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sbtest | | sys | +--------------------+ 5 rows in set (0.02 sec)