我的NodeJS客戶端能夠根據需要連接到MongoDB主服務器並與之交互。來自NodeJS的MongoDB複製連接
我用下面的代碼來構建一個服務器對象
var dbServer = new Server(
host, // primary server IP address
port,
{
auto_reconnect: true,
poolSize: poolSize
});
和下面的代碼來創建數據庫對象:
var db = new Db(
'MyDB',
dbServer,
{ w: 1 }
);
我的印象是,當主下山,客戶會自動發現它現在需要與其中一位副局長談話,他們將被選爲主要委員。
但是,當我手動殺死主服務器時,其中一臺輔助服務器確實成爲主服務器(從它的mongo shell可以觀察到,並且它現在響應mongo shell命令),但客戶端沒有自動與它交談。如何配置NodeJS服務器自動切換到輔助?
難道,我需要指定所有3個服務器地址?但這似乎並不是一個好的解決方案,因爲一旦主要網絡恢復正常,它的IP地址將與原來的IP地址不同。
我覺得我失去了一些東西很基本的,請賜教:)
謝謝你, 加里
尼爾,感謝您的詳細解釋。我根據您的建議進行了更改,現在客戶端在主服務器出現故障時切換到次服務器。如果您不介意,我有幾個問題需要注意:1.當我殺死2臺數據庫服務器時,只留下一臺服務器,客戶端無法再連接,您能否介紹一下爲什麼?另外,我在AWS EC2上託管客戶端服務器和mongo服務器,所以我想我可以分配/分配給我一個內部IP地址池,當我重新啓動發生故障的服務器時,可以爲其分配IP地址。 –
和關於auto_reconnect,因爲客戶端和數據庫服務器都在AWS內部,我真的需要擔心客戶端無法連接到數據庫服務器嗎?我想,這隻會在所有副本成員死亡或AWS有內部網絡問題時纔會發生。再次感謝您的反饋。 –
@GaryKipnis這兩個有點過於寬泛,但殺害兩個實例的一般情況導致我相信其餘成員不再形成多數,因此沒有「主要」左派。其次,始終認爲連接可以消失。即使AWS在同一地區,您也無法確定實例之間是否存在網絡分區,或者即使它們實際上沒有確定的計劃保證位於同一數據中心。您可能有更適合複製的[dba.stackexchange.com](http://dba.stackexchange.com)問題。 –