Подтвердить что ты не робот

Получение кластера ElasticSearch для зеленого (Cluster Setup на OS X)

У меня установлен ElasticSearch в Mac OS X с использованием Homebrew. Оно работает. Кластер начал с "зеленого" health. Однако сразу после добавления данных он перешел на "желтый".

Состояние кластера - это состояние: зеленый, желтый или красный. На уровне осколков красный статус указывает, что конкретный осколок не выделен в кластере, желтый означает, что первичный осколок выделен, а реплики - нет, а зеленый означает, что все осколки выделены. Состояние уровня индекса контролируется наихудшим статусом осколков. Состояние кластера контролируется наихудшим статусом индекса.

Итак, мои реплики не выделены. Как их выделить? (Я думаю вслух.)

Согласно Shay на "Я продолжаю получать статус здоровья кластера Желтым" : "механизм выделения осколков не выделяет осколок и его реплику на том же node, хотя он выделяет разные осколки на одном и том же node. Таким образом, вам понадобится два узла, чтобы получить состояние кластера зеленого цвета."

Итак, мне нужно запустить второй node. Я сделал это:

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/ и "Iron Monger" на http://localhost:9201/. Woot. Но я не вижу никаких признаков того, что они знают друг о друге. Как подключить/ввести их друг другу?

Примечание. Я читаю Zen Discovery, но пока не чувствую себя просветленным.

Обновление 2012-08-13 11:30 вечера EST:

Вот мои два узла:

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 вечера EST:

Чтобы уточнить, мой вопрос не как "игнорировать" проблему, установив index.number_of_replicas: 0. Я хочу несколько узлов, связанных.

Обновление 2012-08-13 11:48 вечера EST:

Я только что разместил двойную сущность которая включает elasticsearch.yml и elasticsearch_david.log. Мне кажется, что оба узла называют себя "мастером". Это то, что я должен ожидать?

Обновление 2012-08-14 12:36 AM EST:

И роман продолжается!:) Если я отключу свой Mac от всех внешних сетей, а затем перезапустите узлы, они найдут друг друга. Двойной Woot. Это заставляет меня думать, что проблема связана с моей конфигурацией сети/многоадресной рассылки. В настоящее время у меня это в моей конфигурации: network.host: 127.0.0.1. Возможно, это неверно?

4b9b3361

Ответ 1

решаемая. Не используйте network.host: 127.0.0.1. Оставьте эту строку прокомментированной, чтобы она автоматически выводилась.

Значение по умолчанию elasticsearch.yml верное. A настройка настройки установщиком Homebrew определяет интерфейс loopback 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

Я зарегистрировал проблему в поисковом журнале для доморощенного.

Ответ 2

Как вы правильно заметили, кластер стал желтым, потому что вы создали индекс с репликами, но в кластере у вас было только один node. Один из способов решения этой проблемы - выделить их на второй node. Другой способ - отключить реплики. Количество реплик может быть указано в создании индекса. Следующая команда создаст новый индекс с именем new-index-name с 1 осколком и без реплик.

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

Также возможно изменить количество реплик после того, как индекс уже был создан с помощью 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"

Ответ 3

Я столкнулся с той же проблемой. Когда внешняя сеть включена, два узла (два экземпляра 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