我们有mongodb副本集,包含3个实例,其中Primary位于数据中心D1,辅助节点位于数据中心D2。我们的设置中不需要任何故障转移选项,并按https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/所述进行配置。
申请" A"在同一数据中心D2内的辅助节点上运行正在使用mongoose,我们指定(使用选项"最近"或"辅助")来从辅助节点读取数据。
我们正面临着这些问题:
1)是否可以制作" A"从特定的辅助节点读取,而不在连接配置中指定哪个是主mongoDB节点?
2)我们如何制作" A"应用程序仍然从辅助节点读取,如果数据中心D1和D2之间的连接丢失,那么mongoDB主节点不再可访问/可见?据我所知它不起作用,因为即使是" A"配置为从辅助节点读取,mongoDB仍然需要在主节点和辅助节点之间执行一种ping /仲裁,然后才能执行实际的读操作。
3)是否可以/建议在数据中心D2中安装一个应用程序,它将直接作为独立实例对mongodb副本集主实例执行写操作,而不是作为副本集的一部分?
版本: mongodb 3.2.9,mongoose 4.5.9
答案 0 :(得分:1)
对于具有D1和D2的网络分区,主要会自动转移到其中一个D2节点,即对主节点最“最新”的节点。使用"priority settings",您可以引导此选择。只要3个节点中有2个节点上升,其中一个节点就被选为主节点。
让我们假设您有三个节点:
你应该prioritise节点:
现在,只要D1可以到达,那么D1.N0就是主要的。当我们在D1和D2之间有网络分区时,D2.N1变为主要,并且D2.N2将保持为次要。当网络分区结束时,D1.N0将通过读取D2.N1 opLog来“赶上”丢失的数据,并将再次成为主数据库,D2.N1将成为辅助数据。