For the complete documentation index, see llms.txt. This page is also available as Markdown.

索引状态

索引状态监控接口的输出信息和节点状态监控接口非常类似。一般情况下,这个接口单独监控起来的意义并不大。

不过在 ES 1.6 版开始,加入了对索引分片级别的 commit id 功能。

回忆一下之前原理章节的内容,commit 是在分片内部,对每个 segment 做的。而数据在主分片和副本分片上,是由各自节点自行做 segment merge 操作,所以副本分片和主分片的 segment 的 commit id 是不一致的。这导致 ES 副本恢复时,跟主分片比对 commit id,基本上每个 segment 都不一样,所以才需要从主分片完整重传一份数据。

新加入分片级别的 commit id 后,副本恢复时,先比对跟主分片的分片级 commit id,如果一致,直接本地恢复副本分片内容即可。

查看分片级别 commit id 的命令如下:

# curl 'http://127.0.0.1:9200/logstash-mweibo-2015.06.15/_stats/commit?level=shards&pretty'
...
  "indices" : {
    "logstash-2015.06.15" : {
      "primaries" : { },
      "total" : { },
      "shards" : {
        "0" : [ {
          "routing" : {
            "state" : "STARTED",
            "primary" : true,
            "node" : "AqaYWFQJRIK0ZydvVgASEw",
            "relocating_node" : null
          },
          "commit" : {
            "generation" : 726,
            "user_data" : {
              "translog_id" : "1434297603053",
              "sync_id" : "AU4LEh6wnBE6n0qcEXs5"
            },
            "num_docs" : 36792652
          }
        } ],
...

注意:为了节约频繁变更的资源消耗,ES 并不会实时更新分片级 commit id。只有连续 5 分钟没有新数据写入的索引,才会触发给索引各分片更新 commit id 的操作。如果你查看的是一个还在新写入数据的索引,看到的内容应该是下面这样:

Last updated