全部產品
Search
文件中心

ApsaraDB RDS:通過DTS實現資料庫的垂直分割

更新時間:Jun 19, 2024

當RDS執行個體負載過大時,可以將該執行個體的一個資料庫或表垂直分割至另外一個單獨的執行個體中。本文介紹如何通過雙寫方案和簡易拆分方案實現垂直分割。

背景資訊

假設一個RDS執行個體上有資料庫A和B,隨著業務增長執行個體瓶頸也日趨可見,如想要減輕該執行個體的壓力,您可以將資料庫B垂直分割至另外一個單獨的執行個體中,詳情請參見雙寫方案簡易拆分方案

注意事項

  • 您需要使用一個單獨的執行個體作為目標執行個體,且目標執行個體的資料庫帳號許可權需與源執行個體的資料庫帳號許可權一致。支援的目標執行個體類型,請參見DTS資料移轉方案概覽

    說明

    為便於區分會話資訊以及提升資料安全性,建議在源和目標執行個體中單獨建立並授權一個資料庫帳號以供資料移轉使用。

  • 需將目標執行個體的串連串加入應用程式中。

  • 由於簡易拆分方案需要短暫暫停業務並暫停向資料庫寫入資料,請選擇業務低峰期操作以降低程式變更發布、切換執行個體過程中對業務的影響。

雙寫方案

說明

可以實現業務的灰階切流,最大限度保證業務不受影響,但您需要先改造業務的應用程式,使應用程式的相關資料能夠同時寫入源和目標執行個體的資料庫B中。

  1. 配置源和目標執行個體的資料移轉任務,遷移對象選擇為資料庫B,配置案例請參見DTS資料移轉方案概覽

    說明

    配置資料移轉任務時,您必須選中結構資料移轉全量資料移轉增量資料移轉

  2. 等待資料移轉任務的進度變更為增量遷移,並顯示為無延遲狀態或延遲時間低於5秒。

    資料移轉任務正向1

  3. 驗證源和目標執行個體的資料庫B中的資料是否一致。

  4. 如果資料一致,則結束資料移轉的任務,詳情請參見結束資料移轉任務

    警告

    用於資料移轉的資料庫帳號擁有讀寫權限,為保障資料庫安全性,請在資料移轉完成後,刪除用於資料移轉的資料庫帳號或回收相關寫入權限。

  5. 將應用程式中的相關資料同時寫入源和目標執行個體資料庫B中。

  6. 登入源和目標執行個體資料庫B,根據資料庫類型選擇下述命令查看會話資訊,確保有新的會話執行寫入操作。

    MySQL

    show processlist;

    SQL Server

    select * from sys.dm_exec_connections;

    Oracle

    select sid,serial#,username,program,machine,status from v$session;

    PostgreSQL

    select * from pg_stat_activity;

    Redis

    CLIENT LIST

    MongoDB

    use admin
    db.runCommand({currentOp: 1, $all:[{"active" : true}]})
    說明

    上述語句查詢到的進程或會話資訊中,包含DTS串連源和目標執行個體資料庫B的進程或會話。

  7. 應用程式的相關資料同時傳入至源執行個體和目標執行個體的資料庫B中並穩定運行一個業務周期或者7天。

  8. 測試所有業務涉及的功能並確認無問題,可下線源執行個體的資料庫B。

簡易拆分方案

說明

有一定的復原失敗風險,但無需改造業務的應用程式。

  1. 配置源和目標執行個體的資料移轉任務,遷移對象選擇為資料庫B,配置案例請參見DTS資料移轉方案概覽

  2. 等待資料移轉任務的進度變更為增量遷移,並顯示為無延遲狀態或延遲時間低於5秒。

    資料移轉任務正向1

    說明

    配置資料移轉任務時,如果未選中增量資料移轉,進度條不會變更為增量遷移,且遷移完成後會自動結束任務。此類情況通常約定在執行資料移轉任務之前將業務中斷並停止新的資料寫入來源資料庫,所以請直接跳轉至 步驟6繼續操作。

  3. 驗證源和目標執行個體的資料庫B中的資料是否一致。

  4. 如果資料一致,則結束資料移轉的任務,詳情請參見結束資料移轉任務

    警告

    用於資料移轉的資料庫帳號擁有讀寫權限,為保障資料庫安全性,請在資料移轉完成後,刪除用於資料移轉的資料庫帳號或回收相關寫入權限。

  5. 斷開源執行個體資料庫B與應用程式的串連。

    說明

    源執行個體資料庫B與應用程式的串連中斷後,如果影響了資料庫A涉及業務的功能,您需要暫時中斷整個源執行個體與應用程式的串連。

  6. 登入源執行個體資料庫B,根據資料庫類型選擇下述命令查看會話資訊,確保沒有新的會話執行寫入操作。

    MySQL

    show processlist;

    SQL Server

    select * from sys.dm_exec_connections;

    Oracle

    select sid,serial#,username,program,machine,status from v$session;

    PostgreSQL

    select * from pg_stat_activity;

    Redis

    CLIENT LIST

    MongoDB

    use admin
    db.runCommand({currentOp: 1, $all:[{"active" : true}]})
    說明

    上述語句查詢到的進程或會話資訊中,包含DTS串連源執行個體資料庫B的進程或會話。

  7. 建立反向資料移轉任務並啟動,用於將目標執行個體資料庫B後續產生增量資料移轉到源執行個體資料庫B。

    此步驟建立的反向遷移任務的作用是為業務提供回退方案,業務恢複運行後,一旦出現異常可將業務切換至原有的資料庫中。

    警告

    在配置反向資料移轉任務時,在設定遷移類型及列表環節僅需選擇增量資料移轉,然後選擇需要遷移回來源資料庫的庫或表。

  8. 保持源執行個體資料庫B與應用程式的斷開狀態,驗證源和目標執行個體的資料庫B資料一致後,將應用程式的相關資料庫服務切換至目標執行個體的資料庫B並恢複業務。

  9. 登入目標執行個體資料庫B,根據資料庫類型選擇下述命令查看會話資訊,確保有新的會話執行寫入操作。

    MySQL

    show processlist;

    SQL Server

    select * from sys.dm_exec_connections;

    Oracle

    select sid,serial#,username,program,machine,status from v$session;

    PostgreSQL

    select * from pg_stat_activity;

    Redis

    CLIENT LIST

    MongoDB

    use admin
    db.runCommand({currentOp: 1, $all:[{"active" : true}]})
    說明

    上述語句查詢到的進程或會話資訊中,包含DTS串連源執行個體資料庫B的進程或會話。

  10. 業務切換至目標資料庫並穩定運行一個業務周期或者7天。

  11. 測試所有業務涉及的功能並確認無問題,可下線源執行個體的資料庫B並結束反向資料移轉的任務,詳情請參見結束資料移轉任務

    警告

    用於資料移轉的資料庫帳號擁有讀寫權限,為保障資料庫安全性,請在資料移轉完成後,刪除用於資料移轉的資料庫帳號或回收相關寫入權限。