使用 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 查询