當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]作者:攜程技術(shù)團(tuán)隊(duì),來(lái)自:DataFunTalk 導(dǎo)讀: 我們推薦使用數(shù)據(jù)庫(kù)三副本,一主一從一異地容災(zāi)。如果想要節(jié)省成本,也可以只保留兩副本,但是一旦其中一臺(tái)服務(wù)器發(fā)生故障,服務(wù)器維修時(shí)間會(huì)比較長(zhǎng),那么在維修期間,數(shù)據(jù)庫(kù)服務(wù)會(huì)處于單點(diǎn)狀態(tài),使得風(fēng)險(xiǎn)急劇

攜程數(shù)據(jù)庫(kù)高可用架構(gòu)實(shí)踐

作者:攜程技術(shù)團(tuán)隊(duì),來(lái)自:DataFunTalk


導(dǎo)讀:

我們推薦使用數(shù)據(jù)庫(kù)三副本,一主一從一異地容災(zāi)。如果想要節(jié)省成本,也可以只保留兩副本,但是一旦其中一臺(tái)服務(wù)器發(fā)生故障,服務(wù)器維修時(shí)間會(huì)比較長(zhǎng),那么在維修期間,數(shù)據(jù)庫(kù)服務(wù)會(huì)處于單點(diǎn)狀態(tài),使得風(fēng)險(xiǎn)急劇上升。

本文主要介紹以下內(nèi)容:

  • SQL Server 高可用

  • MySQL 高可用

  • Redis 高可用

01
SQL Server 高可用

攜程的 SQL Server 高可用架構(gòu)經(jīng)過(guò)了多次演進(jìn)。最初使用的是鏡像技術(shù),如果服務(wù)器出現(xiàn)故障,在切換時(shí),需要人工進(jìn)行干預(yù)以切換到鏡像節(jié)點(diǎn)。同時(shí)鏡像節(jié)點(diǎn)不提供讀服務(wù),可擴(kuò)展性比較差。后來(lái)引入了 SAN 存儲(chǔ),將計(jì)算和存儲(chǔ)進(jìn)行分離,可以實(shí)現(xiàn)自動(dòng)切換,但 SAN 存儲(chǔ)技術(shù)過(guò)于復(fù)雜,并且價(jià)格昂貴。2013年,我們開始將其逐步改造為 AlwaysOn 架構(gòu),這是 SQL Server 2012 以后的版本所具有的功能。

三副本的 SQL Server 數(shù)據(jù)庫(kù)服務(wù)架構(gòu)。主副本提供讀寫訪問(wèn);一個(gè)輔助副本是同步模式,即和主副本數(shù)據(jù)保持一致;另一個(gè)輔助副本是異步模式,存放在異地機(jī)房。同步模式可以保證主從數(shù)據(jù)一致,在切換時(shí)不會(huì)丟失數(shù)據(jù)。但同步節(jié)點(diǎn)的性能可能會(huì)對(duì)主副本造成影響,每一個(gè)事務(wù)都需要在同步節(jié)點(diǎn)確認(rèn)后,才算完成。所以,將同步節(jié)點(diǎn)和主節(jié)點(diǎn)放在同一網(wǎng)段內(nèi),可以減少網(wǎng)絡(luò)開銷,提升整體的響應(yīng)速度。

SQL Server 可以在主副本服務(wù)器發(fā)生故障時(shí),自動(dòng)切換到同步節(jié)點(diǎn)。在切換期間,數(shù)據(jù)庫(kù)不可用,所以通常在1分鐘之內(nèi)完成。而切換到異步節(jié)點(diǎn)是手動(dòng)觸發(fā)的,因?yàn)槭钱惒侥J?,可能?huì)丟失數(shù)據(jù),所以盡量不切換到異步節(jié)點(diǎn)。

SQL Server 高可用在很大程度上依賴于底層操作系統(tǒng)。因?yàn)?AlwaysOn 架構(gòu)依賴底層的 Windows 群集服務(wù)。一個(gè) Windows 群集可以有多套 AlwaysOn 組。Windows 群集服務(wù)可以這樣設(shè)計(jì):

  • 盡量增加群集節(jié)點(diǎn)數(shù)量,一般保持在9個(gè)以上的奇數(shù)節(jié)點(diǎn),避免一臺(tái)或兩臺(tái)服務(wù)器故障導(dǎo)致整個(gè)群集不可用;

  • 因?yàn)槿杭?jié)點(diǎn)多,所以增加 regroup 的超時(shí)時(shí)間,避免重組超時(shí)導(dǎo)致整個(gè)群集異常;

  • 增加文件共享仲裁,文件共享可以存放在第三機(jī)房,避免機(jī)房故障導(dǎo)致群集失去多數(shù)仲裁,同時(shí)在失去多數(shù)仲裁時(shí),可以使用 ForceQuorum 模式強(qiáng)制啟動(dòng) Windows 群集服務(wù),盡快恢復(fù)業(yè)務(wù)。

使用 AlwaysOn 架構(gòu)可以極大減輕主節(jié)點(diǎn)的負(fù)載。數(shù)據(jù)庫(kù)的全量備份或日志備份可以調(diào)整到異步節(jié)點(diǎn)上進(jìn)行,無(wú)須擔(dān)心數(shù)據(jù)庫(kù)備份會(huì)對(duì)業(yè)務(wù)造成性能影響。我們會(huì)比較關(guān)注 AlwaysOn 的主從延遲,并采用插值法進(jìn)行監(jiān)控,對(duì)每一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)設(shè)計(jì)了一張監(jiān)控表,定期插入時(shí)間戳。在經(jīng)過(guò) AlwaysOn 傳遞到輔助副本后,我們把時(shí)間戳取出來(lái),和當(dāng)前時(shí)間進(jìn)行比較,就能精確地獲得延遲時(shí)間。延遲通常是只讀副本上的查詢語(yǔ)句 IO 開銷大導(dǎo)致的。根據(jù)延遲時(shí)間,以及前文提到的全量語(yǔ)句性能數(shù)據(jù)采集,我們可以定位導(dǎo)致延遲的異常語(yǔ)句。

02
MySQL 高可用

相對(duì)于成熟的商業(yè)數(shù)據(jù)庫(kù)軟件,開源版本的 MySQL 高可用方案更多地需要使用者自己進(jìn)行設(shè)計(jì)和研發(fā),好在 MySQL 本身已經(jīng)為我們提供了一些必要的功能:MySQL 復(fù)制技術(shù)。MySQL 復(fù)制技術(shù)包含傳統(tǒng)的基于日志傳輸?shù)膹?fù)制技術(shù),以及在 MySQL 5.7 之后的版本引入的組復(fù)制技術(shù)。在攜程,大部分 MySQL 集群采用傳統(tǒng)的基于日志傳輸?shù)膹?fù)制技術(shù)。攜程的 MySQL 高可用架構(gòu)經(jīng)歷了3個(gè)階段的演進(jìn)。

第一階段:采用傳統(tǒng)的 MHA 管理方式。

從本質(zhì)上來(lái)說(shuō),MHA 是一個(gè)管理 MySQL 主從復(fù)制架構(gòu)的工具集。我們可以通過(guò)其官方網(wǎng)站下載最新的版本。應(yīng)用可以通過(guò)虛擬 IP 地址10.10.10.59進(jìn)行訪問(wèn),虛擬 IP 地址掛載在主節(jié)點(diǎn)上。MHA 管理節(jié)點(diǎn)會(huì)每隔10秒探測(cè)并連接主機(jī),如果連續(xù)3次連接不上,則判定主機(jī)故障,觸發(fā)切換。在發(fā)生切換時(shí),MHA 會(huì)結(jié)合半同步復(fù)制,補(bǔ)全未同步的日志,這種切換可以保證數(shù)據(jù)完整。另外,切換會(huì)嘗試連接舊主機(jī),把掛載在主節(jié)點(diǎn)上的虛擬 IP 地址刪除,然后在 Slave 節(jié)點(diǎn)重新掛載虛擬 IP 地址,完成切換。

傳統(tǒng)的 MHA 架構(gòu)比較成熟,使用廣泛,但存在風(fēng)險(xiǎn)。如果由于交換機(jī)故障,MHA 管理節(jié)點(diǎn)連接不上主機(jī),但主機(jī)本身運(yùn)行正常,MHA 管理工具無(wú)法判斷是網(wǎng)絡(luò)故障還是服務(wù)器故障,就會(huì)進(jìn)行切換,并且把虛擬 IP 地址掛載到 Slave 節(jié)點(diǎn),但 MHA 管理節(jié)點(diǎn)連接不上舊主機(jī),無(wú)法刪除虛擬 IP 地址。此時(shí)兩個(gè)節(jié)點(diǎn)都有虛擬 IP 地址存在,數(shù)據(jù)會(huì)發(fā)生"雙寫",也就是發(fā)生"腦裂"。這種情況很少發(fā)生,但一旦發(fā)生,就難以處理,起因就在于虛擬 IP 地址。解決的方法是把虛擬 IP 地址刪除,使用物理 IP 地址進(jìn)行直連。這就需要使用數(shù)據(jù)庫(kù)訪問(wèn) DAL 模塊和統(tǒng)一配置中心。在切換時(shí),需要通知應(yīng)用程序 IP 地址發(fā)生變化,并對(duì)所有的連接進(jìn)行重置。

第二階段:使用 IP 直連。

初始的時(shí)候,應(yīng)用程序使用物理 IP 地址10.10.10.141訪問(wèn)數(shù)據(jù)庫(kù)。MHA 管理節(jié)點(diǎn)探測(cè)到主節(jié)點(diǎn)發(fā)生了故障,預(yù)備切換到10.10.10.142,并將 IP 地址變化通知統(tǒng)一配置中心 QConfig。統(tǒng)一配置中心在收到這個(gè)變化后,會(huì)把這個(gè)變化推送到應(yīng)用服務(wù)器的數(shù)據(jù)庫(kù)訪問(wèn)中間件 DAL。DAL 會(huì)重置對(duì)數(shù)據(jù)庫(kù)的連接,使用新的 IP 地址10.10.10.142。此處的統(tǒng)一配置中心要確保高可用,即使機(jī)房發(fā)生故障,也不能影響統(tǒng)一配置中心的正常運(yùn)轉(zhuǎn)。

經(jīng)過(guò)改造,我們?nèi)コ藬?shù)據(jù)"雙寫"的隱患。但在極端場(chǎng)景下,還是會(huì)存在風(fēng)險(xiǎn)。如果機(jī)房整體發(fā)生故障,MHA 管理節(jié)點(diǎn)和主機(jī)/從機(jī)同時(shí)無(wú)法運(yùn)行了,MHA 就無(wú)法自動(dòng)切換到 DR 節(jié)點(diǎn)。這是由于 MHA 單管理節(jié)點(diǎn)本身成了系統(tǒng)瓶頸,解決的方法是引入多 MHA 管理節(jié)點(diǎn)進(jìn)行協(xié)同管理。

第三階段:引入多 MHA 管理節(jié)點(diǎn)。

應(yīng)用使用物理 IP 地址10.10.10.141訪問(wèn)數(shù)據(jù)庫(kù)。每一個(gè)數(shù)據(jù)庫(kù)實(shí)例都由5個(gè) MHA 管理節(jié)點(diǎn)進(jìn)行同時(shí)監(jiān)聽。這5個(gè) MHA 管理節(jié)點(diǎn)分布在3個(gè)機(jī)房。一旦某個(gè) MHA 管理節(jié)點(diǎn)探測(cè)到主機(jī)發(fā)生了異常,則標(biāo)記為 SDOWN。但一個(gè) MHA 管理節(jié)點(diǎn)無(wú)法決定主機(jī)是否真的發(fā)生了故障,該 MHA 管理節(jié)點(diǎn)需要發(fā)起協(xié)商流程,和其他4個(gè) MHA 管理節(jié)點(diǎn)一同判斷,如果多數(shù) MHA 管理節(jié)點(diǎn)認(rèn)為發(fā)生了故障,則標(biāo)記為 ODOWN,也就是確定主機(jī)真的發(fā)生了故障。MHA 會(huì)檢測(cè)并決定可以成為備選主節(jié)點(diǎn)的節(jié)點(diǎn),并由5個(gè) MHA 管理節(jié)點(diǎn)再次協(xié)商,推選一個(gè)管理節(jié)點(diǎn),用來(lái)向統(tǒng)一配置中心 QConfig 匯報(bào) IP 地址變化。如果機(jī)房發(fā)生故障,并且另一個(gè)節(jié)點(diǎn)10.10.10.142不可用,則可選擇主節(jié)點(diǎn)為20.20.20.161。統(tǒng)一配置中心會(huì)把這個(gè)變化推送到 DAL 組件,并重置連接,使用新的 IP 地址。

五節(jié)點(diǎn)模式的 MHA 管理是穩(wěn)定的。其中一個(gè)管理節(jié)點(diǎn)處于第三機(jī)房,能抵御單機(jī)房故障。MHA 管理節(jié)點(diǎn)之間的協(xié)商比較復(fù)雜,我們可以借助成熟的 Redis 哨兵管理機(jī)制,在 Redis 哨兵管理機(jī)制上進(jìn)行改造,適配對(duì) MySQL 的監(jiān)控。

03
Redis 高可用架構(gòu)

Redis 的高可用架構(gòu)有兩種通用的做法:一種是基于復(fù)制的主從模型,另一種是群集模型。攜程使用的是第一種模型,即主從復(fù)制。

Redis 的元數(shù)據(jù)被存放在 ConfigDB 中。元數(shù)據(jù)包括 Redis 實(shí)例的狀態(tài)信息,以及對(duì)應(yīng)的 IP 地址和端口信息等。前端可以通過(guò)頁(yè)面對(duì)元數(shù)據(jù)進(jìn)行調(diào)整,如設(shè)置某個(gè)實(shí)例不可用或不可讀等。服務(wù)是通過(guò) Config Service 實(shí)現(xiàn)的。服務(wù)會(huì)從 ConfigDB 中拉取配置,應(yīng)用會(huì)定期調(diào)用 Config Service 服務(wù),獲得實(shí)例元數(shù)據(jù)信息,實(shí)現(xiàn)對(duì) Redis 群集的實(shí)際訪問(wèn)。

我們通過(guò)一致性哈希算法對(duì) Redis 進(jìn)行分片。每一個(gè)分片都被稱為組。在每一個(gè)組中,有讀寫實(shí)例和只讀實(shí)例,它們會(huì)通過(guò)復(fù)制關(guān)系來(lái)傳遞數(shù)據(jù)。在部署時(shí),我們盡量把實(shí)例分散到不同的服務(wù)器上。一旦服務(wù)器發(fā)生故障,則只會(huì)影響部分分片,不會(huì)嚴(yán)重影響后端數(shù)據(jù)庫(kù)。我們應(yīng)當(dāng)盡量控制 Redis 緩存的每一個(gè)實(shí)例為 10GB 左右。如果超過(guò) 10GB,則可能需要確定是否可以進(jìn)行拆分。若需要重新進(jìn)行分組,則多拆分出幾個(gè)組。

Redis 由哨兵來(lái)監(jiān)控 Redis 實(shí)例的運(yùn)行狀態(tài)。我們啟用了5個(gè)哨兵來(lái)同時(shí)監(jiān)聽。哨兵的主要功能為:

  • 監(jiān)控所有實(shí)例是否在正常運(yùn)行;

  • 當(dāng) Slave 出現(xiàn)故障時(shí),通過(guò)消息通知機(jī)制把該 Slave 拉出,并將其設(shè)置為不可用,同時(shí)把 Master 設(shè)置為可讀、可寫;

  • 當(dāng) Master 出現(xiàn)故障時(shí),通過(guò)自動(dòng)投票機(jī)制從 Slave 節(jié)點(diǎn)中選舉新的 Master,實(shí)現(xiàn) Redis 的自動(dòng)切換。

哨兵實(shí)際上是一個(gè)運(yùn)行在特殊模式下的 Redis 服務(wù),我們可以通過(guò)在啟動(dòng)命令參數(shù)中指定 sentinel 選項(xiàng),來(lái)標(biāo)識(shí)該 Redis 服務(wù)是哨兵。每一個(gè)哨兵會(huì)向其他哨兵,即 Master 和 Slave 定時(shí)發(fā)送消息,以確認(rèn)對(duì)方是否正常運(yùn)行,如果發(fā)現(xiàn)對(duì)方在指定時(shí)間內(nèi)未回應(yīng),則暫時(shí)認(rèn)為對(duì)方主觀掛機(jī) ( Subjective Down,簡(jiǎn)稱 SDOWN )。如果哨兵群中的多數(shù)哨兵都報(bào)告某個(gè) Master 沒(méi)響應(yīng),系統(tǒng)就會(huì)認(rèn)為該 Master 客觀掛機(jī) ( Objective Down,簡(jiǎn)稱 ODOWN )。

通過(guò) Redis 的運(yùn)行機(jī)制可以看出,Config Service 的狀態(tài)信息需要和 Redis 實(shí)例的實(shí)際狀態(tài)信息保持一致,否則在訪問(wèn)應(yīng)用時(shí)會(huì)發(fā)生異常,比如,當(dāng)只讀實(shí)例發(fā)生故障,在重新向 Master 節(jié)點(diǎn)全量同步數(shù)據(jù)期間,如果該實(shí)例還是配置可讀,在訪問(wèn)應(yīng)用時(shí)就會(huì)報(bào)錯(cuò)。當(dāng)有故障發(fā)生時(shí),Redis 需要具備快速自動(dòng)恢復(fù)的能力,減少人工干預(yù)。我們應(yīng)當(dāng)盡量從哨兵處獲得信息,如果超過(guò)半數(shù)的哨兵發(fā)生故障,則直連 Redis 實(shí)例來(lái)獲得物理狀態(tài)。

對(duì)于 Redis 異地機(jī)房容災(zāi)而言,我們需要考慮跨機(jī)房全量同步為網(wǎng)絡(luò)帶來(lái)的開銷,以及可能存在的網(wǎng)絡(luò)不穩(wěn)定因素。因此,我們采用了一個(gè)中間層,即 Keeper 來(lái)對(duì)數(shù)據(jù)進(jìn)行緩沖。在本質(zhì)上,Keeper 是偽 Slave,即實(shí)現(xiàn) Redis 協(xié)議,偽裝成 Slave,讓 Master 推送數(shù)據(jù)到 Keeper 中。受限于篇幅,對(duì)于 Redis 異地機(jī)房容災(zāi)及切換,這里就不介紹了,謝謝大家。

以上內(nèi)容選自攜程技術(shù)團(tuán)隊(duì)新作《攜程架構(gòu)實(shí)踐》

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

攜程數(shù)據(jù)庫(kù)高可用架構(gòu)實(shí)踐

長(zhǎng)按訂閱更多精彩▼

攜程數(shù)據(jù)庫(kù)高可用架構(gòu)實(shí)踐

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉