摘 要 本文介紹了MySQL NDB Cluster數(shù)據(jù)庫集群利用滾動重啟進(jìn)行在線版本升級的方案,并進(jìn)一步給出了在線升級的詳細(xì)實施步驟。實踐證明利用該升級方案可以在不中斷數(shù)據(jù)庫服務(wù)的情況下實現(xiàn)數(shù)據(jù)庫版本升級,MySQL NDB Cluster數(shù)據(jù)庫具備了卓越的高可用性。
關(guān)鍵詞 MySQL;NDB Cluster;在線升級;高可用
概述
MySQL NDB Cluster數(shù)據(jù)庫集群采用無共享方案,將數(shù)據(jù)存放在內(nèi)存中,具備高性能、高可用、無單點故障、可寫擴展等優(yōu)點[1]。它能達(dá)到99.999%的高可用性,即使其他數(shù)據(jù)庫系統(tǒng)中令人頭疼的版本升級,它也提供了在線升級方法,在不需要關(guān)閉數(shù)據(jù)庫、不需要中斷服務(wù)的情況下就能輕松完成[2]。本文將具體介紹NDB Cluster數(shù)據(jù)庫集群的在線升級方案和實施步驟。
1 MySQL NDB Cluster版本在線升級方案
MySQL NDB Cluster集群通常由至少兩個管理節(jié)點、多個數(shù)據(jù)節(jié)點和多個SQL節(jié)點組成,這樣任何一個節(jié)點出現(xiàn)故障,其他節(jié)點可以接手故障節(jié)點的任務(wù),從而實現(xiàn)了整個集群的無單點故障。利用該特性可以實現(xiàn)NDB Cluster版本的在線升級,其方案是依次停掉集群中的一個節(jié)點,對該節(jié)點上的數(shù)據(jù)庫軟件進(jìn)行版本升級,然后啟動該節(jié)點加入集群,待到所有節(jié)點均升級完畢,整個NDB Cluster集群便完成了版本升級過程,整個過程中數(shù)據(jù)庫均是可用的,沒有中斷服務(wù)。
完整的在線升級和滾動重啟方案如圖1所示:
2 升級實施步驟
本節(jié)以典型的MySQL NDB Cluster 7.5集群為例介紹其具體的版本升級步驟。假設(shè)集群有兩個管理節(jié)點,節(jié)點id為49、50,2個數(shù)據(jù)節(jié)點組共4個數(shù)據(jù)節(jié)點,節(jié)點id為1、2、3、4,3個SQL節(jié)點,服務(wù)器均為Linux操作系統(tǒng),數(shù)據(jù)庫安裝目錄為/usr/local/mysql,則版本在線升級的實施步驟如下:
(1)在管理節(jié)點50的ndb_mgm中執(zhí)行以下命令停止管理節(jié)點49:
49 stop
(2)將管理節(jié)點49上所有的ndb_mgmd和ndb_mgm均替換為升級版本的文件。
(3)在管理節(jié)點49上執(zhí)行以下命令重新啟動管理節(jié)點:
ndb_mgmd
(4)重復(fù)步驟1-3升級管理節(jié)點50。
(5)在管理節(jié)點的ndb_mgm執(zhí)行以下命令停止數(shù)據(jù)節(jié)點1:
1 stop
(6)將數(shù)據(jù)節(jié)點1上的ndbd、ndbmtd、ndb_restore替換為升級版本的文件。
(7)在數(shù)據(jù)節(jié)點1上執(zhí)行以下命令重新啟動該數(shù)據(jù)節(jié)點:
ndbmtd
(8)重復(fù)步驟5-7依次升級數(shù)據(jù)節(jié)點2、3、4。
(9)在SQL節(jié)點1的mysql中執(zhí)行以下命令:
set global innodb_fast_shutdown = 0
(10)在SQL節(jié)點1上執(zhí)行以下命令停止SQL節(jié)點1:
service mysql.server stop
(11)將SQL節(jié)點1上的除data目錄外的全部SQL節(jié)點命令文件替換為升級版本的文件。
(12)執(zhí)行以下命令給新文件賦權(quán)限并替換系統(tǒng)文件:
cd /usr/local/mysql
cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --override mysql.server
chgrp -R mysql .
chown -R root .
chown -R mysql data
(13)在SQL節(jié)點1上執(zhí)行以下命令啟動SQL節(jié)點1:
service mysql.server start
(14)重復(fù)步驟9-13升級SQL節(jié)點2和SQL節(jié)點3。
至此,在線升級完成。
3 結(jié)束語
作者多次采用本文所述方案對電信級生產(chǎn)系統(tǒng)中的MySQL NDB Cluster數(shù)據(jù)庫系統(tǒng)進(jìn)行在線版本升級,均順利成功,服務(wù)未受影響。而業(yè)界常用的Oracle RAC數(shù)據(jù)庫集群,其版本升級一般均須停庫實施。實踐表明NDB Cluster數(shù)據(jù)庫系統(tǒng)日趨成熟穩(wěn)定,在絕大多數(shù)場景下可以作為傳統(tǒng)商業(yè)數(shù)據(jù)庫系統(tǒng)的替代方案。
參考文獻(xiàn)
[1] 袁曉東.MySQL Cluster集群數(shù)據(jù)庫誤操作恢復(fù)方法研究[J].信息技術(shù)與信息化,2019,(12):212-215.
[2] Oracle Corporation. 21.5.5 Performing a Rolling Restart of an NDB Cluster [EB/OL]. https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-rolling-restart.html,2020.
作者簡介
袁曉東(1973-),男,江蘇阜寧人;畢業(yè)院校:南京大學(xué),專業(yè):計算機軟件,學(xué)歷:博士,現(xiàn)就職單位:南京云白信息科技有限公司,研究方向:數(shù)據(jù)庫、大數(shù)據(jù)、機器學(xué)習(xí)、信息安全、軟件工程、形式化方法等。