我在 Azure 上使用 MongoDB 和复制(bitnami)。
我创建了三个 mongodb 节点(1 个主节点、1 个辅助节点和 1 个仲裁节点)。
当我尝试连接 MongoDB 连接 URI
(mongodb://username:password@ip01:27017,ip02:27017,ip03:27017/?readPreference=primary&replicaSet=replicaset)
时,它给出了类似 pymongo.errors.ServerSelectionTimeoutError: 10.0.0.5:27017: timed out,10.0.0.6:27017: [Errno 113] No route to host,10.0.0.4:27017: timed out,10.0.0.7:27017: timed out
connectionString = "mongodb://root:Root123@*.*.*.*:27017,*.*.*.*:27017,*.*.*.*:27017/?replicaSet=replicaset"
client= MongoClient(connectionString)
db = client['mongo_collection']
data = db.xyz.find({"x": 10})
for d in data:
print d
根据您提供的官方文件。
确保应用程序能够连接到每个集群节点 使用其公共或私有 IP 地址。为了确保连接,您 有两个选择:
将应用程序托管在与 MongoDB 集群相同的网络中,以便 它可以使用其私有 IP 地址来寻址每个节点。这是 生产环境的推荐配置。主办 在不同网络中的应用程序并分配公共IP地址, 使用适当的防火墙规则,到集群节点(如果尚未 默认分配),以便应用程序可以寻址每个节点 使用其公共 IP 地址。不推荐此配置 生产环境。
因此,如果您在同一个 Azure 虚拟网络中进行测试,则可以使用私有 IP(例如 10.0.0.6)。我在我的实验室进行测试,我在这个example中使用python。
import pymongo
client = pymongo.MongoClient("mongodb://root:<passsword>@10.0.0.6:27017,10.0.0.4:27017,10.0.0.5:27017/?replicaSet=replicaset")
db = client.test
>>> db.name
u'test'
>>> db.my_collection
Collection(Database(MongoClient(host=['10.0.0.5:27017', '10.0.0.6:27017', '10.0.0.4:27017'], document_class=dict, tz_aware=False, connect=True, replicaset='replicaset'), u'test'), u'my_collection')
>>> db.my_collection.insert_one({"x": 10}).inserted_id
ObjectId('5987cc0b9e90d52dd1860ac3')
更新:
如果你想连接你的mongodb节点,你应该需要ping私有IP。这是一种设计行为。
如果您想从应用程序或本地使用 mongodb,则需要创建站点到站点 VPN 连接或点到站点 VPN 连接。
如果您使用公共 IP 进行连接,并在连接字符串中添加了“replicaSet”,但仍然遇到连接错误,请尝试添加
directConnection=true