站長資訊網
        最全最豐富的資訊網站

        聊聊GitHub是怎么做好 MySQL 高可用性的

        GitHub是怎么做好 MySQL 高可用性的?下面本篇文章就來帶大家分享一下,希望對大家有所幫助。

        聊聊GitHub是怎么做好 MySQL 高可用性的

        程序員必備接口測試調試工具:立即使用
        Apipost = Postman + Swagger + Mock + Jmeter
        Api設計、調試、文檔、自動化測試工具
        后端、前端、測試,同時在線協作,內容實時同步

        Github 使用 MySQL 數據庫作為所有非 git 事務的數據存儲。數據庫的可用性對 Github 的正常運行而言至關重要。無論是 Github 網站本身,還是 Github API,身份驗證服務等都需要訪問數據庫。Github 運行了多個數據庫集群用于支撐不同的服務于任務。數據庫的架構采用的是傳統的主從結構,集群中一個節點(主庫)支持寫訪問,其余的節點(從庫)同步主庫的變更,支持讀服務。

        主庫的可用性至關重要。一旦主庫宕機,集群將不能夠支持數據寫入服務:任何需要保存的數據都無法寫入到數據庫保存。最終導致 Github 上任何變更,例如代碼提交,提問,用戶創建,代碼 review,創建倉庫等操作都無法完成。

        為了保證業務的正常運行,我們自然需要在集群中有一個可用的支持寫入的數據庫節點。同時,我們也必須能夠快速的發現可用的可寫入服務數據庫節點。

        就是說,在異常情況下,假如主庫宕機的場景,我們必須確保新的主庫能夠立刻上線支持服務,同時保證集群中其他節點能夠快速識別到新的主庫。故障檢測,主庫遷移以及集群其他數據節點識別新主庫的總時間構成了服務中斷的總時間。

        這篇文章說明了 GitHub 的 MySQL 高可用性和主庫服務發現解決方案,該解決方案使我們能夠可靠地運行跨數據中心的操作,能夠容忍數據中心的隔離,并縮短在出現故障時停機時間。

        高可用性的實現#

        本篇文章描述的解決方案是在以前 Github 高可用方案上的改進版本。正如前面說到的一樣,MySQL 的高可用策略必須適應業務的變化。我們期望 MySQL 以及 GitHub 上其他的服務都有能夠應對變化的高可用解決方案。

        當設計高可用以及服務發現系統方案的時候,從下面幾個問題出發,也許能夠幫助我們快速找到合適的解決方案:

        • 最大允許的服務中斷的時間是多少?
        • 服務中斷檢測的準確性怎么樣?是否能夠允許服務中斷檢測誤報(會導致過早故障轉移)?
        • 故障轉移的可靠性怎么樣?什么情況會導致故障轉移失敗?
        • 這個方案能否在跨數據中心實現,以及如何實現的? 在不同的網絡狀況下會怎么樣,延遲高,或延遲低的情況會怎么樣?
        • 這個解決方案能否承受整個數據中心(DC)的故障 或者網絡隔離的情況?
        • 有什么機制防止 HA 集群腦裂情況(在一個整體的系統,聯系著的兩個節點分裂為兩個獨立節點,這兩個節點爭搶共享資源寫入數據的情況)?
        • 能否容忍數據丟失?容忍丟失程度是多少?

        為了說明上面的幾個問題,我們先來看一下我們之前的高可用方案,以及我們為什么要改進它。

        摒棄基于 VIP 和 DNS 的發現機制#

        在之前的方案中,應用了下面的技術方案:

        • 使用 orchestrator 作為故障檢測遷移方案。
        • 采用 VIP 和 DNS 方式作為主節點發現方案。

        客戶端通過節點名稱,例如 mysql-writer-1.github.net,解析成主節點的虛擬 IP 地址 (VIP),從而找到主節點。

        因此,正常情況下,客戶端可以通過對節點名稱的解析,連接到對應 IP 的主節點上。

        考慮夸三個數據中心的拓撲結構的情況:

        聊聊GitHub是怎么做好 MySQL 高可用性的

        一旦主庫異常,必須將其中的一個數據副本服務器更新為主庫服務器。

        orchestrator 會檢測異常,選出新的主庫,然后重新分配數據庫的名稱以及虛擬 IP (VIP)。客戶端本身不知道主庫的變更,客戶端有的信息只是主庫的名稱,因此這個名稱必須能夠解析到新的主庫服務器。考慮下面的問題:

        VIP 需要協商:虛擬 IP 由數據庫本身所持有。 服務器必須發送 ARP 請求,才能夠占有或釋放 VIP。 在新的數據庫分配新的 VIP 之前,舊的服務器必須先釋放其占有的 VIP。這個過程會產生一些異常問題:

        • 故障轉移的順序,首先是請求故障機器釋放 VIP,然后聯系新的主庫機器分配 VIP。但是,如果故障機器本身不能訪問,或者說拒絕釋放 VIP 呢? 考慮到機器故障的場景,故障機器不會立即響應或根本就不會響應釋放 VIP 的請求,整個過程有下面兩個問題:
          • 腦裂情況:如果有兩個主機持有相同的 VIP 的情況,不同的客戶端根據最短的網絡鏈路將會連接到不同的主機上。
          • 整個 VIP 重新分配過程依賴兩個獨立服務器的相互協調,而且設置過程是不可靠的。
        • 即使故障機器正常釋放 VIP,整個流程也是非常耗時的,因為切換過程還需要連接故障機器。
        • 即使 VIP 重新分配,客戶端已有的連接不會自動斷開舊的故障機器,從而使得整個系統產生腦裂的情況。

        在我們實際設置 VIP 時,VIP 還受實際物理位置的約束。這主要取決于交換機或者路由器所在。因此,我們只能在同一本地服務器上重新分配 VIP。特別是在某些情況下,我們無法將 VIP 分配給其他數據中心的服務器,而必須進行 DNS 更改。

        • DNS 更改需要更長的時間傳播。客戶端緩存 DNS 名稱會先配置時間。跨平臺故障轉移意味著需要
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲爆乳精品无码一区二区三区| 国产99久久精品一区二区| 亚洲精品老司机在线观看| 国产精品综合专区中文字幕免费播放| 国产韩国精品一区二区三区久久| 亚洲中文精品久久久久久不卡| 精品成人av一区二区三区| 亚洲精品视频在线| 国产精品视频一区国模私拍| 国产精品午睡沙发系列| 中文精品99久久国产| 青草青草久热精品视频在线观看| 国产啪亚洲国产精品无码 | 国产精品日本一区二区在线播放| 亚洲精品无码99在线观看| 精品国产一级在线观看 | 92国产精品午夜福利| 久久国产精品成人片免费| 午夜精品一区二区三区免费视频| 在线观看自拍少妇精品| 亚洲国产精品成人AV无码久久综合影院| 精品少妇一区二区三区在线 | 精品福利一区二区三| 91精品国产乱码久久久久久 | 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 久久精品国产精品亚洲人人| 国产午夜精品一区二区三区小说 | 亚洲Av无码精品色午夜| 亚洲线精品一区二区三区影音先锋| 亚洲国产精品ⅴa在线观看| 一本色道久久88综合日韩精品| 亚洲国产一成久久精品国产成人综合| 日本精品少妇一区二区三区| 精品无码三级在线观看视频 | 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 久久e热在这里只有国产中文精品99| 国内精品国产成人国产三级| 国产乱人伦偷精品视频不卡| 国产精品亚洲玖玖玖在线观看| 国产亚洲曝欧美不卡精品|