MongoDB 複製:逐步副本集綜合指南

已發表: 2020-02-27

MongoDB 有很多功能。 而復制是其中一個突出的功能。 執行複制有很多優點。 使用 MongoDB,您可以處理包含數組對象和嵌入式數組的大型數據集。 當您使用數組對象和嵌入式數組時,您應該保持快速的數據處理速度。 閱讀有關 MongoDB 真實世界用例的信息,了解它的重要性。

為了保持該過程的快速速度,您需要確保您的數據可用性仍然很高。 確保高數據可用性的一個好方法是執行複制。 複製還有助於進行備份並避免數據丟失。

在本文中,您將了解 MongoDB 中的複制是什麼,它是如何工作的,以及如何做到這一點。 您還將了解在 MongoDB 中執行複制的優勢,以及如果您在執行此任務時遇到任何錯誤,您可以如何修復它們。

讓我們開始吧。

目錄

什麼是複制?

使用服務器時,您需要在多個 MongoDB 服務器上同步數據。 複製過程可以在這方面為您提供幫助。 它確保您將相同的數據存儲在不同的服務器上。

複製增強了數據可用性。 數據丟失是組織的一個重要問題,複製可以幫助您減輕同樣的擔憂。 憑藉高數據可用性和冗餘性,即使您丟失了一台服務器,您的數據庫也能保持安全。 如果唯一存儲數據庫的服務器出現故障,您將無法訪問您的數據庫。

複製可確保您不會遇到這些問題。 MongoDB 複製也是提高數據可訪問性的有效方法。 擁有額外的數據副本總是有益的。 複製還可以減少服務器維護的停機時間。

您可以選擇將整個服務器專用於報告、備份或災難恢復。

MongoDB 中有很多複制的優點。 讓我們找出來。

複製的好處

以下是複製成為一種普遍做法的一些原因:

  • 複製可幫助您在發生災難時恢復數據。 您將擁有數據備份,您可以從中快速恢復丟失的文件。
  • 您的數據始終可用。 這意味著複製可確保您擁有 24×7 的可訪問性。
  • 如果您定期執行複制,服務器維護的停機時間會減少。
  • 複製增強了您的閱讀可擴展性。 擁有多個副本有助於擴展數據的讀取。

除了我們在這裡討論的好處之外,複製也有一個缺點。 由於您將存儲數據的副本,因此您需要有更多的存儲空間。 雖然這不是一個重大問題,但值得注意。 您可能需要增加服務器的存儲容量。

MongoDB 複製的工作原理

要執行複制,您需要使用 MongoDB 副本集。 一組託管相同數據的 mongod 實例稱為副本集。 一個副本集包含一個主節點。 主節點接收所有的寫操作。

一個副本集只有一個主節點。 其他實例從集合的主節點應用功能,包括輔助節點。 這樣,它們都具有相同的數據集。 以下是 MongoDB 副本集的工作方式:

  • 一個副本集至少有 3 個節點
  • 副本集的一個節點是主節點。 組中存在的所有其他節點都是輔助節點。
  • 在副本集中,數據從主節點複製到輔助節點
  • 如果發生自動故障轉移(或在維護期間),則會進行一次選舉以確定主節點。 然後,節點選擇一個新的主節點。

現在我們已經討論了 MongoDB 中復制的基本概念,我們可以從它的過程開始。

第 1 步:添加第一個成員

您現在知道要執行複制,您需要副本集。 因此,MongoDB 中復制的第一步是創建其實例的副本集。 假設您有三台服務器,服務器 X、服務器 Y 和服務器 Z。在這三台服務器中,服務器 X 是主服務器,服務器 X 和 Y 是輔助服務器。

您已經知道從主服務器到輔助服務器的複制發生。 首先,您必須確保所有 mongod 實例(您將添加到副本集中)都安裝在不同的服務器上。 這樣,即使其中一個出現故障,您也將擁有多台服務器可用,因此,您將擁有其他 MongoDB 實例。

然後,您應該確保所有實例都可以連接。 從服務器 X 發出給定的命令:

mongo –host 服務器Y –port 27017

mongo –host ServerZ –port 27017

從服務器 X 發出它們後,從其他剩餘的服務器發出它們。 現在使用 replSet 選項啟動第一個實例。 replSet 選項為您提供了將參與此過程的所有服務器的集合。

mongo –replSet“副本A”

這裡,ReplicaA 是副本集的名稱。 您可以選擇您喜歡的任何名稱,但我們將在此示例中使用此術語。 在將一台服務器添加到副本集後,您必鬚髮出命令 rs.initiate() 來啟動副本集。 之後,您應該驗證您的副本集。

為此,請發出命令 rs.conf()。 此步驟將幫助您確保您的副本設置最佳且沒有任何問題。

閱讀:MongoDB 面試問答

步驟 2:添加輔助服務器

添加主服務器後,我們現在可以專注於添加第二個服務器。 為此,您可以使用 rs.add 命令。 您必須在此命令中輸入要添加的輔助服務器的名稱。 它會自動添加它們。

在我們的示例中,我們有服務器 X、服務器 Y 和服務器 Z。在這三台服務器中,服務器 X 是副本集中的主要服務器。 我們需要將剩餘的服務器添加為輔助服務器。 為此,我們將發出以下命令:

rs.add(“服務器Y”)

rs.add(“ServerZ”)

就是這樣。 現在您已經成功地將兩個輔助節點添加到您的副本集中。

第 3 步:重新配置(或刪除)

建立和添加服務器只是硬幣的一方面。 您可能還需要從配置組中刪除服務器。 為此,您必須使用 rs.remove 命令。

在刪除服務器之前,您需要將其關閉。 使用 mongo shell 中的 db.shutdownserver 命令關閉所需的服務器。 之後,連接到主服務器並使用 rs.remove 刪除您需要刪除的服務器。 此命令將從副本集中刪除所需的服務器。

因此,如果您的副本集中有 Server X、Server Y 和 Server Z,您需要從其中刪除 Server Z,您將使用以下命令:

rs.remove(“ServerZ”)

如何修復副本集錯誤

在 MongoDB 中執行複制時,您可能會遇到一些錯誤。 要解決這些錯誤,您應該借助以下方法:

  • 首先,確保所有 mongo 實例都已連接。 因此,如果您有三台服務器,即服務器 X、服務器 Y 和服務器 Z。在這三台服務器中,服務器 X 是主要服務器。 您將發出以下命令:

mongo -host 服務器Y -port 27017

mongo -host ServerZ -port 27017

運行上述兩個命令將幫助您確保它們已連接。

現在,運行狀態命令,即 rs.status。 rs.status 命令為您提供副本集的狀態。 副本集的成員相互發送一些消息。 我們稱這些消息為“心跳”。 我們稱它們為心跳是因為這些消息表明該成員正在工作(即活著)。

rs.status 命令檢查這些消息並告訴您副本集成員是否出現任何問題。

  • 您可以檢查 oplog。 在 MongoDB 中,oplog 存儲您在數據庫上執行的寫入歷史記錄。 MongoDB 在 Oplog 的幫助下將寫入複製到副本集的所有其他成員。
  • 您可以在連接到所需成員後使用 rs.printReplicationinfo 命令檢查 Oplog。 rs.printReplicationinfo 命令將向您顯示 Oplog 的大小及其在滿之前持有事務的限制。

就是這樣。 現在您知道如何解決 MongoDB 副本集的問題了。 有了這些知識,您就可以開始在 MongoDB 中執行複製而不會遇到任何麻煩。

最後的想法

複製只是您可以在 MongoDB 中執行的眾多操作之一。 學習使用這個數據庫程序並不容易。 但是,通過適當的練習和資源,您可以很快熟練使用它。

如果您想了解更多關於 MongoDB 和其中存在的各種功能的信息,請訪問我們的博客。 你會在那裡找到很多有用的文章,可以幫助你擴展關於這個主題的知識。

如果您有興趣了解有關大數據的更多信息,請查看我們的 PG 大數據軟件開發專業文憑課程,該課程專為在職專業人士設計,提供 7 多個案例研究和項目,涵蓋 14 種編程語言和工具,實用的動手操作研討會,超過 400 小時的嚴格學習和頂級公司的就業幫助。

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

提升自己並為未來做好準備

超過 400 小時的學習時間。 14 種語言和工具。 IIIT-B 校友身份。
IIIT Bangalore 大數據高級證書課程