【问题标题】:How do we know replication status in elasticsearch?我们如何知道 elasticsearch 中的复制状态?
【发布时间】:2014-07-14 11:54:19
【问题描述】:
我已经建立了具有单个节点(node1)和索引数据的弹性搜索集群。在节点 1 上完成索引后,另一个节点(节点 2)被添加到集群中。现在我已经将副本数配置为1。复制成功完成。但是我们怎么知道复制完成了呢?是否有任何可用的 API 可以返回复制状态,如进行中、完成......
我的要求是在复制完成时通知我。
【问题讨论】:
标签:
elasticsearch
replication
【解决方案1】:
除了 John Petrone 的回答,我更喜欢使用以下命令
http://localhost:9200/_cat/shards/twitterindex?v
这将获取索引特定的所有主分片或副本分片的状态。处于“初始化”状态的分片正在处理中,而标记为“已启动”的分片表示它们已成功复制。
【解决方案2】:
检查所有分片是否已成功复制的最快方法是集群健康 api:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster-health.html
“绿色”状态会告诉您所有分片都已分配:
集群健康状态为:绿色、黄色或红色。在碎片上
级别,红色状态表示特定分片未分配
在集群中,黄色表示主分片已分配,但
副本不是,绿色表示所有分片都已分配。这
索引级别状态由最差的分片状态控制。这
集群状态由最差的索引状态控制。
它有一个内置的机制来等待状态改变然后通知你。举个例子:
curl -XGET 'http://localhost:9200/_cluster/health?wait_for_status=green&timeout=60s'
将检查状态是否为绿色。如果是,它将立即返回,如果不是,它将在检查时等待长达 60 秒,然后返回状态。你可以循环调用这个api,或者只是将超时设置为一个大的数字,当状态变为绿色时它会返回,让你知道所有的分片都已分配。
【解决方案3】:
如果有人想检查每个索引的复制状态:
curl -XGET 'http://localhost:9200/_cat/indices/<indexName>?format=json'可以用。
此 API 的响应包含索引 health 属性。如果复制完成,该属性的值为green,否则为yellow。