我们已经为以下节点设置了 3 节点复制集配置MongoDB我想知道在主节点切换期间读/写操作会发生什么。更明确地说,客户端向主节点发出的读/写操作很少。主节点切换也已启动。
- 这些读/写操作会发生什么?
- MongoDB 是否确保在主干下台并启动选举过程之前满足这些请求?
- 在选举过程中,来自客户端的新的读/写请求会发生什么?
- MongoDB 的原生 nodejs 驱动程序是否负责自动客户端故障转移?此外,它在切换过程中如何处理新的读/写请求?
答案1
a) 它们会明确失败。处理它是您的责任。我倾向于在短暂的宽限期后重试该操作,如果异常/错误表明该操作由于通信故障而失败。
b) 隐式。发出降级命令后,有 10 秒的宽限期,在此期间不接受任何写入操作。在此期间,主服务器基本上会等待辅助服务器赶上进度(无论是否有必要)。对于读取操作:如果它们在宽限期内完成,则一切正常。否则,服务器将关闭连接,导致空闲客户端出现错误。
c) 驱动程序知道它们已连接到副本集。如果主服务器停机,驱动程序会注意到。没有主服务器 = 没有写入操作。在没有主服务器的情况下发出的任何写入操作都将失败并显示相应的消息。根据读取,这取决于您的阅读偏好。primary
在没有主节点的情况下,带有 的读取偏好显然会失败,而其他所有读取偏好都会成功。我通常使用默认读取偏好 发出请求,primary
当由于缺少主节点而导致请求失败时,我会重新发出带有 的读取偏好的查询secondaryPreferred
(在极少数情况下,主节点启动,而第一个辅助节点在处理原始错误时失败)。
d) 我不是节点专家,但节点驱动程序由 Inc 维护,因此可以安全地假设它是副本集感知的并且遵守如上所述的标准。