簡體   English   中英

MongoDb Replica Set write concern issues on Secondary IP, while Primary IP is Shutdown

[英]MongoDb Replica Set write concern issues on Secondary IP, while Primary IP is Shutdown

我為我的 MongoDB 副本集使用三個節點,一個作為主節點,一個作為輔助節點,一個作為仲裁節點。 我在 Golang 中使用以下連接字符串來連接 MongoDB。

opts = options.Client().ApplyURI("mongodb://" + ipPort + "," + secIpPort + "/?replicaSet=" + repSetName).SetConnectTimeout(5 * time.Second).SetAuth(serverAuth).SetWriteConcern(writeconcern.New(writeconcern.WMajority()))

Ip用來做連接,ipPort=192.168.1.237 secipPort=192.168.1.239

我已將默認 RW 問題設置如下,

db.adminCommand({ "setDefaultRWConcern" : 1, "defaultWriteConcern" : { "w" : "majority", "j":true, "wtimeout" : 5000 }, writeConcern: { "w" : "majority", "j":true, "wtimeout" : 5000 }, })

問題:

當連接串的第一個IP(192.168.1.237)的MongoDb服務關閉時,副IP(192.168.1.239)很好的執行了所有的讀操作。 但不執行寫操作。我該如何處理這個問題? 如果連接字符串的第一個 IP 掛了,從 IP/節點應該可以同時執行讀寫操作。

我該如何處理這個問題? 如果連接字符串的第一個 IP 掛了,從 IP/節點應該可以同時執行讀寫操作。

原因是writeConcern: { w: "majority" }

在 MongoDB 中,您有兩個多數。 表決多數和書面多數。 你可以用rs.status()詢問他們

在 PRIMARY-SECONDAY-ARBITER (PSA) 副本集中,它應該如下所示:

"majorityVoteCount" : 2
"writeMajorityCount" : 2
"votingMembersCount" : 3
"writableVotingMembersCount" : 2

如果 SECONDARY 出現故障,那么您有 2 個投票成員占多數。 他們仍然可以選舉一個新的 PRIMARY。

但是,只剩下 1 個寫作成員,2 個中有 1 個不是多數。 因此除非失蹤成員再次回來,否則無法使用{ w: "majority" }進行操作。

一些背景信息可以在這里找到: MongoClient to connect to multiple hosts to handle failover?

當MongoDB副本集的primary節點宕機時,secondary節點應該接替成為新的primary,繼續進行讀寫操作。 但是,在您的情況下,當主節點關閉時,輔助節點似乎無法執行寫操作。

這有幾個可能的原因:

副本集配置不正確。 確保副本集名稱和副本集中的節點列表與 MongoDB 中配置的相匹配。

輔助節點無法達到法定數量的節點來執行寫入操作。 在您的情況下,您使用的是不存儲數據且無法對寫入操作進行投票的仲裁節點。 您可能需要考慮從副本集中刪除仲裁節點或添加另一個輔助節點以確保一定數量的節點始終可用於寫入操作。

寫入問題配置不正確。 在您的代碼中,您將寫入關注設置為“多數”和“j=true”。 write concern "j=true" 表示寫操作僅在寫操作寫入磁盤日志后返回。 確保在 MongoDB 上啟用了日志功能並且磁盤空間足夠。

節點之間的網絡連接不穩定。 確保節點可以相互通信,並且不存在阻止節點通信的防火牆或其他網絡問題。

輔助節點與主節點不同步。 確保輔助節點正在趕上主節點的 oplog,並且輔助節點處於健康狀態 state。

建議查看MongoDB日志,運行命令“rs.status()”查看副本集的state是否有報錯信息。 也可以嘗試直接連接secondary節點,通過命令“rs.status()”查看副本集的state,查看副本集的state,看是否有報錯信息。

如果問題仍然存在,您可能需要考慮添加另一個輔助節點以確保一定數量的節點始終可用於寫入操作。

暫無
暫無

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

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