在10.235的內網3臺虛擬機上部署了mongodb的副本集,同網段中的虛擬機上部署的Springboot工程可正常訪問。
spring組態檔:
data:
mongodb:
uri: mongodb://iot:[email protected]:27017,10.235.10.11:27018,10.235.10.12:27019/db
后來由于某些原因,資料庫需要放到網閘后面,應用通過網閘訪問。
網閘配置資訊如下:
網閘 mongo
172.255.254.23:27017 10.235.10.10:27017
172.255.254.23:27018 10.235.10.10:27018
172.255.254.23:27019 10.235.10.10:27019
更改后spring組態檔:
data:
mongodb:
uri: mongodb://iot:[email protected]:27017,172.255.254.23:27018,172.255.254.23:27019/db
現在遇到的問題是應用鏈接mongo例外,日志資訊如下:

最終應用連接mongo使用的是真實的(網閘后)mongo服務ip地址,而不是網閘IP地址,所以超時:

但是給spring組態檔改為單節點可使用:
data:
mongodb:
uri: mongodb://iot:[email protected]:27017/db
uj5u.com熱心網友回復:
應該是副本集模式連接之后發現連接的ip和執行rs.status執行的結果不一致uj5u.com熱心網友回復:
有什么好的解決方法嗎?
uj5u.com熱心網友回復:
暫時用了一個很傻的方式保證高可用。如下的方式不是已副本集的方式啟動的:
data:
mongodb:
uri: mongodb://iot:[email protected]:27017/db
所以,動態寫了三個資料源uri: mongodb://iot:[email protected]:27017/db、uri: mongodb://iot:[email protected]:27018/db、uri: mongodb://iot:[email protected]:27019/db
然后程式判斷哪個是可用的。感覺好2B,就像是在寫BUG。
uj5u.com熱心網友回復:
我用python連接也報類似錯誤,降低pymongo驅動一個大版本就好了,3.8降到2.9uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
MongoDB副本集的連接方式有誤,正確的url格式是uj5u.com熱心網友回復:
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[database][?options]]
在副本集連接串后添加replicaSet=your replicaSet name
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/49907.html
標籤:MongoDB
上一篇:mysql 鏈表查詢不呼叫索引?
下一篇:如何把這兩張表合并?
