如何检查 ElasticSearch 索引是否存在并准备好?
How to check if ElasticSearch index exists and is ready?
如何检查索引是否存在并且是否准备好在 ElasticSearch 中使用?
我们目前通过 运行 选择一些文档的查询来检查 "indexA" 是否存在。如果查询没有 return 任何命中,我们假设 "indexA" 不存在,并创建索引(全新安装)。问题是当服务器重新启动时,我们的应用程序启动速度比 ElasticSearch 快,并且我们得到两个重复的 "indexA",因为在 ElasticSearch 启动时搜索 "indexA" 中的文档失败..(我猜索引是还没准备好)
有一个方法:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-exists.html - 这是否保证 return "true" 对于 "indexA",即使 ES 正在启动并且索引尚未准备好?
或者我应该使用 "status" 方法,指定索引名称,并检查是否所有分片都具有状态 "STARTED"?
或者我应该使用这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html ElasticSearch 可以进入 "recovery-mode" 吗?什么时候发生,我们应该如何处理?
或者我应该调查一下 "CatHealth"? .Epoc?
当您说 准备好 时,您的意思是准备好开始搜索了吗?
阅读您的问题,您似乎想知道集群的状态,您可以使用 Cluster Health API
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true
您可以传递一个查询字符串参数 wait_for_status=green
,它将等待直到集群处于给定状态(或直到超时到期,默认为 30 秒)。
根据您在问题中的评论,集群处于黄色状态,因为有 5 个未分配的分片;当 运行 默认配置时,Elasticsearch 创建 5 个主分片和 1 个副本(即每个主分片一个副本分片)。由于集群中只有一个节点,因此副本分片将保持未分配状态,因为 Elasticsearch 不会将它们定位在包含所有主分片的同一节点上,因为这不会提供任何冗余。向集群添加另一个节点将导致 Elasticsearch 将 2 个主分片与 3 个副本一起重新定位到新节点上,并将 2 个副本重新定位到原始节点上。通过这种分布,节点可以关闭但不会丢失任何数据。添加另一个节点会将状态更改为绿色,但您将能够在黄色状态下使用集群。
如果您要在生产环境中使用此集群,我强烈建议您至少拥有 2 个节点(理想情况下 在不同的机器上),这样您至少有一个副本。
如何检查索引是否存在并且是否准备好在 ElasticSearch 中使用?
我们目前通过 运行 选择一些文档的查询来检查 "indexA" 是否存在。如果查询没有 return 任何命中,我们假设 "indexA" 不存在,并创建索引(全新安装)。问题是当服务器重新启动时,我们的应用程序启动速度比 ElasticSearch 快,并且我们得到两个重复的 "indexA",因为在 ElasticSearch 启动时搜索 "indexA" 中的文档失败..(我猜索引是还没准备好)
有一个方法:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-exists.html - 这是否保证 return "true" 对于 "indexA",即使 ES 正在启动并且索引尚未准备好?
或者我应该使用 "status" 方法,指定索引名称,并检查是否所有分片都具有状态 "STARTED"?
或者我应该使用这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html ElasticSearch 可以进入 "recovery-mode" 吗?什么时候发生,我们应该如何处理?
或者我应该调查一下 "CatHealth"? .Epoc?
当您说 准备好 时,您的意思是准备好开始搜索了吗?
阅读您的问题,您似乎想知道集群的状态,您可以使用 Cluster Health API
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true
您可以传递一个查询字符串参数 wait_for_status=green
,它将等待直到集群处于给定状态(或直到超时到期,默认为 30 秒)。
根据您在问题中的评论,集群处于黄色状态,因为有 5 个未分配的分片;当 运行 默认配置时,Elasticsearch 创建 5 个主分片和 1 个副本(即每个主分片一个副本分片)。由于集群中只有一个节点,因此副本分片将保持未分配状态,因为 Elasticsearch 不会将它们定位在包含所有主分片的同一节点上,因为这不会提供任何冗余。向集群添加另一个节点将导致 Elasticsearch 将 2 个主分片与 3 个副本一起重新定位到新节点上,并将 2 个副本重新定位到原始节点上。通过这种分布,节点可以关闭但不会丢失任何数据。添加另一个节点会将状态更改为绿色,但您将能够在黄色状态下使用集群。
如果您要在生产环境中使用此集群,我强烈建议您至少拥有 2 个节点(理想情况下 在不同的机器上),这样您至少有一个副本。