当前位置: 首页>数据库>正文

查看ES 当前使用的分词器 es查看分片未分配原因

查看分片未分配的原因

  如果您运行的是Elasticsearch的5.0.2版本

curl -XGET http://localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grep UNASSIGNED

  如果您运行的是Elasticsearch的5+版本,您还可以使用群集分配说明API来尝试。
  获取有关分片分配问题的更多信息:

curl -XGET http://localhost:9200/_cluster/allocation/explain?pretty

原因分析

分片未分配,主要是如下几个原因:

原因一:故意分配碎片分配

  当节点离开集群时,主节点暂时延迟分片重新分配,以避免在原始节点能够在特定时间段(默认为一分钟)内恢复时不必要地在重新平衡分片上浪费资源。
  解决办法:动态修改延迟时间

curl -XPUT 'http://localhost:9200/indexName/_settings' -d
    '{
        "settings": {
           "index.unassigned.node_left.delayed_timeout": "30s"
        }
    }'
原因二:分片太多,节点不够

  当节点加入和离开集群时,主节点会自动重新分配分片,确保分片的多个副本未分配给同一节点。换句话说,主节点不会将主分片分配给与其副本相同的节点,也不会将同一分片的两个副本分配给同一节点。如果没有足够的节点来相应地分配分片,则分片可能会停留在未分配状态。

  解决办法:可以向群集添加更多数据节点或减少副本数。这里我们通过减少副本数的方式解决:

curl -XPUT 'http://localhost:9200/indexName/_settings' -d '{"number_of_replicas": 2}'
原因三: 加入一个新的节点,需要重新启用分片分配
   默认情况下,在所有节点上启用分片分配,但您可能在某些时候禁用了分片分配(例如,为了执行滚动重新启动),并且忘记重新启用它。

要启用分片分配,请更新群集设置API:

curl -XPUT 'http://localhost:9200/_cluster/settings' -d
    '{ "transient":
        { "cluster.routing.allocation.enable" : "all"
        }
    }'
原因四:集群中不在存在分片数据

   在这种情况下,constant-updates索引的主分片0 是未分配的。它可能是在没有任何副本的节点上创建的(一种用于加速初始索引过程的技术),并且节点在可以复制数据之前离开了集群。主服务器在其全局集群状态文件中检测分片,但无法在集群中找到分片的数据。
   另一种可能性是节点在重新启动时可能遇到问题。通常,当节点恢复其与群集的连接时,它会将有关其磁盘分片的信息中继到主服务器,然后主服务器将这些分片从“未分配”转换为“已分配/已启动”。当此过程由于某种原因(例如,节点的存储已经以某种方式损坏)失败时,分片可能保持未分配状态。
  在这种情况下,您必须决定如何继续:尝试让原始节点恢复并重新加入群集(并且不强制分配主分片),或者使用Reroute API强制分配分片并使用重新索引丢失的数据原始数据源,或来自备份。
如果您决定分配未分配的主分片,请确保将该"allow_primary": "true"标志添加到请求中:

curl -XPOST 'http://localhost:9200/_cluster/reroute' -d
    '{ "commands" :
          [ { "allocate" :
              { "index" : "constant-updates", "shard" : 0, "node": "<NODE_NAME>", "allow_primary": "true" }
          }]
    }'
原因五: 磁盘水印低(Low disk watermark)

  如果没有足够的磁盘空间节点,主节点可能无法分配分片(它不会将分片分配给使用率超过85%的磁盘的节点)。一旦节点达到此磁盘使用级别,或Elasticsearch称为“低磁盘水印”,将不会为其分配更多分片。

您可以通过查询cat API来检查群集中每个节点上的磁盘空间(并查看每个节点上存储的分片):

curl -s 'http://localhost:9200/_cat/allocation?v'

  如果任何特定节点的磁盘空间不足(删除过时的数据并将其存储在群集外,添加更多节点,升级硬件等),请参阅此文章以获取有关如何操作的选项。
  如果您的节点具有大磁盘容量,则85%的低水印可能太低。您可以使用群集更新设置API进行更改cluster.routing.allocation.disk.watermark.low和/或cluster.routing.allocation.disk.watermark.high。例如,此Stack Overflow线程指出,如果您的节点具有5TB磁盘容量,则可以安全地将低磁盘水印增加到90%:

curl -XPUT 'http://localhost:9200/_cluster/settings' -d
    '{
        "transient": {
              "cluster.routing.allocation.disk.watermark.low": "90%"
        }
    }'

  如果希望在群集重新启动时保持配置更改,请将“transient”替换为“persistent”,或者在配置文件中更新这些值。您可以选择使用字节或百分比值来更新这些设置,但请务必记住Elasticsearch文档中的这一重要说明:“百分比值是指已用磁盘空间,而字节值是指可用磁盘空间。”



https://www.xamrdz.com/database/6bq1962859.html

相关文章: