使用 rmongodb 连接到 MongoDB 副本集

Posted

技术标签:

【中文标题】使用 rmongodb 连接到 MongoDB 副本集【英文标题】:Connecting to MongoDB replica set with rmongodb 【发布时间】:2012-09-02 06:20:01 【问题描述】:

有没有人能够使用rmongodb 连接到 MongoDB 副本集?无论我如何配置mongo.create,我都会收到身份验证错误,即使通过mongo shell 连接时相同的主机/用户名/密码工作正常。

我的代码相当于:

> mongo.create(c("rs-1.mysite.com:12345","rs-2.mysite.com:12345"), "rsName", "user", "password", "my_db")
Unable to connect to replset
Authentication failed.

更新:

查看副本集中所有节点的日志,当我运行上面的代码时,我没有看到任何身份验证尝试。因此,这可能是一个rmongodb 错误。

【问题讨论】:

【参考方案1】:

正如 Sim 所说,rmongodb 1.0.3 does not resolve hostnames。

但是,可以从 rmongodb 连接到副本集,但需要注意以下几点:

您必须包含所有主机名(如果在种子主机列表中找不到主主机,rmongodb 将无法连接) 主机名必须作为 IP 提供 如果使用 admin 用户,您必须首先对 admin 数据库进行身份验证(这至少是 expected behaviour,但值得注意) 我只能通过提供replSet名称来使连接正常工作

所以我的工作连接字符串看起来像:

mongo.create(c("192.168.1.123:27017","192.168.1.124:27018","192.168.1.125:27017"),"","user","password", "thedb")

注意:我只用 MongoDB 2.2.0 测试过这个。

【讨论】:

不管怎样,我能够使用 URI 而不是 IP。 @SteveO7 这个答案来自几年前。从那以后增加了对副本的支持;-)【参考方案2】:

查看 C 源代码,rmongodb 似乎没有将主机名解析为 IP 地址。唯一可行的方法是将 IP 地址字符串传递给驱动程序...

通过传递 IP 地址和端口号,您可以连接到其中一个节点。我仍然无法让rmongodb 成功连接到副本集。

【讨论】:

您终于设法使用 rmongodb 使用副本集连接到 MongoDB 了吗?我遇到了同样的问题 我围绕rmongodb 构建了自己的驱动程序包装库。我还没来得及打包并添加到 CRAN。 我们可以连接hostName而不是IP地址吗? @RahulSaini 当然

以上是关于使用 rmongodb 连接到 MongoDB 副本集的主要内容,如果未能解决你的问题,请参考以下文章

使用 rmongodb 时,在 mongoDB 中看不到集合

使用 rmongodb 在 R 中运行高级 MongoDB 查询

R 可以连接到受 ssl 保护的 MongoDB 实例吗?

如何使用 rmongodb 将数据框插入 mongodb

MongoDB 和 rmongodb。获取查找的大小而不是返回所有结果

在 MongoDB (rmongodb) 中附加 BSON 数组