簡體   English   中英

與主節點無連接時從mongodb輔助節點讀取

[英]Read from mongodb secondary node when no connection with primary

我們有3個實例的mongodb副本集,其中主節點位於數據中心D1中,輔助節點位於數據中心D2中。 我們在設置中不需要任何故障轉移選項,並按照https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/中的說明進行配置。

在同一數據中心D2中的輔助節點之上運行的應用程序“ A”使用貓鼬,並且我們指定了(使用選項“ nearest”或“ secondary”)從輔助節點讀取數據。

我們面臨以下問題:

1)是否可以使“ A”從特定的輔助節點讀取,而無需在連接配置中指定主mongoDB節點在哪里?

2)如果數據中心D1和D2之間的連接丟失,那么mongoDB主節點不再可訪問/可見,如何使“ A”應用程序仍從輔助節點讀取? 據我了解,由於即使將“ A”配置為從輔助節點讀取,它也不起作用,mongoDB仍需要在主要和輔助節點之間執行某種ping /套利操作,然后才能執行實際的讀取操作。

3)是否有可能/建議在數據中心D2中有一個應用程序,該應用程序將直接作為獨立實例而不是副本集的一部分對mongodb副本集主實例執行寫操作?

版本:mongodb 3.2.9,mongoose 4.5.9

  1. 是的, 帶有標簽的閱讀首選項

  2. 對於具有D1和D2的網絡分區,主節點將自動轉移到那些D2節點之一,該節點對主節點而言是“最新”的。 使用“優先級設置”,您可以引導此選擇。 只要3個節點中有2個處於啟用狀態,則將2個節點中的一個投票為主要節點。

假設您有三個節點:

  • D1.N0
  • D2.N1
  • D2.N2

您應該確定節點的優先級

  • D1.N0.priority = 3
  • D2.N1.priority = 2
  • D2.N2.priority = 1

現在,只要D1可達,則D1.N0是主要的。 當我們在D1和D2之間進行網絡分區時,D2.N1成為主節點,而D2.N2保持為次節點。 網絡分區結束后,D1.N0將通過讀取D2.N1 opLog來“追趕”丟失的數據,並將再次成為主要數據,而D2.N1將成為次要數據。

  1. 如果您有副本集,則必須始終寫入副本集,並且永遠不要直接寫入單個節點!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM