请解释一下这些 Mongo 统计数据

请解释一下这些 Mongo 统计数据

我的设置:我有 2 个主机,每个主机有 2 个分片。

  • Host1 有 2 个分片,并且是副本的主服务器
  • host2 具有 2 个分片的辅助节点。

  • 主机1:分片1(repset1),分片2(repset2)
  • 主机2:分片1(repset1),分片2(repset2)

还有第三台主机充当仲裁者。

我有 50 个线程通过 mongos 随机写入两个分片(使用哈希),并且每次插入时都设置 REPLICA_SAFE WriteConcern。

问题:

  1. mongostat 显示 host1 中两个分片的锁定率约为 90%,host2 中约为 1%。由于我使用了 REPLICA_SAFE,据称它会写入两个服务器,所以锁定不应该相同吗?
  2. mongostat 报告 host1 的两个分片的 qr=30,并且始终为 qw=0。由于我只执行写入,这怎么可能呢?此外,在 host2 上,所有队列都报告为 0。所有分片/主机(大约 80)中的故障都差不多。
  3. 辅助服务器 (host2) 上的 netIn/netOut 始终约为 200 字节/秒。太低了。
  4. mongos 有 53 个连接,host1 的分片有 71 和 71,host2 的分片有 9 和 8。这是怎么回事?

答案1

在一台主机上运行多个 mongod 实例时要小心。它们在系统单元化方面存在竞争:

或者运行具有专用 RAM 和 CPU 的虚拟机(这就是您可以使用 MongoDB 更有效地使用那些 24Core 系统的方式;)

答案2

西万,

看起来您使用的是 mongo < 2.0,如果不是,情况可能会发生变化。您说您正在使用 REPLICA_SAFE,您使用的是哪个 W 级别?如果是 w:1,那么您只是确认对主服务器的写入已成功,您应该使用 w:2 来确认写入已到达辅助服务器。

  1. 复制将解决此问题。插入时会获取写入锁定,这会阻止复制读取要复制的数据。

  2. 强调第 1 点。您的复制读取排队在插入写入之后。故障可能是这里的问题,因为您的系统需要将要读取的内容分页到 RAM 中,以便复制,从而产生其锁定。由于 Marc 提到的原因,您还可能看到两个主节点之间对 RAM 的争用。

  3. 似乎很低,但不能确定。很可能您的系统正在等待将数据分页到 RAM 中或等待写入锁定以进行复制。

  4. 您可以从日志文件中看到哪些连接去了哪里。如果不知道什么在哪里,我就无法告诉你原因。话虽如此,这里的连接数似乎并不不合理。

相关内容