显然,我知道为什么要使用副本集。
但是,我对直接连接到 PRIMARY mongo 实例和连接到副本集之间的区别感到困惑。具体来说,如果我使用 Mongoose 从 Node.js 应用程序连接到 Mongo,是否有令人信服的理由使用 connectSet() 而不是 connect()?我认为 connect() 仍然会带来故障转移的好处,但也许这就是我错的地方......
我问的原因是,在 mongoose 中,connectSet() 方法似乎记录较少且使用良好。然而,我无法想象您不想连接到该集的场景,因为建议始终在 3x+ 副本集上运行 Mongo...
请您参考如下方法:
如果您仅连接到主服务器,那么您将获得故障转移(也就是说,如果主服务器发生故障,则会短暂暂停,直到选出新的主服务器)。副本集中的复制也使备份变得更加容易。缺点是所有写入和读取都转到单个主数据库(MongoDB 副本集一次只有一个主数据库),因此它可能成为瓶颈。
另一方面,允许连接到从属设备,可以让您扩展读取(而不是写入 - 这些仍然必须转到主服务器)。您的吞吐量不再受到运行主节点的机器规范的限制,而是可以分布在从属节点上。然而,你现在遇到了一个新的问题:读取过时;也就是说,您有可能从从属设备读取过时的数据。
现在认真考虑您的应用程序的行为方式。阅读量大吗?需要扩展多少?在某些情况下它可以处理陈旧的数据吗?
顺便说一句,副本集中至少有 3 个成员的目的是提供弹性和安全复制,而不是提供多个节点连接。如果您有 3 个节点并且丢失了一个,您仍然有足够的节点来选择新的主节点并且复制到备份节点。