Mysql學習筆記---MySQL叢集架構之擴容方案

饅頭太帥了發表於2020-12-20

Mysql學習筆記—MySQL叢集架構之擴容方案

1.擴容場景描述

  1. 當系統使用者進入了高速增長期時,即便是對資料進行分庫分表,但資料庫的容量,還有表的資料量也總會達到天花板。當現有資料庫達到承受極限時,就需要增加新伺服器節點數量進行橫向擴容。
  2. 思考一下,橫向擴充套件會有什麼技術難度?
    1. 資料遷移問題
    2. 分片規則改變
    3. 資料同步、時間點、資料一致性
      在這裡插入圖片描述
  3. 遇到上述問題時,我們可以使用以下兩種方案:
    1. 停機擴容
    2. 平滑擴容

2.停機擴容: 可用性還是受影響的

這是一種很多人初期都會使用的方案,尤其是初期只有幾臺資料庫的時候。停機擴容的具體步驟如下:

  1. 站點釋出一個公告,例如:“為了為廣大使用者提供更好的服務,本站點將在今晚00:00-2:00之間升級,給您帶來不便抱歉";

  2. 時間到了,停止所有對外服務;

  3. 新增n個資料庫,然後寫一個資料遷移程式,將原有x個庫的資料匯入到最新的y個庫中。比如分片規則由%x變為%y;

  4. 資料遷移完成,修改資料庫服務配置,原來x個庫的配置升級為y個庫的配置

  5. 重啟服務,連線新庫重新對外提供服務

  6. 回滾方案:萬一資料遷移失敗,需要將配置和資料回滾,改天再掛公告。

  7. 優點:簡單

  8. 缺點

    1. 停止服務,缺乏高可用
    2. 程式設計師壓力山大,需要在指定時間完成
    3. 如果有問題沒有及時測試出來啟動了服務,執行後發現問題,資料會丟失一部分,難以回滾。
  9. 適用場景

    1. 小型網站
    2. 大部分遊戲
    3. 對高可用要求不高的服務

2.平滑擴容

資料庫擴容的過程中,如果想要持續對外提供服務,保證服務的可用性,平滑擴容方案是最好的選擇。平滑擴容就是將資料庫數量擴容成原來的2倍,比如:由2個資料庫擴容到4個資料庫,具體步驟如下:
  1. 新增2個資料庫

  2. 配置雙主進行資料同步(先測試、後上線)
    在這裡插入圖片描述

  3. 資料同步完成之後,配置雙主雙寫(同步因為有延遲,如果時時刻刻都有寫和更新操作,會存在不準確問題)
    在這裡插入圖片描述

  4. 資料同步完成後,刪除雙主同步,修改資料庫配置,並重啟;
    在這裡插入圖片描述

  5. 平滑擴容方案能夠實現n庫擴2n庫的平滑擴容,增加資料庫服務能力,降低單庫一半的資料量。其核心原理是:成倍擴容,避免資料遷移。

  6. 此時已經擴容完成,但此時的資料並沒有減少,新增的資料庫跟舊的資料庫一樣多的資料,此時還需要寫一個程式,清空資料庫中多餘的資料,如:

    1. User1去除 uid % 4 = 2的資料;
    2. User3去除 uid % 4 = 0的資料;
    3. User2去除 uid % 4 = 3的資料;
    4. User4去除 uid % 4 = 1的資料;
  7. 優點:

    1. 擴容期間,服務正常進行,保證高可用
    2. 相對停機擴容,時間長,專案組壓力沒那麼大,出錯率低
    3. 擴容期間遇到問題,隨時解決,不怕影響線上服務
    4. 可以將每個資料庫資料量減少一半
  8. 缺點:

    1. 程式複雜、配置雙主同步、雙主雙寫、檢測資料同步等
    2. 後期資料庫擴容,比如成千上萬,代價比較高
  9. 適用場景:

    1. 大型網站
    2. 對高可用要求高的服務

相關文章