12

我已经使用 Homebrew 在 Mac OS X 上安装了 ElasticSearch。有用。集群以“绿色”健康开始。但是,在添加数据后,它就变成了“黄色”。

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

所以,我的副本分片没有分配。我如何分配它们?(我在大声思考。)

根据 Shay 关于“我不断获得 Yellow 的集群健康状况”的说法:“分片分配机制不会在同一个节点上分配一个分片及其副本,尽管它确实在同一个节点上分配了不同的分片。所以,你需要两个节点获得绿色集群状态。”

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

cd ~/库/LaunchAgents/
cp homebrew.mxcl.elasticsearch.plist homebrew.mxcl.elasticsearch-2.plist
# 将第 8 行更改为:homebrew.mxcl.elasticsearch-2
launchctl load -wF ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch-2.plist

现在我有“Korvus”http://localhost:9200/和“Iron Monger” http://localhost:9201/。呜呜。但是,我没有看到任何迹象表明他们彼此了解。我如何将它们连接/介绍给彼此?

注意:我读过Zen Discovery,但还没有开悟。

美国东部时间 2012 年 8 月 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 年 8 月 13 日晚上 11:35 更新:

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

美国东部时间 2012 年 8 月 13 日晚上 11:48 更新:

我刚刚发布了一个包含 elasticsearch.yml 和 elasticsearch_david.log 的双重要点。在我看来,两个节点都称自己为“主人”。这是我应该期待的吗?

美国东部时间 2012 年 8 月 14 日上午 12:36 更新:

小说还在继续!:) 如果我断开我的 Mac 与所有外部网络的连接,然后重新启动节点,它们就会找到彼此。双伍。这让我认为问题出在我的网络/多播配置上。目前我在我的配置中有这个:network.host: 127.0.0.1。也许这不正确?

4

3 回答 3

19

解决了。不要使用network.host: 127.0.0.1. 将该行注释掉以使其自动派生。

默认elasticsearch.yml是正确的。Homebrew 安装程序的配置调整指定了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

在 Homebrew 问题跟踪器上提交了一个问题

于 2012-08-14T04:52:03.670 回答
13

正如您正确注意到的那样,集群变黄了,因为您创建了一个带有副本的索引,但集群中只有一个节点。解决此问题的一种方法是将它们分配到第二个节点上。另一种方法是关闭副本。副本数可以在创建索引时指定。以下命令将创建一个名称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
    }
}
'

您可以通过运行集群健康命令来验证节点是否相互找到:

$ 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"
于 2012-08-14T02:46:49.157 回答
0

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

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

参考:

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

于 2015-02-06T19:56:58.120 回答