mongodb - 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.
我很困惑为什么 mongodb 首先切换了副本集主。我怀疑发生了错误,但肯定有可能,但在几个月的开发中,我没有遇到过一个“本地主机”错误。
现在,理想情况下,我将如何将 27017 切换回主节点。我该如何做到这一点,以便我现有的程序可以再次运行?
最终在生产中,处理这个问题的最佳方法是什么,假设查找一个 IP 地址的 DNS 条目并且由于故障转移而突然更改了主节点?
鉴于问题 3 涉及更多,我可以在我的开发环境中做些什么来更好地模拟生产环境。
我广泛使用 StackOverflow,但这是我的第一篇文章,所以感谢任何可以提供建议的人。
解决方案
我能够通过使用包含两个副本集的连接字符串来解决问题,但我不知道我需要这样做。比如对于java:
mongoClient = MongoClients.create("mongodb://localhost:27017,localhost:27027");
这也适用于 Mongo Compass,因此我能够连接到辅助数据库。我不知道您在尝试连接时需要提供所有副本集的路径,但回想起来,如果出现问题,这很有意义。
推荐阅读
- c# - 替换字符但提供正确的转义
- php - Firebase 通知,在后台或被杀死时不显示,但发送数据
- c - 整数类型显示 10 位 RGB 用于显示
- asp.net-mvc - 代表用户获取 Azure AD 令牌 - NetCore2
- google-api-dotnet-client - Google.Apis.Request.RequestsError - 无权访问此资源
- c# - 如何为 Assembly.LoadFrom 方法进行卸载
- python - 没有名为“matplotlib.finance”的模块,已弃用,且 mpl_finance 也未维护
- java - 更正应用程序的类路径,使其包含一个兼容的 org.axonframework.eventsourcing.eventstore.jpa 版本
- reactjs - Babel 无法为 React 的 render() 函数编译简单的 JSX - 使用 Visual Studio 代码
- python - 如何比较具有两个条件的两个列表?