1 回答

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊
為什么 mongo 驅(qū)動程序在 localhost 上尋找,如果我正在設(shè)置 mongoDB 服務(wù)器的地址。
當(dāng)mongo-go-driver的客戶端連接到MongoDB部署時,它將執(zhí)行服務(wù)器發(fā)現(xiàn)和監(jiān)控以發(fā)現(xiàn)一個或多個服務(wù)器(MongoDB本質(zhì)上是一個分布式數(shù)據(jù)庫)。早期步驟之一是通過在所有服務(wù)器上調(diào)用?isMaster 命令來開始監(jiān)視拓?fù)?。根?jù)isMaster的輸出,客戶端將嘗試聯(lián)系這些服務(wù)器。對于副本集(您的情況),客戶端會努力連接到主服務(wù)器(從?isMaster.primary)。
但是,主機名地址不是可從客戶端計算機解析的完全限定域名 (FQDN)??蛻舳说挠嬎銠C嘗試連接到定義為副本集的主副本集,因此無法建立連接。此外,這就是為什么您會看到消息狀態(tài),其中 但是 .即使在能夠選擇要執(zhí)行命令的服務(wù)器 (localhost
current topology: Type: Unknown
State: Connected
ping
)
您可以通過為副本集配置中的成員字段的值設(shè)置可解析的主機名來解決此問題。此外,如果可能,請使用邏輯 DNS 主機名而不是 IP 地址,因為這可以避免由于 IP 地址更改而導(dǎo)致的配置更改。
您可以使用?rs.reconfig()?更改副本集主機名,即:
cfg?=?rs.conf() cfg.members[1].host?=?"<RESOLVABLE?HOSTNAME>:<PORT?NUMBER>" rs.reconfig(cfg)
在您的情況下,只有一個副本集成員,這很簡單。但是,如果您處于生產(chǎn)模式并且有多個成員,則可以按照更改副本集中的主機名中概述的步驟進(jìn)行操作,其中有兩個選項:
在不中斷可用性的情況下更改主機名
同時更改主機名(一次性)
說了上面的所有解釋, 或者,由于副本集部署只有一臺服務(wù)器(開發(fā)模式),因此可以通過?ClientOptions.SetDirect()?將連接模式設(shè)置為它指定客戶端是否應(yīng)直接連接到服務(wù)器,而不是自動發(fā)現(xiàn)群集中的其他服務(wù)器(盡管這意味著您沒有冗余),即:direct
opts?:=?options.ClientOptions{?ConnectTimeout:?&timeoutVariable} opts.SetDirect(true) opts.ApplyURI(addr) client,?err?:=?mongo.Connect(connect.TODO(),?&opts)
- 1 回答
- 0 關(guān)注
- 168 瀏覽
添加回答
舉報