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

Node.js 当与主节点没有连接时从mongodb辅助节点读取,node.js,mongodb,mongoose,database-replication,mongodb-replica-set,Node.js,Mongodb,Mongoose,Database Replication,Mongodb Replica Set,我们有3个实例的mongodb副本集,其中主节点位于数据中心D1,辅助节点位于数据中心D2。我们的设置中不需要任何故障切换选项,并按照中所述进行了配置 在同一数据中心D2内的辅助节点上运行的应用程序“A”正在使用mongoose,我们指定(使用选项“最近”或“辅助”)从辅助节点读取数据 我们面临这些问题: 1) 是否可以使“A”从特定的辅助节点读取,而不在连接配置中指定主mongoDB节点在哪里 2) 如果数据中心D1和D2之间的连接丢失,因此mongoDB主节点不再可访问/可见,我们如何使“A

我们有3个实例的mongodb副本集,其中主节点位于数据中心D1,辅助节点位于数据中心D2。我们的设置中不需要任何故障切换选项,并按照中所述进行了配置

在同一数据中心D2内的辅助节点上运行的应用程序“A”正在使用mongoose,我们指定(使用选项“最近”或“辅助”)从辅助节点读取数据

我们面临这些问题:

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

2) 如果数据中心D1和D2之间的连接丢失,因此mongoDB主节点不再可访问/可见,我们如何使“A”应用程序仍然从辅助节点读取?据我所知,它不起作用,因为即使将“A”配置为从辅助设备读取,mongoDB仍然需要在主设备和辅助设备之间执行某种ping/套利操作,然后才能执行实际的读取操作

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

版本: mongodb 3.2.9,mongoose 4.5.9

  • 使用带有D1和D2的网络分区,主节点将自动传输到D2节点中的一个节点,即与主节点相比最“最新”的节点。使用此选项,您可以控制此选择。只要三个节点中有两个节点处于运行状态,其中一个节点将被选为主节点

  • 让我们假设您有三个节点:

    • 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将成为辅助分区

  • 如果您有一个副本集,则必须始终写入副本集,而不能直接写入单个节点