本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
遷移到 Amazon DocumentDB
Amazon DocumentDB(與 MongoDB 兼容性)是與 MongoDB 兼容的全受管數據庫服務。API您可以使用本節詳述的程序,將資料從內部部署或 Amazon 彈性運算雲端 (AmazonEC2) 上執行的 MongoDB 資料庫遷移到 Amazon DocumentDB。
主題
遷移工具
若要移轉至 Amazon DocumentDB,大多數客戶使用的兩個主要工具是 AWS Database Migration Service (AWS DMS)mongodump
和。mongorestore
最佳做法是對於上述任一選項,建議您在開始遷移之前先在 Amazon DocumentDB 中建立索引,因為這樣可以縮短整體時間並提高遷移速度。要做到這一點,你可以使用 Amazon DocumentDB 索引
AWS Database Migration Service
AWS Database Migration Service (AWS DMS) 是一種雲端服務,可讓您輕鬆將關聯式資料庫和非關聯式資料庫遷移到 Amazon DocumentDB。您可以使用 AWS DMS 將資料從現場部署或在上託管的資料庫遷移到 Amazon DocumentDB。EC2使用 AWS DMS,您可以執行一次性移轉,也可以複寫進行中的變更,以使來源和目標保持同步。
如需使用移轉 AWS DMS 至亞馬遜文件資料庫的詳細資訊,請參閱:
命令行實用程序
在 Amazon DocumentDB 之間移轉資料的常見公用程式包括mongodump
mongorestore
mongoexport
、和. mongoimport
mongodump
和 mongorestore
一般是最有效的公用程式,因為它們會以二進位格式從資料庫傾印和還原資料。這通常是最好的選擇,並且與邏輯導出相比,產生更小的數據大小。 mongoexport
如果您想以邏輯格式導出和導入數據(例JSONCSV如數據是人類可讀的,但通常比mongodump
/慢,mongorestore
並且產生更大的數據大小),則非常有用。mongoimport
下面的遷移方法部分將根據您的使用案例 AWS DMS 和需求討論何時最好使用命令行實用程序和命令行實用程序。
探索
針對每個 MongoDB 部署,您應該識別和記錄兩組資料:「架構詳細資訊」和「營運特點」。此資訊可協助您選擇適當的遷移方法和叢集大小。
架構詳細資訊
-
名稱
選擇追蹤此部署的唯一名稱。
-
版本
記錄您部署正在執行的 MongoDB 版本。若要尋找版本,請連線到具有 mongo 殼層的複本集成員,執行
db.version()
操作。 -
類型
記錄您的部署為獨立的 mongo 執行個體、複本集,還是碎片叢集。
-
成員
記錄每個叢集的主機名稱、地址和連接埠,以及複本集或獨立成員。
針對叢集部署,您可以透過連線到具有 mongo 殼層的 mongo 主機,執行
sh.status()
操作,找到碎片成員。針對複本集,您可以透過連線到具有 mongo 殼層的複本集成員,執行
rs.status()
操作,取得這些成員。 -
Oplog sizes (Oplog 大小)
針對複本集或碎片叢集,記錄每個複本集成員的 oplog 大小。若要尋找成員的 oplog 大小,請連線到具有 mongo 殼層的複本集成員,執行
ps.printReplicationInfo()
操作。 -
Replica set member priorities (複本集成員優先順序)
針對複本集或碎片叢集,記錄每個複本集成員的優先順序。若要尋找複本集成員的優先順序,請連線到具有 mongo 殼層的複本集成員,執行
rs.conf()
操作。優先順序會顯示為priority
金鑰值。 -
TLS/SSL用法
記錄是否在每個節點上使用傳輸層安全性 (TLSSSL)/安全通訊端層 () 來進行傳輸中的加密。
營運特點
-
Database statistics (資料庫統計資料)
針對每個集合,記錄以下資訊:
-
名稱
-
資料大小
-
集合計數
若要尋找資料庫統計資料,請連線到具有 mongo 殼層的資料庫,執行
db.runCommand({dbstats: 1})
命令。 -
-
Collection statistics (集合統計資料)
針對每個集合,記錄以下資訊:
-
命名空間
-
資料大小
-
索引計數
-
集合是否受限
-
-
Index statistics (索引統計資料)
針對每個集合,記錄以下索引資訊:
-
命名空間
-
ID
-
大小
-
鍵
-
TTL
-
稀疏
-
背景介紹
若要尋找索引資訊,請連線到具有 mongo 殼層的資料庫,執行
db.collection.getIndexes()
命令。 -
-
Opcounters
此資訊有助於您了解目前的 MongoDB 工作負載模式 (大量讀取、大量寫入,或平衡)。同時也提供有關您初始 Amazon DocumentDB 執行個體選擇的指導。
以下是要在監控期間收集的幾項重要資訊 (計數/秒):
-
查詢
-
插入
-
更新
-
刪除
您可以建立
db.serverStatus()
命令一段時間後的輸出圖表,取得此資訊。您也可以使用 mongostat 工具取得這些統計資料的即時值。但是,使用此選項要承擔在尖峰負載以外之用量期間規劃遷移的風險。 -
-
Network statistics (網路統計資料)
此資訊有助於您了解目前的 MongoDB 工作負載模式 (大量讀取、大量寫入,或平衡)。同時也提供有關您初始 Amazon DocumentDB 執行個體選擇的指導。
以下是要在監控期間收集的幾項重要資訊 (計數/秒):
-
連線
-
網路位元組輸入
-
網路位元組輸出
您可以建立
db.serverStatus()
命令一段時間後的輸出圖表,取得此資訊。您也可以使用 mongostat 工具取得這些統計資料的即時值。但是,使用此選項要承擔在尖峰負載以外之用量期間規劃遷移的風險。 -
規劃:Amazon DocumentDB 叢集需求
成功移轉需要仔細考慮 Amazon DocumentDB 叢集的組態,以及應用程式存取叢集的方式。決定叢集要求時請考慮下列各方面:
-
可用性
Amazon DocumentDB 透過複本執行個體的部署提供高可用性,這些複本執行個體可在稱為容錯移轉的程序中提升為主執行個體。將複本執行個體部署到不同的可用區域,您可以達到更高層級的可用性。
下表提供 Amazon DocumentDB 部署組態的指導方針,以符合特定的可用性目標。
可用性目標 執行個體總數 複本 可用區域 99% 1 0 1 99.9% 2 1 2 99.99% 3 2 3 整體系統可靠性必須考慮所有元件,不只考慮資料庫。如需滿足整體系統可靠性需求的最佳實務與建議,請參閱 AWS Well-Architected 的可靠性支柱
白皮書。 -
效能
Amazon DocumentDB 執行個體可讓您讀取和寫入叢集的儲存磁碟區。叢集執行個體有多種類型,具有不同數量的記憶體和 vCPU,這會影響叢集的讀取和寫入效能。使用您在探索階段收集的資訊,選擇可支援您工作負載效能需求的執行個體類型。如需支援的執行個體類型清單,請參閱 管理實例類別。
為 Amazon DocumentDB 叢集選擇執行個體類型時,請考慮以下工作負載效能需求的方面:
-
vCPUs需要更高連線計數的架構可能會受益於具有更多 v CPUS 的執行個體。
-
記憶體 — 在可能的情況下,將工作資料集保留在記憶體中可提供最大效 起始準則是為 Amazon DocumentDB 引擎保留三分之一的執行個體記憶體,留下三分之二供工作資料集使用。
-
連線 — 每個 Amazon DocumentDB 執行個體 v 的最低最佳連線計數為八個連線。CPU雖然 Amazon DocumentDB 執行個體連線限制要高得多,但額外連線的效能優勢卻下降到每 v 八個連線以上。CPU
-
網路 — 具有大量用戶端或連線的工作負載應考量插入和擷取資料所需的彙總網路效能。大批量操作能更有效率地使用網路資源。
-
插入效能 — 單一文件插入通常是將資料插入 Amazon DocumentDB 中最慢的方式。大批量插入操作遠較單一插入更快。
-
讀取效能:從工作記憶體讀取的速度永遠比從儲存磁碟區傳回的讀取速度快。因此,最佳化執行個體記憶體大小以保留記憶體中的工作集,是最理想的方式。
除了從主執行個體提供讀取服務之外,Amazon DocumentDB 叢集也會自動設定為複本集。然後,您可以在 MongoDB 驅動程式中設定讀取偏好,路由唯讀查詢以讀取複本。您可以降低主執行個體的整體負載,透過新增複本來擴展讀取流量。
您可以在相同叢集中部署不同執行個體類型的 Amazon DocumentDB 複本。某個使用案例範例,即以較大的執行個體類型提供臨時分析流量,讓複本經久耐用。如果您部署一組混合的執行個體類型,請務必設定每個執行個體的容錯移轉優先順序。這有助於確保容錯移轉事件一律提升足夠大小的複本,以處理您的寫入負載。
-
-
復原
Amazon DocumentDB 會在寫入數據時持續備份您的數據。它可在 1-35 天的可設定期間內提供 point-in-time 復原 (PITR) 功能,稱為備份保留期。預設備份保留期為一天。Amazon DocumentDB 也會自動建立儲存磁碟區的每日快照,這些快照也會在設定的備份保留期內保留。
如果您想要在備份保留期限之後保留快照,也可以隨時使用 AWS Management Console AND AWS Command Line Interface (AWS CLI) 啟動手動快照。如需詳細資訊,請參閱在 Amazon DocumentDB 中進行備份和恢復。
規劃遷移時請考慮以下事項:
-
選擇符合復原點目標的 1-35 天備份保留期 (RPO)。
-
決定是否需要手動快照,如果需要,間隔為何。
-
遷移方法
將資料遷移到亞馬遜文件資料庫有三種主要方法。
注意
雖然您可以隨時在 Amazon DocumentDB 中建立索引,但是在匯入大型資料集之前,建立索引的整體速度會比較快。最佳實務是,我們建議您針對以下每種方法,先在 Amazon DocumentDB 中建立索引,然後再執行移轉。要做到這一點,你可以使用 Amazon DocumentDB 索引
離線
離線方法使用mongodump
和mongorestore
工具將您的資料從來源 MongoDB 部署遷移到 Amazon DocumentDB 叢集。離線方法是最簡單的遷移方法,但也會產生最大的叢集停機時間。
離線遷移的基本程序如下:
-
Quiesce 寫入到您的 MongoDB 來源。
-
傾印來自來源 MongoDB 部署的收集資料和索引。
-
如果您要遷移到彈性叢集,請使用
sh.shardCollection()
命令建立您的分片集合。如果您要移轉至執行個體型叢集,請跳至下一個步驟。 -
將索引還原到 Amazon DocumentDB 叢集。
-
將收集資料還原至 Amazon DocumentDB 叢集。
-
將您的應用程式端點變更為寫入 Amazon DocumentDB 叢集。
![圖表:遷移到 Amazon DocumentDB 的離線方法](images/docdb-migration-offline.png)
線上
「線上」方法使用 AWS Database Migration Service (AWS DMS)。它會執行完整的資料負載,從您的來源 MongoDB 部署到您的 Amazon DocumentDB 叢集。然後,它切換到更改數據捕獲(CDC)模式以複製更改。線上方法可減少叢集的停機時間,但它是三種方法中最慢的。
線上遷移的基本程序如下:
-
您的應用程式通常會使用來源資料庫。
-
如果您要遷移到彈性叢集,請使用
sh.shardCollection()
命令建立您的分片集合。如果您要移轉至執行個體型叢集,請跳至下一個步驟。 -
在 Amazon DocumentDB 叢集中預先建立索引。
-
建立 AWS DMS 任務以執行完全負載,然後CDC從來源 MongoDB 部署啟用到 Amazon DocumentDB 叢集。
-
在 AWS DMS 任務完成完整負載並將變更複寫到 Amazon DocumentDB 之後,請將應用程式的端點切換到 Amazon DocumentDB 叢集。
![圖表:移轉至 Amazon DocumentDB 的線上方法](images/docdb-migration-online.png)
如需有關使用移 AWS DMS 轉的詳細資訊,請參閱使用 Amazon DocumentDB 做為目標 AWS Database Migration Service和使用AWS Database Migration Service者指南中的相關教學課程。
混合
混合式方法會使用mongodump
和mongorestore
工具,將您的資料從來源 MongoDB 部署遷移到 Amazon DocumentDB 叢集。然後,它會 AWS DMS 在CDC模式中使用複製變更。混合方法可平衡遷移速度和停機時間,但它是三種方法中最複雜的一種。
混合遷移的基本程序如下:
-
您的應用程式通常會使用來源 MongoDB 部署。
-
傾印來自來源 MongoDB 部署的收集資料和索引。
-
將索引還原到 Amazon DocumentDB 叢集。
-
如果您要遷移到彈性叢集,請使用
sh.shardCollection()
命令建立您的分片集合。如果您要移轉至執行個體型叢集,請跳至下一個步驟。 -
將收集資料還原至 Amazon DocumentDB 叢集。
-
建立一個 AWS DMS 任務,以啟用CDC從來源 MongoDB 部署到 Amazon DocumentDB 叢集。
-
當 AWS DMS 任務在可接受的視窗內複寫變更時,請變更應用程式端點以寫入 Amazon DocumentDB 叢集。
![圖表:遷移到 Amazon DocumentDB 的混合方法](images/docdb-migration-hybrid.png)
重要
AWS DMS 工作目前只能移轉單一資料庫。如果您的 MongoDB 來源有大量的資料庫,您可能需要自動化遷移任務的建立過程,或考慮使用離線方法。
無論您選擇哪種遷移方法,在遷移資料之前,在 Amazon DocumentDB 叢集中預先建立索引都是最有效率的。這是因為 Amazon DocumentDB 索引是以 parallel 方式插入資料,但是在現有資料上建立索引是單執行緒作業。
因為 AWS DMS 不會移轉索引 (只有您的資料),因此不需要額外的步驟來避免再次建立索引。
移轉來源
如果您的 MongoDB 源是一個獨立的 mongo 進程,並且您想要使用在線或混合遷移方法,請首先將您的獨立 mongo 轉換為副本集,以便創建 oplog 作為源使用。CDC
如果要從 MongoDB 複本集或碎片叢集遷移,請考慮為每個複本集或碎片建立鏈結或隱藏的次要複本,做為遷移來源使用。執行資料傾印可以強制記憶體產生工作集資料,影響生產執行個體的效能。您可以從不提供生產資料的節點遷移,以降低此風險。
遷移來源版本
如果您的來源 MongoDB 資料庫版本與目的地 Amazon DocumentDB 叢集的相容性版本不同,您可能需要採取其他準備步驟以確保移轉成功。遇到的兩個最常見的需求是需要將來源 MongoDB 安裝升級到支援的移轉版本 (MongoDB 3.0 或更高版本),以及升級您的應用程式驅動程式以支援目標 Amazon DocumentDB 版本。
如果您的遷移有這兩種需求的其中之一,遷移計畫中請務必包含這些步驟,以升級和測試任何的驅動程式變更。
移轉連線
您可以從在資料中心執行的來源 MongoDB 部署,或從 Amazon 執行個體上執行的 MongoDB 部署遷移至亞馬遜文件資料庫。EC2從上執行的 MongoDB 遷移非EC2常簡單,而且只需要正確設定安全性群組和子網路即可。
![圖表:從 Amazon 源遷移到 Amazon DocumentDB EC2](images/docdb-migration-ec2-source.png)
從內部部署資料庫遷移需要 MongoDB 部署與虛擬私有雲 (VPC) 之間的連線。您可以透過虛擬私人網路 (VPN) 連線或使用 AWS Direct Connect 服務來完成此操作。雖然您可以透過網際網路移轉到您的網際網路VPC,但從安全性角度來看,這種連線方法是最不理想的方式。
下圖說明透過連線從現場部署來源遷移至 Amazon DocumentDB 的過程。VPN
![圖表:從現場部署來源遷移至 Amazon DocumentDB 料庫 () VPN](images/docdb-migration-on-prem-vpn.png)
以下代表使用從現場部署來源遷移至 Amazon DocumentDB 料庫。 AWS Direct Connect
![圖表:從現場部署來源遷移至 Amazon DocumentDB 料庫 ()AWS Direct Connect](images/docdb-migration-on-prem-direct-connect.png)
線上和混合移轉方法需要使用執行個 AWS DMS 體,執行個體必須在 Amazon EC2 中的 Amazon 上執行VPC。所有方法都要求遷移伺服器執行 mongodump
和 mongorestore
。一般而言,在啟動 Amazon DocumentDB 叢集的 Amazon 執行個EC2體上執行遷移伺服器會比較容易,因為這樣可以大幅簡化與 Amazon DocumentDB 叢集的連線。VPC
測試
以下是預先遷移測試的目標:
-
驗證您所選擇的方法能否達成您想得到的遷移結果。
-
驗證您的執行個體類型和讀取偏好選項能否滿足您的應用程式效能需求。
-
驗證容錯移轉期間的應用程式行為。
移轉計劃測試考量
測試 Amazon DocumentDB 遷移計劃時,請考慮下列事項。
還原索引
根據預設,mongorestore
會建立傾印集合索引,但是在還原資料後才建立它們。在將資料還原到叢集之前,在 Amazon DocumentDB 中建立索引會比較快速。這是因為索引操作是在資料載入期間是平行作業。
如果您選擇預先建立索引,使用 mongorestore
還原資料時可提供 -–noIndexRestore
選項,略過索引建立步驟。
轉儲數據
mongodump
工具是從來源 MongoDB 部署傾印資料的慣用方法。視遷移執行個體的可用資源而定,您或許可以使用 –-numParallelCollections
選項,將平行連線數量從預設值 4 往上增加,以加速 mongodump
。
還原資料
此工mongorestore
具是將傾印的資料還原到 Amazon DocumentDB 執行個體的偏好方法。您可以在使用 -–numInsertionWorkersPerCollection
選項還原期間,增加每個集合的工作者數目,提升還原效能。Amazon DocumentDB 叢集主要執行個體CPU上每 v 有一個工作者是開始的好地方。
Amazon DocumentDB 目前不支持該mongorestore
工具的--oplogReplay
選項。
根據預設,mongorestore
會略過插入錯誤,繼續還原程序。如果您要將不受支援的資料還原到 Amazon DocumentDB 執行個體,就會發生這種情況。例如,如果您的文件包含具有空字串的金鑰或值,就會發生這種情況。如果發生還原錯誤時,您希望讓 mongorestore
操作徹底失敗,請使用 --stopOnError
選項。
大小
MongoDB 操作日誌 (oplog
) 是封閉集合,包含資料庫所有的修改資料。您可以對複本集或碎片成員執行 db.printReplicationInfo()
操作,檢視 oplog 的大小和其包含的時間範圍。
如果您使用的是線上或混合方法,請確定每個複本集或碎片上的 oplog 足夠大,可容納整個資料移轉程序期間所做的所有變更 (無論是透過mongodump
或 AWS DMS 工作滿載),以及合理的緩衝區。如需詳細資訊,請參閱 MongoDB 文件中的檢查 Oplog 大小。記錄 mongodump
或 mongorestore
程序或 AWS DMS 全部負載任務的第一個測試回合經歷時間,判斷所需的 oplog 大小下限。
AWS Database Migration Service 配置
AWS Database Migration Service 使用者指南涵蓋將 MongoDB 來源資料遷移到 Amazon DocumentDB 叢集所需的元件和步驟。以下是用 AWS DMS 來執行線上或混合移轉的基本程序:
若要使用執行移轉 AWS DMS
-
建立 MongoDB 來源端點。如需詳細資訊,請參閱使用 MongoDB 做為 AWS DMS來源。
-
建立 Amazon DocumentDB 目標端點。如需詳細資訊,請參閱使用 AWS DMS 端點。
如果您將目標端點設定為彈性叢集,請注意,您現有的 Amazon DocumentDB SSL 憑證無法與彈性叢集搭配使用,因此您需要使用下列步驟將新SSL憑證附加到端點:
a. 造訪 https://www.amazontrust.com/repository/SFSRootCAG2.pem
並將內容儲存為「SFSRootCAG2.pem」檔案。這是您在後續步驟中需要匯入的憑證檔案。 b. 建立彈性叢集端點時,請在「端點組態」下選擇「新增 CA 憑證」。
然後,對於憑證識別碼,輸入
SFSRootCAG2.pem
。對於 Import certificate file (匯入憑證檔案),請選擇 Choose file (選擇檔案),然後瀏覽至您先前下載的
SFSRootCAG2.pem
檔案。選取並開啟檔案。選擇「匯入憑證」,然後SFSRootCAG2.pem
從「選擇憑證」下拉式清單中選擇。
-
建立至少一個 AWS DMS 複製執行個體。如需詳細資訊,請參閱使用 AWS DMS 複製執行個體。
-
至少建立一個 AWS DMS 複製工作。如需詳細資訊,請參閱使用 AWS DMS 任務。
針對線上遷移,您的遷移任務會使用遷移類型 Migrate existing data and replicate ongoing changes (遷移現有資料及複寫持續的變更)。
針對混合遷移,您的遷移任務會使用遷移類型 Replicate data changes only (僅複寫變更的資料)。您可以選擇與作業中的傾印時間保持一致的CDC開始時
mongodump
間。MongoDB oplog 是等冪的。為了避免錯過更改,最好在mongodump
完成時間和CDC開始時間之間留下幾分鐘的重疊。
從分片叢集移轉
將資料從 MongoDB 資料分割叢集遷移到 Amazon DocumentDB 執行個體的程序,基本上是多個 parallel 移轉複本集的程序。測試碎片叢集遷移時的重要考量是,有些碎片的使用量可能比其他碎片更多。這種情況會導致資料遷移的經歷時間不同。確保在規劃和測試時評估每個碎片的oplog
需求。
以下是遷移碎片叢集時,需要考慮的一些組態問題:
-
執行
mongodump
或開始 AWS DMS 遷移任務之前,您必須停用碎片叢集平衡器,等待任何正在進行的遷移完成。如需詳細資訊,請參閱 MongoDB 文件的停用平衡器。 -
如果您使用複製 AWS DMS 資料,請在執行移轉工作之前,在每個碎片上執行
cleanupOrphaned
指令。如果您不執行此命令,工作可能會因為文件重複而失敗IDs。請注意,此命令可能會影響效能。如需詳細資訊,請參閱 MongoDB 文件cleanupOrphaned中的。 -
如果您使用
mongodump
工具傾印資料,應該每個碎片執行一次mongodump
程序。最有時間效率的方法可能需要多部遷移伺服器,將傾印效能提升到最高。 -
如果您使 AWS Database Migration Service 用複製資料,則必須為每個碎片建立來源端點。同時針對您要遷移的每個碎片,至少執行一項遷移任務。最有時間效率的方法可能需要多個複寫執行個體,將遷移效能提升到最高。
性能測試
成功將資料移轉到測試 Amazon DocumentDB 叢集後,請對叢集執行測試工作負載。透過 Amazon CloudWatch 指標驗證您的效能是否符合或超過 MongoDB 來源部署目前的輸送量。
驗證下列關鍵的 Amazon DocumentDB 指標:
-
網路輸送量
-
寫入輸送量
-
讀取輸送量
-
複本延遲
如需詳細資訊,請參閱監控 Amazon DocumentDB。
容錯移轉測
確認 Amazon DocumentDB 容錯移轉事件期間應用程式的行為是否符合您的可用性需求。若要在主控台上啟動 Amazon DocumentDB 叢集的手動容錯移轉,請在「叢集」頁面上,選擇「動作」功能表上的「容錯移轉」動作。
您也可以從 AWS CLI執行 failover-db-cluster
操作,啟動容錯移轉。如需詳細資訊,請參閱參考資料failover-db-cluster
中的 Amazon DocumentDB 一節。 AWS CLI
其他資源
請參閱《AWS Database Migration Service 使用指南》中的下列主題: