日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

美团点评基于MGR的CMDB高可用架构搭建之路【转】

發(fā)布時(shí)間:2025/3/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 美团点评基于MGR的CMDB高可用架构搭建之路【转】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

王志朋

美團(tuán)點(diǎn)評(píng)DBA

曾在京東金融擔(dān)任DBA,目前就職于美團(tuán)點(diǎn)評(píng),主要負(fù)責(zé)金融業(yè)務(wù)線(xiàn)數(shù)據(jù)庫(kù)及基礎(chǔ)組件數(shù)據(jù)庫(kù)的運(yùn)維。

MySQL Group Replication(以下簡(jiǎn)稱(chēng)MGR),于5.7.17版本正式GA,由Oracle官方出品,為MySQL的高可用方案注入了新血液。其一致性,以及不依賴(lài)外部組件實(shí)現(xiàn)的自動(dòng)切換、多點(diǎn)寫(xiě)入,給DBA帶來(lái)了不少期待。

一、背景

以MHA作為切換工具,CMDB管理元數(shù)據(jù),結(jié)合中間件的高可用方案在MySQL生態(tài)中是比較常見(jiàn)的架構(gòu)。在這個(gè)體系中,CMDB作為基礎(chǔ)組件之一,不能再依賴(lài)這個(gè)架構(gòu)實(shí)現(xiàn)自身的高可用,而需要一套自成體系的高可用架構(gòu)保障。

2017年下半年開(kāi)始,美團(tuán)點(diǎn)評(píng)數(shù)據(jù)庫(kù)計(jì)劃全面升級(jí)上線(xiàn)5.7版本,也正是這個(gè)契機(jī),基于MGR的CMDB高可用想法應(yīng)運(yùn)而生。

二、關(guān)于MGR

MGR是以Plugin的形式嵌入在MySQL實(shí)例中,插件內(nèi)部實(shí)現(xiàn)了沖突檢測(cè)、Paxos協(xié)議通信等。

可能有同學(xué)了解它與PXC很像,社區(qū)中關(guān)于二者的口水戰(zhàn)也非常的熱鬧,具體二者的優(yōu)劣與爭(zhēng)端此處不表,但有一點(diǎn)值得說(shuō)明,MGR集群當(dāng)中,仍然是通過(guò)binlog實(shí)現(xiàn)節(jié)點(diǎn)同步的。這一點(diǎn)對(duì)DBA很友好,意味著我們可以很輕易的找回熟悉的主從的感覺(jué)(Still A MySQL)。

三、解決方案

MGR包括多主與單主兩個(gè)模式,出于多主模式的一些已知問(wèn)題以及實(shí)際業(yè)務(wù)場(chǎng)景的考慮,我們決定選擇單主模式作為主要方案,即當(dāng)主節(jié)點(diǎn)故障后,集群自動(dòng)選舉新的主節(jié)點(diǎn),應(yīng)用將寫(xiě)訪(fǎng)問(wèn)指向新的主節(jié)點(diǎn)。

那么具體的解決方案還有哪些需要考慮呢?

  • MGR的限制;

  • 相關(guān)測(cè)試;

  • 合理的參數(shù)。

1.MGR的限制

  • 只支持InnoDB存儲(chǔ)引擎;

  • 必須有主鍵;

  • binlog_format只支持ROW格式;

  • 不支持save point(后修復(fù));

  • ……

官方給出了一些明確的要求及限制。針對(duì)這些限制我們要對(duì)線(xiàn)上要接入的數(shù)據(jù)庫(kù)進(jìn)行排查,調(diào)研可行性,規(guī)范其滿(mǎn)足MGR的要求。包括收斂MyISAM存儲(chǔ)引擎的表、無(wú)主鍵的表,應(yīng)用邏輯中去除save point(新版本去掉此限制)等。

此外我們生產(chǎn)關(guān)心的問(wèn)題,如網(wǎng)絡(luò)抖動(dòng)對(duì)MGR的影響、備份恢復(fù)工具可用性、Online-DDL可用性等,同樣需要考慮在內(nèi)。對(duì)此我們做了系統(tǒng)性的功能測(cè)試:

同時(shí)在測(cè)試中也對(duì)MGR的行為有了一些新的認(rèn)識(shí),比如MyISAM引擎、無(wú)主鍵的表等MGR明確不支持的場(chǎng)景,都是以一種“樂(lè)觀”的方式處理,即允許你創(chuàng)建、Alter,但不允許寫(xiě)入數(shù)據(jù)。

2.MGR的參數(shù)

同時(shí)在上面提到的測(cè)試中,我們也遇到了幾個(gè)重要參數(shù)不同值的不同行為。比如group_replication_unreachable_majority_timeout這個(gè)參數(shù),它真正的含義是MGR節(jié)點(diǎn)由ONLINE狀態(tài)進(jìn)入U(xiǎn)NREACHABLE狀態(tài)后(一般是由于網(wǎng)絡(luò)抖動(dòng)、節(jié)點(diǎn)異常等引起),等待相應(yīng)的時(shí)間,如果仍保持UNREACHABLE,則將節(jié)點(diǎn)置為ERROR狀態(tài),即這個(gè)參數(shù)是UNREACHABLE狀態(tài)的一個(gè)timeout,單位秒。

(MGR節(jié)點(diǎn)的幾個(gè)狀態(tài))

該參數(shù)默認(rèn)值為0,含義是無(wú)timeout,即無(wú)限等待,這在實(shí)際的生產(chǎn)環(huán)境中,如發(fā)生網(wǎng)絡(luò)的異常,是個(gè)不可接受結(jié)果。

以下是我們根據(jù)官方的文檔,以及實(shí)踐過(guò)程中的一些問(wèn)題,總結(jié)的參數(shù),可作為一個(gè)參考:

3.最終架構(gòu)

最后我落實(shí)了三機(jī)房三節(jié)點(diǎn)MGR集群,作為高可用方案主體,同時(shí)向下擴(kuò)展了一套主從集群,作為不可挽回問(wèn)題的災(zāi)備。畢竟MGR作為新生兒,可靠性還有待驗(yàn)證,相信不遠(yuǎn)的將來(lái)我們也有足夠的信心放棄回滾到主從的方案。

四、上線(xiàn)歷程

美團(tuán)點(diǎn)評(píng)從2018年以來(lái),總共將三個(gè)系統(tǒng)遷移上線(xiàn)了MGR,包括流程系統(tǒng)、報(bào)表系統(tǒng)以及CMDB。

五、典型問(wèn)題

在幾個(gè)集群上線(xiàn)的過(guò)程中,我們也積累了一些問(wèn)題,其中典型的幾個(gè)在這里簡(jiǎn)單回顧一下:

1.大事務(wù)

在報(bào)表系統(tǒng)上線(xiàn)后,集群出現(xiàn)了一點(diǎn)詭異的狀況:在某些時(shí)間點(diǎn),節(jié)點(diǎn)不定時(shí)會(huì)出現(xiàn)UNREACHABLE的狀態(tài),嚴(yán)重時(shí)直接導(dǎo)致集群選主切換,而在此期間,機(jī)房機(jī)器網(wǎng)絡(luò)并沒(méi)有什么異常。

這個(gè)問(wèn)題最初困擾了我們一段時(shí)間,通過(guò)對(duì)之前流程系統(tǒng)的對(duì)比,我們發(fā)現(xiàn)兩個(gè)集群網(wǎng)卡的流量大小有些區(qū)別,且報(bào)表系統(tǒng)有比較明顯的尖刺:

從這個(gè)分析角度出發(fā),我們查閱文檔,發(fā)現(xiàn)有參數(shù)可以做相關(guān)的優(yōu)化,即group_replication_compression_threshold,含義是事務(wù)超過(guò)相應(yīng)大小則在傳輸前進(jìn)行壓縮處理。下圖為參數(shù)調(diào)整后的對(duì)比,由1.5M減少到15K。實(shí)際場(chǎng)景中異常狀態(tài)發(fā)生次數(shù)確實(shí)減少了,但沒(méi)有根除。

順著這個(gè)思路我們做了一些測(cè)試,定位到了根本問(wèn)題:大事務(wù)。

需要說(shuō)明的是MGR的大事務(wù)有自己的“定義”,它的大事務(wù)與網(wǎng)絡(luò)的傳輸時(shí)間有關(guān),這就解釋了為什么我們開(kāi)啟壓縮后,節(jié)點(diǎn)異常狀態(tài)次數(shù)減少的問(wèn)題。最后我們通過(guò)限制事務(wù)的大小的方式,徹底解決了這個(gè)問(wèn)題,同時(shí)也在業(yè)務(wù)邏輯上優(yōu)化了大事務(wù)。以下是兩個(gè)相關(guān)的參數(shù):

2. 應(yīng)用HANG死

第二個(gè)問(wèn)題發(fā)生在一次節(jié)點(diǎn)下線(xiàn)演練的過(guò)程中,DBA開(kāi)始演練操作后,開(kāi)發(fā)同學(xué)突然反饋說(shuō)后臺(tái)Nginx由于請(qǐng)求積壓,機(jī)器掛掉了。如下圖Nginx可用率:

此時(shí)我們?cè)贒BA的慢查詢(xún)監(jiān)控中發(fā)現(xiàn)一個(gè)峰值,時(shí)間點(diǎn)基本吻合。下圖為慢查詢(xún)監(jiān)控:

由此我們分析了這段時(shí)間的慢查詢(xún),發(fā)現(xiàn)這個(gè)SQL我們非常眼熟——MGR查詢(xún)主節(jié)點(diǎn)的語(yǔ)句。正常這個(gè)SQL執(zhí)行時(shí)間在毫秒級(jí),故障當(dāng)時(shí)執(zhí)行了10s,而這個(gè)10s與stop group_replication這個(gè)操作的耗時(shí)基本吻合。

據(jù)此我們做了相應(yīng)的測(cè)試驗(yàn)證了猜測(cè):在MGR節(jié)點(diǎn)START和STOP過(guò)程中,當(dāng)前節(jié)點(diǎn)的replication_group_member視圖的查詢(xún)?nèi)縣ang住。這也就是解釋了Nginx后臺(tái)請(qǐng)求堆積造成的宕機(jī)。在此之后,我們?cè)诔绦蛑胁樵?xún)這個(gè)視圖時(shí)加入了超時(shí)的邏輯,解決了這個(gè)問(wèn)題。

3. 機(jī)房故障

第三個(gè)問(wèn)題發(fā)生在一次實(shí)際的機(jī)房故障中:CMDB主節(jié)點(diǎn)所在機(jī)房網(wǎng)絡(luò)帶寬減半,導(dǎo)致CMDB的MGR集群和一套業(yè)務(wù)主從集群幾乎同時(shí)發(fā)生了切換,MGR的切換時(shí)間大概在3s左右,業(yè)務(wù)基本無(wú)感知,只發(fā)生部分報(bào)錯(cuò),但業(yè)務(wù)集群切換發(fā)現(xiàn)回填CMDB失敗。

究其原因主要是由于切換的邏輯仍然沿用DNS的連接方式,導(dǎo)致切換發(fā)生,DNS同步重新指向,而切換的應(yīng)用程序?qū)NS新地址的解析遲遲未效。

通過(guò)這次故障,也促使我們將所有核心CMDB訪(fǎng)問(wèn)全部遷移到內(nèi)部開(kāi)發(fā)的Smart Client端上。

六、Smart Client

關(guān)于Smart Client,它是我們內(nèi)部開(kāi)發(fā)的一套Python連接API,是基于MySQLdb實(shí)現(xiàn)的一套MGR切換自動(dòng)選主、讀寫(xiě)分離的功能。對(duì)于熟悉Python訪(fǎng)問(wèn)MySQL的同學(xué)上手非常簡(jiǎn)單。

七、日常運(yùn)維

關(guān)于MGR的日常運(yùn)維,實(shí)際情況比較省心。

初始化除部分參數(shù)區(qū)別外,基本與主從集群差異不大。監(jiān)控方面,我們除了加入系統(tǒng)和MySQL的基礎(chǔ)監(jiān)控外(對(duì)MGR兼容良好),還加入了MGR節(jié)點(diǎn)狀態(tài)的監(jiān)控,即非ONLINE狀態(tài)的節(jié)點(diǎn)全為異常。同時(shí)會(huì)有同學(xué)問(wèn),延遲怎么監(jiān)控?理論上MGR是個(gè)最終一致的集群,它內(nèi)部沒(méi)有延遲的概念,但我們可以通過(guò)監(jiān)控待執(zhí)行事務(wù)隊(duì)列中數(shù)值,近似看做是一種延遲。

下圖為線(xiàn)上一個(gè)集群的“延遲”情況,縱坐標(biāo)為事務(wù)個(gè)數(shù):

同時(shí)還有主節(jié)點(diǎn)與其他節(jié)點(diǎn)的GTID_SET差值也可以作為一定參考。

八、寫(xiě)在最后

通過(guò)我們一系列的線(xiàn)上演練,甚至包括部分高峰期的演練,以及一段時(shí)間的運(yùn)行狀態(tài)觀察,MGR確實(shí)是一個(gè)穩(wěn)定、可靠的高可用架構(gòu)。雖然對(duì)于寫(xiě)入密集型場(chǎng)景不是非常友好,但相信還是可以為DBA的高可用方案提供新的思路。

參考

  • MGR的要求:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements.html

  • MGR的限制:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-limitations.html

  • 參數(shù)配置:

    https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html

  • python工具包:Python MySQL Group Replication 使用

    參考鏈接:https://km.sankuai.com/page/52289606

  • 轉(zhuǎn)自 美團(tuán)點(diǎn)評(píng)基于MGR的CMDB高可用架構(gòu)搭建之路 https://www.toutiao.com/i6602060886867706376/

?

總結(jié)

以上是生活随笔為你收集整理的美团点评基于MGR的CMDB高可用架构搭建之路【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。