首页 > 解决方案 > Mongodb localhost:27017 副本集切换到辅助 localhost:27027

问题描述

我对 mongodb 还很陌生,才几个月。我刚刚转换了我的 mongodb 数据库以支持辅助副本集,以便我可以查看集合。我只添加了一个辅助节点,在阅读后我猜现在可能不是最好的,你应该创建一个奇数,但它是一台机器上的本地主机。我仔细阅读了说明,在运行我的程序半天后,复制工作正常。但由于某种原因,最近它已将端口 27017 的数据库从主数据库切换到辅助数据库。主要以前在 localhost:27017 上,辅助在 localhost:27027 上。现在我的正常程序无法连接到 localhost:27017 没有错误,我认为这是因为它现在是辅助副本集,而它以前是主副本,假设您只能连接到主副本。这是错误消息。

Exception in thread "main" com.mongodb.MongoNotPrimaryException: Command failed with error 10107 (NotWritablePrimary): 'not master' on server localhost:27017.
  1. 我很困惑为什么 mongodb 首先切换了副本集主。我怀疑发生了错误,但肯定有可能,但在几个月的开发中,我没有遇到过一个“本地主机”错误。

  2. 现在,理想情况下,我将如何将 27017 切换回主节点。我该如何做到这一点,以便我现有的程序可以再次运行?

  3. 最终在生产中,处理这个问题的最佳方法是什么,假设查找一个 IP 地址的 DNS 条目并且由于故障转移而突然更改了主节点?

  4. 鉴于问题 3 涉及更多,我可以在我的开发环境中做些什么来更好地模拟生产环境。

我广泛使用 StackOverflow,但这是我的第一篇文章,所以感谢任何可以提供建议的人。

标签: mongodblocalhostreplication

解决方案


我能够通过使用包含两个副本集的连接字符串来解决问题,但我不知道我需要这样做。比如对于java:

mongoClient = MongoClients.create("mongodb://localhost:27017,localhost:27027");

这也适用于 Mongo Compass,因此我能够连接到辅助数据库。我不知道您在尝试连接时需要提供所有副本集的路径,但回想起来,如果出现问题,这很有意义。


推荐阅读