Как добавить новый node в свой кластер Elasticsearch
Мой кластер имеет yellow
работоспособность, так как он содержит только один node, поэтому реплики остаются неподписанными просто потому, что для их размещения не существует других node.
Поэтому я хочу создать/добавить еще один node, чтобы Elasticsearch мог начать выделять ему реплики. У меня только одна машина, и я запускаю ES как службу.
Я нашел множество сайтов с некоторой информацией, но ни один из них не дает мне ясно, как я могу добавить еще один node в ES.
Может кто-нибудь объяснить мне, какие файлы мне нужно редактировать и какие команды мне нужно запустить, чтобы создать еще один node в моем кластере? Должен ли я запускать два экземпляра ES? Как я могу это сделать?
Спасибо заранее.
Ответы
Ответ 1
СОВЕТЫ, ЧТОБЫ ДОБАВИТЬ ДРУГОЙ УЗЕЛ:
1) ВЕРСИИ:
Это хороший совет, чтобы проверить все ваши узлы на статус: http://astic-node1: 9200/
Имейте в виду, что в большинстве случаев: ВЕРСИЯ ДОЛЖНА БЫТЬ ОДНОЙ, ДАЖЕ МИНО
{
"name" : "node2",
"cluster_name" : "xxxxxxxxxxx",
"cluster_uuid" : "n-xxxxxxxxxxxxxxx",
"version" : {
"number" : "5.2.2",
"build_hash" : "xxxx",
"build_date" : "20-02-24T17:26:45.835Z",
"build_snapshot" : false,
"lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}
Имейте в виду, что если вы видите другой номер версии в node1, например,
"number" : "5.2.1"
в этом случае вы должны обновить свой узел до версии 5.2.2 (так же, как узел1).
2) УЗЛЫ И РЕПЛИКА:
Каков вариант использования узла? Для 3 узлов я бы сделал это:
curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
"transient": {
"discovery.zen.minimum_master_nodes": 3
}
}
'
Еще лучше изменить настройки в файле конфигурации Elasticsearch:
/etc/elasticsearch/elasticsearch.yml
# need to be changed on each node (has to be unique for each node):
node.name: node1
# need to be the same in all nodes:
cluster.name: my_cluster
discovery.zen.ping.unicast.hosts: ["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2", "IP_ADDRESS_OR_HOSTNAME3"]
И если у вас есть 3 узла, вы хотите две реплики и одну основную?
curl -XPUT 'localhost:9200/_settings?pretty' -H 'Content-Type: application/json' -d'
{
"index" : {
"number_of_replicas" : 2
}
}'
3) Убедитесь, что узлы включены
Есть способ пнуть узел:
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" :{
"cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
}
}';echo
Так что, если вы сделали это, и теперь вы хотите добавить узел обратно: https://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html
Вы можете сделать это с помощью следующего запроса (пожалуйста, внимательно прочитайте ссылку выше):
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" :{
"cluster.routing.allocation.enable" : "all"
}
}';echo
4) НИКОГДА НЕ ЗАБЫВАЙТЕ, СЕТЬ:
Брандмауэр, сеть... Можете ли вы подключиться к новому узлу через порт 9200? Вы можете увидеть это в своем веб-браузере?
Ты можешь
curl http://your-elasticsearch-hostname:9200/
?
СОВЕТЫ ДЛЯ УДАЛЕНИЯ УЗЛА ИЗ КЛАСТЕРА:
1) УДАЛИТЬ С API
curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
"transient" : {
"cluster.routing.allocation.exclude._name" : "node3"
}
}'
2) Проверьте ваш файл конфигурации
Проверьте конфигурационный файл в /etc/elasticsearch/elasticsearch.yml
и оставьте только те узлы, которые хотите сохранить:
discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]
* ПРОВЕРЬТЕ СВОЙ СТАТУС *
Проверьте http://elk-pipeline: 9200/_cat/shards Каков ваш статус? Вы можете увидеть: ИНИЦИАЛИЗАЦИЯ Это, вероятно, означает, что данные передаются. Поэтому, если ваши данные большие (а не на SSD), подождите.
Не забывайте
Вы можете увидеть, перемещаются ли ваши данные, набрав:
[watch] du /var/lib/elasticsearch/
Это все. Я постараюсь время от времени добавлять больше информации.
Пожалуйста, не стесняйтесь изменить/добавить.
Ответ 2
Полными шагами в Windows Box являются:
- распакуйте эластичный, скажем, C:\ELK\elastic\run command
bin\service
install elastic-search-x64-node01
, который создаст сервис с именем
elastic-search-x64-node01
-
изменить elasticsearch.yml
файл конфигурации:
cluster.name: Animals
node.name: Snake
node.master: true
node.data: true
path.data: C:\ELK\storage\data
path.logs: C:\ELK\storage\logs
http.port: 9200
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
-
запустите service manager elastic-search-x64-node01
и настройте правила своих сервисов и запустите службу
-
распакуйте эластичную, скажем, команду C:\ELK\elastic2\run bin\service
install elastic-search-x64-node02
, которая создаст сервис с именем
elastic-search-x64-node02
-
изменить elasticsearch.yml
файл конфигурации:
cluster.name: Animals
node.name: Baboon
node.master: false
node.data: true
path.data: C:\ELK\storage\data
path.logs: C:\ELK\storage\logs
http.port: 9201
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
-
запустите service manager elastic-search-x64-node02
и настройте свои правила обслуживания и запустите службу
В этот момент у вас есть 2 отдельных узла (они хранят данные в одной папке, но я слишком невменяю, чтобы редактировать path.data для второго node), поскольку две отдельные службы Windows и GET http://localhost:9200/_cluster/health
показывают что-то вроде:
{
"cluster_name": "Animals",
"status": "green",
"timed_out": false,
"number_of_nodes": 2,
"number_of_data_nodes": 2,
"active_primary_shards": 4,
"active_shards": 8,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
Ответ 3
Во-первых, вы можете удалить реплики, чтобы вернуться в зеленое состояние, вы можете сделать это даже после создания индекса и добавления к нему документов.
Здесь вы устанавливаете счетчик реплик равным 0:
curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
"index" : {
"number_of_replicas" : 0
}
}'
Если вы хотите просто добавить еще один node в свой кластер, вам нужно будет отредактировать elasticsearch.yml
, желательно на обоих ваших узлах с этими изменениями:
cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]
Задайте одноадресные хосты на каждом node, чтобы ссылаться на другое, задайте имя кластера на обоих узлах и дайте каждому node уникальное имя, затем перезапустите оба экземпляра ES, и ваш кластер должен быть в сети.
Ответ 4
Я не понимаю, каков ваш вопрос. Есть две возможности для вас.
1) У вас есть два узла, и вы хотите, чтобы они могли видеть друг друга. Там много документации для этого по всему месту. Если это так, я бы предложил вам протестировать, чтобы каждый хост мог поговорить с другим, то есть: ssh в хост A и попытаться скрутить хост B: 9200 и наоборот. Вы также захотите убедиться, что конфигурации настроены правильно.
2) Вы хотите настроить "кластер" на своем локальном компьютере. В этом случае вам понадобятся два отдельных файла конфигурации, и вам нужно будет запустить elasticsearch с использованием определенного файла конфигурации для второго "node" (а также изменить вторую конфигурацию для использования разных портов и т.д.), Вы можете проверить эту ссылку: http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch-nodes-on-one-machine/
Но да, в конечном счете, вам нужно запускать процессы elasticsearch, независимо от того, находятся ли они на одной машине или две разные машины подходят вам.
Ответ 5
Если вы используете Elasticsearch n local, просто перейдите на другой терминал и снова запустите elasticsearch
. Таким образом, у вас будет два экземпляра.
В новом экземпляре вы увидите следующее сообщение:
[Black Widow] detected_master [N'Garai]
В уже запущенном экземпляре (master node)
[N'Garai] added {[Black Widow]
Предполагая, что [N'Garai]
и {[Black Widow]
являются случайными именами node.