mongodb 故障转移连接
mongodb failover connection
我有一个连接到 mongodb 的 nodejs 应用程序。
Mongodb 允许副本集客户端连接提供一定程度的弹性。
例如“mongodb://localhost:50000,localhost:50001/myproject?replicaSet=foo
”,客户端首先连接到 localhost@50000,如果连接失败,它会切换到 localhost@50001。
这很好,但是如果当应用程序启动时,如果两个 mongo 之一死了,那么应用程序就会死掉 - 无法连接错误。
我能想到的唯一解决方案是重新格式化 url 以排除不活动的实例,但我想避免这种情况...
有什么想法吗?
谢谢
当您有奇数个服务器时,Replicaset 工作正常,因为 MongoDB ReplicaSet 使用节点之间的选举来定义哪个服务器将是 "primary"。
您可以在您的 ReplicaSet 中添加一个新节点,仅用于投票。它被称为"ARBITER"。
您可以在此页面上了解有关 ReplicaSet Elections 的更多信息https://docs.mongodb.com/manual/core/replica-set-elections/#replica-set-elections。
正如 Rafael 所提到的,副本集需要奇数个成员才能在某些成员离线时正常运行。 Replica Set Elections docs page中有更多详细信息,但最相关的是:
If a majority of the replica set is inaccessible or unavailable to the current primary, the primary will step down and become a secondary. The replica set cannot accept writes after this occurs, but remaining members can continue to serve read queries if such queries are configured to run on secondaries.
默认情况下,节点驱动程序需要主节点在线才能连接到副本集,并且当您尝试连接到没有主节点的副本集时,将输出您观察到的错误。
可以通过将 connectWithNoPrimary
设置为 true
来更改此默认行为。但是,为了能够进行查询,您还应该设置正确的 readPreference
setting(也默认为 Primary)。例如:
var MongoClient = require('mongodb').MongoClient
conn = MongoClient.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/test',
{
replicaSet: 'replset',
connectWithNoPrimary: true,
readPreference: 'primaryPreferred'
}).catch(console.log)
有关连接选项的更多信息,请参阅 Node Driver URI Connection Settings page
我有一个连接到 mongodb 的 nodejs 应用程序。
Mongodb 允许副本集客户端连接提供一定程度的弹性。
例如“mongodb://localhost:50000,localhost:50001/myproject?replicaSet=foo
”,客户端首先连接到 localhost@50000,如果连接失败,它会切换到 localhost@50001。
这很好,但是如果当应用程序启动时,如果两个 mongo 之一死了,那么应用程序就会死掉 - 无法连接错误。
我能想到的唯一解决方案是重新格式化 url 以排除不活动的实例,但我想避免这种情况...
有什么想法吗?
谢谢
当您有奇数个服务器时,Replicaset 工作正常,因为 MongoDB ReplicaSet 使用节点之间的选举来定义哪个服务器将是 "primary"。
您可以在您的 ReplicaSet 中添加一个新节点,仅用于投票。它被称为"ARBITER"。
您可以在此页面上了解有关 ReplicaSet Elections 的更多信息https://docs.mongodb.com/manual/core/replica-set-elections/#replica-set-elections。
正如 Rafael 所提到的,副本集需要奇数个成员才能在某些成员离线时正常运行。 Replica Set Elections docs page中有更多详细信息,但最相关的是:
If a majority of the replica set is inaccessible or unavailable to the current primary, the primary will step down and become a secondary. The replica set cannot accept writes after this occurs, but remaining members can continue to serve read queries if such queries are configured to run on secondaries.
默认情况下,节点驱动程序需要主节点在线才能连接到副本集,并且当您尝试连接到没有主节点的副本集时,将输出您观察到的错误。
可以通过将 connectWithNoPrimary
设置为 true
来更改此默认行为。但是,为了能够进行查询,您还应该设置正确的 readPreference
setting(也默认为 Primary)。例如:
var MongoClient = require('mongodb').MongoClient
conn = MongoClient.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/test',
{
replicaSet: 'replset',
connectWithNoPrimary: true,
readPreference: 'primaryPreferred'
}).catch(console.log)
有关连接选项的更多信息,请参阅 Node Driver URI Connection Settings page