ElasticSearch服务索引健康状态为yellow,溯源及解决方法

今天发运行项目的时候发现ES的集群和索引健康状态都变成yellow黄色了,
一开始是以为Linux虚拟机磁盘空间不足

我这里是通过浏览器Elasticvue插件查看状态,也可以通过kibana
在这里插入图片描述
在将VMware里面的centOS虚拟机扩容之后,集群健康状态还是黄色,查看es
的日志,发现了一些端倪

{"type": "server", "timestamp": "2024-08-14T03:05:39,901Z", "level": "INFO", 
"component": "o.e.c.r.a.AllocationService", "cluster.name": "docker-cluster", 
"node.name": "b029464c5838", "message": "Cluster health status changed from 
[RED] to [YELLOW] (reason: [shards started [[user][0]]]).", "cluster.uuid": 
"fw7MBctsRhKs7ZXVdwIuBA", "node.id": "kVueuBHqQ9uazalV9JNEfA"  }

但这是说明集群健康状态从红色变为黄色,是和分片有关

继续调用检查api GET /_cluster/health
返回如下

{
  "cluster_name": "docker-cluster",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 2,
  "active_shards": 2,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 2,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50
}

其中**“unassigned_shards”: 2**,表示未分配的分片数为二,推测可能原因就是
分片未分配,导致集群状态Yellow
再通过GET /_cluster/allocation/explain 查看unassigned 的原因,得到

{
  "index": "user",
  "shard": 0,
  "primary": false,
  "current_state": "unassigned",
  "unassigned_info": {
    "reason": "REPLICA_ADDED",
    "at": "2024-08-14T03:54:24.668Z",
    "last_allocation_status": "no_attempt"
  },
  "can_allocate": "no",
  "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions": [
    {
      "node_id": "kVueuBHqQ9uazalV9JNEfA",
      "node_name": "b029464c5838",
      "transport_address": "172.19.0.2:9300",
      "node_attributes": {
        "ml.machine_memory": "6067675136",
        "xpack.installed": "true",
        "transform.node": "true",
        "ml.max_open_jobs": "20",
        "ml.max_jvm_size": "536870912"
      },
      "node_decision": "no",
      "deciders": [
        {
          "decider": "same_shard",
          "decision": "NO",
          "explanation": "a copy of this shard is already allocated to this node [[user][0], node[kVueuBHqQ9uazalV9JNEfA], [P], s[STARTED], a[id=Jj5rl1j_ROGqw3Fn4tjJxQ]]"
        }
      ]
    }
  ]
}

“primary”: false:表明这是一个副本分片,而不是主分片。主分片负责处理写入操作,而副本分片用于提供读取操作的负载均衡和高可用性。

“allocate_explanation”: “cannot allocate because allocation is not permitted to any of the nodes”:解释了为什么分片不能被分配,因为不允许将其分配到任何节点。

“explanation”: “a copy of this shard is already allocated to this node [[user][0], node[kVueuBHqQ9uazalV9JNEfA], [P], s[STARTED], a[id=Jj5rl1j_ROGqw3Fn4tjJxQ]]”:提供了不允许分配的详细解释,即该节点上已经分配了该分片的主副本,并且状态为 STARTED。

说明该索引已经有了启动的副本节点,接下来查看一下user索引的setting
GET /user/_settings

{
  "user": {
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "user",
        "creation_date": "1723366659772",
        "number_of_replicas": "1",
        "uuid": "JFWB2NceRouaAEAum7ZTzg",
        "version": {
          "created": "7120199"
        }
      }
    }
  }
}

**“number_of_replicas”: “1”**表示副本分片为1
因为我只开启了一个es服务,所以主分片运行在这时,这一个副本分片无法分配到当前服务,解决方法,将其设为0

PUT user/_settings
{
      "number_of_replicas" : 0
}

更改完成之后索引状态变为gree
在这里插入图片描述

Elasticsearch 集群的状态yellow 时,表示所有的主分片都已经分配到了某些节点上,但是某些副本分片尚未分配到节点上。这种情况下,Elasticsearch 集群仍然可以工作,但是如果任何一个节点失败,那么可能会导致数据丢失或不可用。 要解决这个问题,您可以考虑以下几个步骤: 1. 扩大集群规模:如果您的集群规模较小,则可以尝试增加节点数以获得更多的分片和副本分片。这样可以使分片和副本分片更容易在节点之间分配。 2. 提高硬件配置:如果您的节点硬件配置较低,则可以考虑升级硬件配置以提高节点性能。 3. 调整分片数量:您可以尝试调整分片数量以更好地适应您的数据和节点。例如,如果您的数据非常小,那么您可以考虑减少分片数量。 4. 重新分配副本分片:您可以手动重新分配副本分片以确保每个节点都有足够的副本分片。您可以使用 Elasticsearch 的 API 来执行此操作。例如,您可以使用 _cat/shards API 来查看分片和节点分配情况,然后使用 _cluster/reroute API 来重新分配副本分片。 5. 检查节点状态:您可以检查节点的状态以确保它们正常运行并且可以与其他节点通信。您可以使用 Elasticsearch 的 API 来查看节点状态。例如,您可以使用 _cat/nodes API 来查看节点列表和状态。 总之,解决 Elasticsearch 集群状态yellow 的问题需要您根据实际情况采取适当的措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值