首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当没有与主节点连接时从mongodb辅助节点读取

当没有与主节点连接时从mongodb辅助节点读取
EN

Stack Overflow用户
提问于 2017-03-03 08:51:17
回答 1查看 719关注 0票数 0

我们有带有3个实例的mongodb副本集,其中主节点位于数据中心D1中,次要节点位于数据中心D2中。我们在我们的设置中不需要任何故障转移选项,并且按照https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/中描述的那样配置它。

运行在同一数据中心D2中的辅助节点之上的应用程序"A“使用的是猫鼬,我们指定(具有”最近“或”次要“选项)从辅助节点读取数据。

我们正面对这些问题:

( 1)是否可以使"A“从特定的辅助节点中读取,而无需在连接配置中指定主mongoDB节点在哪里?

2)如果数据中心D1和D2之间的连接丢失,因此mongoDB主节点不再可访问/可见,那么如何使"A“应用程序仍然从辅助节点读取?据我所知,它不起作用,因为即使是"A“也被配置为从二级读取,在执行实际的读取操作之前,mongoDB仍然需要在主线程和次进程之间执行某种ping/套利操作。

3)是否有可能/建议在数据中心D2中使用一个应用程序,它将直接作为独立实例而不是副本集的一部分对mongodb副本集主实例执行写操作?

版本: mongodb 3.2.9,猫鼬4.5.9

EN

回答 1

Stack Overflow用户

发布于 2017-03-04 07:51:03

  1. 是的,带标签的读取首选项
  2. 使用D1和D2的网络分区,主节点将自动转移到那些D2节点中的一个,该节点是针对主节点的最“最新”节点。使用“优先设置”,您可以引导这个选择。只要3个节点中有2个节点处于上升状态,这2个节点中的一个就会被投票为主节点。

假设您有三个节点:

  • D1.N0
  • D2.N1
  • D2.N2

您应该排定优先级节点:

  • D1.N0.优先级=3
  • D2.N1.优先级=2
  • D2.N2.优先级=1

现在,只要D1是可达的,那么D1.N0就是主要的。当我们在D1和D2之间有网络分区时,D2.N1就成为主要的,D2.N2将作为次要。当网络分区结束时,D1.N0将通过读取D2.N1 opLog来“赶上”丢失的数据,并将再次成为主数据,而D2.N1将成为次要数据。

  1. 如果您有一个副本集,您必须始终写入副本集,而不是直接写到单个节点!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42574402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档