使ElasticSearch集群变为绿色(OS X上的集群设置)

时间:2012-08-14 02:19:26

标签: macos elasticsearch

我有installed ElasticSearch on Mac OS X using Homebrew。有用。群集以“绿色”health开始。但是,在添加数据之后,它已经变为“黄色”。

  

群集运行状况为:绿色,黄色或红色。在分片级别,红色状态表示特定分片未在群集中分配,黄色表示分配了主分片但副本不分配,绿色表示分配了所有分片。索引级别状态由最差的分片状态控制。群集状态由最差的索引状态控制。

因此,我的副本分片未分配。我该如何分配它们? (我在大声思考。)

Shay on "I keep getting cluster health status of Yellow":“分片机制不会在同一节点上分配分片及其副本,但它会在同一节点上分配不同的分片。所以,你需要两个节点来获得绿色的集群状态。“

所以,我需要启动第二个节点。我是这样做的:

cd ~/Library/LaunchAgents/
cp homebrew.mxcl.elasticsearch.plist homebrew.mxcl.elasticsearch-2.plist
# change line 8 to: homebrew.mxcl.elasticsearch-2
launchctl load -wF ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch-2.plist

现在http://localhost:9200/上的“Korvus”和http://localhost:9201/上的“铁币贩子”。活泉。但是,我没有看到任何迹象表明他们彼此了解。如何将它们相互连接/引入?

注意:我读过Zen Discovery,但感觉还不开明。

更新2012-08-13美国东部时间下午11:30:

以下是我的两个节点:

curl "http://localhost:9200/_cluster/health?pretty=true"
{
  "cluster_name" : "elasticsearch_david",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
}

curl "http://localhost:9201/_cluster/health?pretty=true"
{
  "cluster_name" : "elasticsearch_david",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
}

更新2012-08-13美国东部时间下午11:35:

为了澄清,我的问题是如何通过设置index.number_of_replicas: 0来“忽略”该问题。我想连接多个节点。

更新2012-08-13美国东部时间下午11:48:

我刚刚发布了double gist that includes elasticsearch.yml and elasticsearch_david.log。在我看来,两个节点都称自己为'主'。那是我应该期待的吗?

更新2012-08-14美国东部时间上午12:36:

小说继续! :)如果我从所有外部网络断开我的Mac,然后重新启动节点,然后他们找到对方。双击。这让我觉得问题在于我的网络/多播配置。目前我在配置中有这个:network.host: 127.0.0.1。也许这不正确?

3 个答案:

答案 0 :(得分:19)

解决。不要使用network.host: 127.0.0.1。将该行留下注释,以便自动导出。

默认elasticsearch.yml是正确的。 configuration tweak by the Homebrew installer指定127.0.0.1环回接口:

# Set up ElasticSearch for local development:
inreplace "#{prefix}/config/elasticsearch.yml" do |s|
  # ...
  # 3. Bind to loopback IP for laptops roaming different networks
  s.gsub! /#\s*network\.host\: [^\n]+/, "network.host: 127.0.0.1"
end

我提交了an issue on the Homebrew issue tracker

答案 1 :(得分:13)

正如您正确地注意到,由于您创建了一个包含副本的索引但群集中只有一个节点,因此群集变为黄色。解决此问题的一种方法是在第二个节点上分配它们。另一种方法是关闭复制品。可以在index creation期间指定副本数量。以下命令将创建一个名为new-index-name且具有1个分片且没有副本的新索引。

curl -XPUT 'localhost:9200/new-index-name' -d '
{
    "settings": {
        "index" : {
            "number_of_shards" : 1,
            "number_of_replicas" : 0
        }
    }
}
'

使用Indices Update Settings API创建索引后,也可以更改副本数。对于群集中的所有索引,以下命令将将副本数更改为0:

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}
'

您可以通过运行cluster health命令验证节点是否相互找到:

$ curl "http://localhost:9200/_cluster/health?pretty=true"
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 30,
  "active_shards" : 55,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
} 

此处行"number_of_data_nodes" : 2,表示我的群集由两个节点组成,这意味着他们找到了彼此。您还可以运行Nodes Info命令来查看群集包含的节点:

curl "http://localhost:9200/_cluster/nodes?pretty=true"

答案 2 :(得分:0)

我遇到了同样的问题。当外部网络打开时,两个节点(两个elasticsearch实例使用不同的yml文件运行: elasticsearch - config = / usr / local / opt / elasticsearch / config / elasticsearch.yml elasticsearch --config = / usr / local / opt / elasticsearch / config / elasticsearch-1.yml)找不到对方,第一个实例处于黄色状态,第二个没有repllica已经分配。

解决方案: sudo route add -net 224.0.0.0/4 127.0.0.1

参考:

https://issues.jboss.org/browse/JGRP-1808