在適用於 MongoDB 的 Azure Cosmos DB 虛擬核心中建立和使用跨區域叢集復本
在本指南中,您會在另一個區域中為適用於 MongoDB 的 Azure Cosmos DB 虛擬核心叢集建立叢集復本,以進行災害復原 (DR) 用途。 此複本叢集將所有 MongoDB 資源 (資料庫、集合和文件) 的副本儲存在另一個 Azure 區域中。 複本叢集會為各種工具和 SDK 提供唯一的端點,以便連接到這些工具和 SDK,並且可以在主要區域中斷時升級為可用於寫入。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- MongoDB 殼層
在另一個區域中建立新的叢集及其複本
使用 Azure Cosmos DB for MongoDB 虛擬核心,在另一個區域中建立具有叢集讀取複本的 MongoDB 叢集。
提示
針對本指南,我們建議使用資源組名稱 msdocs-cosmos-quickstart-rg
。
登入 Azure 入口網站。
從 Azure 入口網站功能表或 [首頁] 頁面,選取 [建立資源]。
在 [新增] 頁面上,搜尋並選取 [Azure Cosmos DB]。
在 [哪個 API 最適合您的工作負載?] 頁面上,選取 [Azure Cosmos DB for MongoDB] 區段內的 [建立] 選項。
在 [哪種資源類型?] 頁面上,選取 [虛擬核心叢集] 區段中的 [建立] 選項。 如需詳細資訊,請參閱 Azure Cosmos DB for MongoDB 中虛擬核心架構的概觀。
在 [建立 Azure Cosmos DB for MongoDB 叢集] 頁面上,選取 [叢集層] 區段內的 [設定] 選項。
在 [調整] 頁面上,將選項設定為預設值:
設定 值 分區計數 1 個分區 叢集層 M30 階層、2 個虛擬核心、8 GiB RAM Storage 128 GiB 將 [高可用性] 取消選取。 在高可用性 (HA) 通知區段中,選取 [我了解]。 最後,選取 [儲存] 以將變更保存到叢集設定。
區域內高可用性提供區域內解決方案,其中叢集中每個分區的數據複本會串流至位於相同區域但位於不同可用性區域(AZ) 的待命對應專案。 高可用性會使用同步複寫,且不會遺失資料,以及自動失敗偵測和容錯移轉,同時在容錯移轉之後保留連接字串不變。 在主要叢集上可啟用高可用性,以提供額外的保護層,防止失敗。
回到叢集頁面,輸入下列資訊:
設定 值 Description 訂用帳戶 訂用帳戶名稱 選擇要用於此 Azure Cosmos DB for MongoDB 叢集及其複本叢集的 Azure 訂用帳戶。 資源群組 資源群組名稱 選取資源群組,或選取 [新建],然後輸入新資源群組的唯一名稱。 叢集名稱 全域唯一的名稱 輸入名稱來識別您的 Azure Cosmos DB for MongoDB 叢集。 名稱會作為完整網域名稱 (FQDN) 的一部分,其尾碼為 mongodbcluster.cosmos.azure.com,因此名稱必須是全域唯一。 名稱只能包含小寫字母、數字及連字號 (-) 字元。 且名稱長度必須介於 3 到 40 個字元。 Location 最接近使用者的區域 選取地理位置,以裝載具有讀取和寫入功能的主要叢集 Azure Cosmos DB for MongoDB 叢集。 使用最接近使用者的位置,讓他們能以最快速度存取資料。 MongoDB 版本 要在您的叢集上執行的 MongoDB 版本 此值會設定為可用的最新 MongoDB 版本的預設值。 管理員使用者名稱 提供存取叢集的使用者名稱 此使用者以使用者管理員身分建立在叢集上。 密碼 使用唯一密碼與使用者名稱配對 密碼的長度必須為至少 8 個字元,最多 128 個字元。 選取 [ 下一步:全域散發]。
在 [全域散發] 索引卷標上,選取 [在另一個區域中啟用讀取複本],以建立叢集讀取複本,作為這個新主要叢集布建的一部分。
在 [讀取複本名稱] 欄位中,輸入叢集讀取複本的名稱。 它應該是全域唯一的叢集名稱。
從 [讀取複本區域] 下拉式清單中選取值。
選取 [下一步:網路]。
在 [網路] 索引標籤上,選取 [新增目前的用戶端 IP 位址] 以使用 Azure 系統發現的電腦公用 IP 位址來建立防火牆規則。
儲存此設定之前,請先驗證您的 IP 位址。 在某些情況下,Azure 入口網站觀察到的 IP 位址,不同於用來存取網際網路和 Azure 服務的 IP 位址。 因此,您可能需要變更起始 IP 和結束 IP,規則才會正常運作。 使用搜尋引擎或其他線上工具,檢查您自己的 IP 位址。 例如,搜尋「我的 IP 是什麼」。
您也可以選取新增 0.0.0.0 - 255.255.255.255,不只允許您的 IP,也允許整個網際網路存取叢集。 在此情況下,用戶端仍然必須使用正確的使用者名稱和密碼登入,才能使用叢集。 不過,最好只允許短時間且只針對非生產資料庫的全球存取。
選取 [檢閱 + 建立]。
檢閱您提供的設定,然後選取 [建立]。 建立叢集需要幾分鐘的時間。 繼續進行之前,請等候入口網站頁面顯示 [您的部署已完成] 訊息。
選取 [前往資源],以移至 Azure Cosmos DB for MongoDB 叢集頁面。
連結至主要叢集並內嵌資料
取得連線至 Azure 入口網站中主要 (讀寫) 叢集所需的連接字串。
從 Azure Cosmos DB for MongoDB 虛擬核心主要叢集頁面中,選取 [設定] 下的 [連接字串] 導覽功能表選項。
從 [自我][一律為此叢集] 字段複製值。
在命令列中,使用 MongoDB 殼層使用連接字串連線至主要叢集。
mongosh "mongodb+srv://<user>@<primary_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"
內嵌資料
建立 my_script.js 指令檔,以從 MongoDB 殼層進行執行。
let dogDocs = [
{
name: "pooch",
breed: "poodle",
weight: "6 lbs"
},
{
name: "mutt",
breed: "bulldog",
weight: "10 lbs"
}
];
let catDocs = [
{
name: "minni",
breed: "persian",
color: "white"
},
{
name: "tinkle",
breed: "bombay",
color: "black"
}
];
let dogIndex = { name : 1 };
let catIndex = { name : 1 };
let collInfoObjs = [
{ coll: "dogs", data: dogDocs, index: dogIndex },
{ coll: "cats", data: catDocs, index: catIndex }
];
for (obj of collInfoObjs) {
db[obj.coll].insertMany(obj.data);
db[obj.coll].createIndex(obj.index);
}
此指令檔會建立兩個集合,並將具有資料的文件插入這些集合中。 將 my_script.js 檔案儲存在 MongoDB 殼層工作階段可存取的資料夾中。
從連線至主要 MongoDB 叢集的 MongoDB 殼層執行指令碼。
load(my_script.js);
在連線至主要 MongoDB 叢集的 MongoDB 殼層中,從資料庫讀取資料。
db.dogs.find();
db.cats.find();
啟用複本叢集的存取權
重要
複本叢集一律會在停用網路存取時建立。 建立複本叢集之後,您應該新增防火牆規則,或在復本叢集上建立私人端點,以啟用讀取作業。
從 [適用於 MongoDB 的 Azure Cosmos DB 虛擬核心主要叢集] 頁面,選取 [設定] 下的 [全域散發] 頁面。
在 [讀取複本] 欄位中選取 [叢集複本名稱],以在 Azure 入口網站中開啟讀取叢集複本屬性。
在MongoDB 虛擬核心複本叢集頁面的 [設定] 下,選取 [網路]。
在 [網路] 頁面上,選取 [新增目前的用戶端 IP 位址] 以使用 Azure 系統發現的電腦公用 IP 位址來建立防火牆規則。
儲存此設定之前,請先驗證您的 IP 位址。 在某些情況下,Azure 入口網站觀察到的 IP 位址,不同於用來存取網際網路和 Azure 服務的 IP 位址。 您也可以選取新增 0.0.0.0 - 255.255.255.255,不只允許您的 IP,也允許整個網際網路存取叢集。 在此情況下,用戶端仍然必須使用正確的使用者名稱和密碼登入,才能使用叢集。
選取工具列上的 [儲存] 來儲存設定。 更新的網路設定可能需要幾分鐘的時間才會生效。
線上至另一個區域中的讀取複本叢集並讀取資料
取得另一個區域中讀取叢集複本的連接字串。
在複本叢集提要欄位的 [叢集管理] 下,選取 [連接字串]。
複製 [連接字串] 欄位中的值。
重要
讀取複本叢集的連接字串包含您在複本建立期間選取的唯一複本叢集名稱。 讀取複本叢集的使用者名稱和密碼值一律與其主要叢集上的使用者名稱和密碼值相同。
在命令列中,使用 MongoDB 殼層使用其連接字串連線至讀取複本叢集。
mongosh "mongodb+srv://<user>@<cluster_replica_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"
從複本叢集讀取資料
在連線至複本叢集的 MongoDB 殼層中,從資料庫讀取資料。
db.dogs.find();
db.cats.find();
升階複本叢集
若要將叢集讀取複本升階至讀寫叢集,請遵循下列步驟:
在入口網站中選取 [讀取複本叢集]。
在叢集提要字段的 [叢集管理] 底下,選取 [全域散發]。
在 [ 全域散發] 頁面上,選取工具欄上的 [ 升階 ] 以起始讀取複本升階至讀寫叢集。
在 [升階叢集] 快顯視窗中,確認您了解複本升階的運作方式,然後選取 [升階]。 複本升階可能需要幾分鐘才能完成。
寫入至升階叢集複本
複本升階完成後,升階的複本即可供寫入使用,而先前的主要叢集會設定為唯讀。
使用命令列中的 MongoDB 殼層,使用其連接字串連線至升階複本叢集。
mongosh "mongodb+srv://<user>@<promoted_replica_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"
在 MongoDB 殼層工作階段中,執行寫入作業。
db.createCollection('foxes')
使用命令列中的 MongoDB 殼層,使用其連接字串連線至新複本叢集 (先前的主要叢集)。 您可以使用自我 連接字串 或全域讀寫 連接字串。
mongosh "mongodb+srv://<user>@<new_replica_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"
在 MongoDB 殼層中,確認新的複本上現在已停用寫入 (先前的主要叢集)。
db.createCollection('bears')