- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Mongoose 连接到副本集的常见连接字符串如下所示
var connection = mongoose.createConnection("mongodb://db_1:27017/client_test,mongodb://db_2:27017/client_test", {
replSet : { rs_name : "rs0", poolSize : 5, socketOptions : { keepAlive : 1 } }
}, function(err) {
if (err) { throw err; }
});
问题是如果两台主机之一关闭,则它将无法连接。如果您只指定一台主机,则不会有任何请求最终发送到辅助主机。
这是我对这一说法的证明。如果您指定一台主机,并设置副本集,以便有一个主 Node 和一个仲裁 Node ,然后执行诸如
之类的查询myApi.find({}).slaveOk().read("s").exec(function(err, docs) {
console.log(docs)
})
它将返回结果。好吧,由于我指定了“s”(辅助),因此该查询应该抛出错误,因为没有正在运行的辅助。此外,如果您使辅助数据库联机,然后执行db.currentOp(true)
,您将永远不会看到任何以这种方式发送的实际查询。
当您更改连接字符串以指定每个主机时,您将看到连接转到辅助主机。现在的困境是,因为您必须在连接字符串中指定附加主机,所以如果辅助主机离线,它将无法连接,我们现在已经失去了故障转移(或到副本集的整个点)
我无法确定这是否是我的配置错误、Mongoose 中的错误,还是我对副本集功能理解的概念缺陷。从一些文档来看,他们似乎指出从辅助 Node 读取基本上是一个坏主意,但这样做的原因通常是陈旧数据的问题。我的问题与过时的日期没有任何关系,我无法找到一种方法来设置系统,以便我可以在不损失故障转移能力的情况下向辅助 Node 进行查询。
最佳答案
1.connection字符串仅定义种子服务器,mongodb驱动程序尝试连接到这些服务器并获取replicaSet中其他服务器的信息(通过调用rs.status())。您可以拥有包含 5 个 Node 的副本集,但在连接字符串中仅指定一个 Node ,但如果连接字符串中的服务器可用,则驱动程序将能够找到其他四个 Node 。
2.我的建议是使用SecondaryPreferred
而不是仅仅Secondary
,这样,如果没有可用的辅助 Node ,请求就会向主 Node 完成。
关于node.js - 让 Mongoose 重新连接到 Node 并向辅助 Node 发送请求时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576443/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!