Node.js mongodb本机驱动程序似乎忽略了readPreference=nearest
我正在尝试在3个不同的数据中心设置mongodb副本集。所以我有3台服务器通过VPN连接到一个专用网络。假设它们是: 服务器A:10.*.1(我国的数据中心,二级)Node.js mongodb本机驱动程序似乎忽略了readPreference=nearest,node.js,mongodb,Node.js,Mongodb,我正在尝试在3个不同的数据中心设置mongodb副本集。所以我有3台服务器通过VPN连接到一个专用网络。假设它们是: 服务器A:10.*.1(我国的数据中心,二级) 服务器B:10.*.88(我的办公室,主要) 服务器C:10.*.10(海外数据中心,二级) 我的程序也部署在3台数据服务器上。我还将连接字符串中的readPreference设置为nearest,以获得最佳性能。然而,我仍然发现服务器A上的程序运行非常慢。所以我在我的主实例上将评测级别设置为2 db.setProilingLeve
服务器B:10.*.88(我的办公室,主要)
服务器C:10.*.10(海外数据中心,二级) 我的程序也部署在3台数据服务器上。我还将连接字符串中的
readPreference
设置为nearest
,以获得最佳性能。然而,我仍然发现服务器A
上的程序运行非常慢。所以我在我的主实例上将评测级别设置为2
db.setProilingLevel(2)
令人惊讶的是,我发现来自服务器A
上的应用程序的查询正在访问服务器B
以获取数据(我猜有时服务器C
也是如此,因为它有时速度非常慢)。
我还尝试在我的代码中硬编码readPreference
=最近的。也不行
那么,为什么会发生这种情况,我该如何解决
一些可能有用的附加信息:
副本集信息:
img:PRIMARY> rs.status()
{
"set" : "img",
"date" : ISODate("2015-09-08T09:36:30.481Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "internal.myserver.com:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 356160,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"electionTime" : Timestamp(1441589586, 1),
"electionDate" : ISODate("2015-09-07T01:33:06Z"),
"configVersion" : 9,
"self" : true
},
{
"_id" : 2,
"name" : "img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 115567,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.742Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:28.558Z"),
"pingMs" : 33,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
},
{
"_id" : 3,
"name" : "us.img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6126,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.006Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:30.153Z"),
"pingMs" : 497,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
}
],
"ok" : 1
}
[root@SERVER_B image-server]# ping internal.myserver.com
PING internal.myserver.com (10.*.*.88) 56(84) bytes of data.
64 bytes from internal.myserver.com (10.*.*.88): icmp_seq=1 ttl=64 time=5.78 ms
[root@SERVER_B image-server]# ping img.myserver.com
PING img.myserver.com (10.*.*.1) 56(84) bytes of data.
64 bytes from img.myserver.com (10.*.*.1): icmp_seq=1 ttl=64 time=0.025 ms
[root@SERVER_B image-server]# ping us.img.myserver.com
PING us.img.myserver.com (10.*.*.10) 56(84) bytes of data.
64 bytes from us.img.myserver.com (10.*.*.10): icmp_seq=1 ttl=64 time=195 ms
[root@iZ94s1agmdlZ image-server]# node -v
v0.10.36
主机信息:
img:PRIMARY> rs.status()
{
"set" : "img",
"date" : ISODate("2015-09-08T09:36:30.481Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "internal.myserver.com:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 356160,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"electionTime" : Timestamp(1441589586, 1),
"electionDate" : ISODate("2015-09-07T01:33:06Z"),
"configVersion" : 9,
"self" : true
},
{
"_id" : 2,
"name" : "img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 115567,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.742Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:28.558Z"),
"pingMs" : 33,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
},
{
"_id" : 3,
"name" : "us.img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6126,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.006Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:30.153Z"),
"pingMs" : 497,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
}
],
"ok" : 1
}
[root@SERVER_B image-server]# ping internal.myserver.com
PING internal.myserver.com (10.*.*.88) 56(84) bytes of data.
64 bytes from internal.myserver.com (10.*.*.88): icmp_seq=1 ttl=64 time=5.78 ms
[root@SERVER_B image-server]# ping img.myserver.com
PING img.myserver.com (10.*.*.1) 56(84) bytes of data.
64 bytes from img.myserver.com (10.*.*.1): icmp_seq=1 ttl=64 time=0.025 ms
[root@SERVER_B image-server]# ping us.img.myserver.com
PING us.img.myserver.com (10.*.*.10) 56(84) bytes of data.
64 bytes from us.img.myserver.com (10.*.*.10): icmp_seq=1 ttl=64 time=195 ms
[root@iZ94s1agmdlZ image-server]# node -v
v0.10.36
节点信息:
img:PRIMARY> rs.status()
{
"set" : "img",
"date" : ISODate("2015-09-08T09:36:30.481Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "internal.myserver.com:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 356160,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"electionTime" : Timestamp(1441589586, 1),
"electionDate" : ISODate("2015-09-07T01:33:06Z"),
"configVersion" : 9,
"self" : true
},
{
"_id" : 2,
"name" : "img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 115567,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.742Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:28.558Z"),
"pingMs" : 33,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
},
{
"_id" : 3,
"name" : "us.img.myserver.com:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6126,
"optime" : Timestamp(1441704113, 1),
"optimeDate" : ISODate("2015-09-08T09:21:53Z"),
"lastHeartbeat" : ISODate("2015-09-08T09:36:29.006Z"),
"lastHeartbeatRecv" : ISODate("2015-09-08T09:36:30.153Z"),
"pingMs" : 497,
"syncingTo" : "internal.myserver.com:27017",
"configVersion" : 9
}
],
"ok" : 1
}
[root@SERVER_B image-server]# ping internal.myserver.com
PING internal.myserver.com (10.*.*.88) 56(84) bytes of data.
64 bytes from internal.myserver.com (10.*.*.88): icmp_seq=1 ttl=64 time=5.78 ms
[root@SERVER_B image-server]# ping img.myserver.com
PING img.myserver.com (10.*.*.1) 56(84) bytes of data.
64 bytes from img.myserver.com (10.*.*.1): icmp_seq=1 ttl=64 time=0.025 ms
[root@SERVER_B image-server]# ping us.img.myserver.com
PING us.img.myserver.com (10.*.*.10) 56(84) bytes of data.
64 bytes from us.img.myserver.com (10.*.*.10): icmp_seq=1 ttl=64 time=195 ms
[root@iZ94s1agmdlZ image-server]# node -v
v0.10.36
我正在使用节点本机驱动程序2.0.42,经过一些测试,我终于发现这只是GridStore的问题。即使我在连接字符串中指定了readPreference=nearest(它实际上适用于除GridStore
之外的其他查询),GridStore也无法从连接字符串中获得此设置。
要解决此问题,请在初始化GridStore时指定选项
{
ReadPreference.NEAREST
}
这会很神奇。我会把这个错误报告给官方的吉拉
nodejs驱动程序2.0.39您是在谈论您的“应用程序”还是在谈论“哪个服务器正在从哪个复制中读取数据?”。您提到的“从服务器A到服务器B的查询”并不表示“查询”来自您的应用程序。除非您明确声明,否则复制通常来自“主”。如果这是你的问题,那么你就“离题”了,需要在编程问题网站上发帖。@BlakesSeven很抱歉给你带来了困惑。我指的是我的应用程序,不是服务器。因为应用程序部署在与mongod相同的服务器上。我将修改我的问题,使之更清楚。