如果仅配置了一个主机,Rails是否会自动找出MongoDB副本集中的主数据库?

时间:2019-05-09 15:45:11

标签: ruby-on-rails mongodb docker replicaset

这是场景:

节点1:

  • 启动docker容器monogid.yml 只有一个主机:mongo:27017

  • Mongo docker容器(名为“ mongo”),配置为在Node2中使用mongo和仲裁器设置的副本集。

节点2:

  • 启动docker容器monogid.yml 只有一个主机:mongo:27017

  • Mongo docker容器(名为“ mongo”),配置为在Node1中具有mongo和仲裁器的副本集。

我知道mongoid配置应该在副本集中有一组主机,而不是只有一个,

但是,当测试上述内容时,我可以看到,如果在 Node2 中访问Web,则 Node1 中的mongo就是负载,即使该主机未在Node2配置中配置。

那么,我可以像这样在两个节点上保留蒙古包的配置吗?

真的需要在配置中使用主机列表吗?还是Rails中的驱动程序会自行解决?

请让我知道更多详细信息是否有帮助或解释不清楚。

更新:网络负载既是读写负载。

1 个答案:

答案 0 :(得分:0)

大多数驱动程序在连接时将调用db.isMaster(),它将返回副本集中的一组节点。这使驱动程序可以发现其他节点并重新连接到主节点。通常,您应该列出所有已知的节点,以防您暂时种下的节点。由于已经配置了副本集,因此必须已经为所有节点指定了地址,那么为什么不只在连接URI中列出它呢? 提示:如果无法为所有主机设置正确的DNS引用,则可以在/ etc / hosts中使用别名