В нашей недавней статье по FlexibleSearch мы обсуждали, как установить и настроить отдельный экземпляр Elassearch.
В то время как автономная установка хороша для dev/test, для производства рекомендуется настроить кластерasticsearch. Кластер Elasticsearch имеет много преимуществ по сравнению с автономным.
Преимущества Elastisearch Cluster
- Распределенные данные: В кластере данные распространяются, реплицируются на другой сервер. Таким образом, в случае сбоя одного узла, данные могут быть восстановлены с узла реплики. Это позволяет избежать единой точки отказа.
- Роли выделенного узла. Каждому узлу назначена выделенная роль, которая обеспечивает определенную роль и распределение нагрузки на основе ролей, что повышает производительность. Вот две важные роли узлов
- Узел данных: эти узлы хранят только данные и выполняют операции, связанные с данными, поиск и манипулирование данными.
- Главный узел: Мастер всех узлов, он отвечает за весь кластер, добавляет и удаляет узлы из кластера, отслеживает живые узлы, повторно выбирает мастер в соответствующих случаях.
- Масштабируемость: модель кластера легко масштабируется до нескольких узлов. Таким образом увеличивается производительность и надежность упругого поиска.
В этой статье мы настроим кластер из трехузлового эластичного поиска.
Узел 1 – установка и настройка
Давайте начнем установку Elasticsearch, мы покажем каждый шаг во время процедуры установки
Следуйте нашей предыдущей статье Как установить Elasticsearch и скачать zip-архив elasticsearch, распаковать его на сервер или установить с помощью deb-репозитория.
Теперь откройте файл конфигурации Elasticsearch в извлеченной папке или /etc/asticsearch в случае установки непосредственно из репозитория.
vim /etc/elasticsearch/elasticsearch.yml
Теперь нам нужно настроить его как узлы кластера, в следующем файле необходимо изменить следующие записи.
Установите имя кластера:
cluster-name=TGS
Установите имя первого узла:
node.name=tgs-1
Установите, будет ли этот узел действовать как мастер:
node.master=true
Установите, будет ли этот узел действовать как узел данных:
node.data=true
Установите ip и порт первого узла:
network.host=192.168.113.31 http.port=9200
Протокол обнаружения узлов кластера и список узлов:
discovery.zen.ping.unicast.hosts: ["192.168.113.31", "192.168.113.32","192.168.113.33"]
Все эти узлы являются частью кластера, что облегчает обнаружение узлов.
Теперь запустите серверasticsearch, следующие важные части журналов установки:
[INFO ][o.e.c.s.ClusterApplierService] [tgs-1] new_master {tgs-1}{7IqQvmfdSb66AFcP0u0AZQ}{OveP8d_SR0WIjVupZcW35g}{192.168.113.31}{192.168.113.31:9300}{ml.machine_memory=134986862592xpack.installed=trueml.max_open_jobs=20ml.enabled=true}reason: apply cluster state (from master [master {tgs-1}{7IqQvmfdSb66AFcP0u0AZQ}{OveP8d_SR0WIjVupZcW35g}{192.168.113.31}{192.168.113.31:9300}{ml.machine_memory=134986862592xpack.installed=trueml.max_open_jobs=20ml.enabled=true} committed version [1] source [zen-disco-elected-as-master ([0] nodes joined)]]) [INFO ][o.e.h.n.Netty4HttpServerTransport] [tgs-1] publish_address {192.168.113.31:9200}bound_addresses {192.168.113.31:9200} [INFO ][o.e.n.Node ] [tgs-1] started [WARN ][o.e.x.s.a.s.m.NativeRoleMappingStore] [tgs-1] Failed to clear cache for realms [[]] [INFO ][o.e.l.LicenseService ] [tgs-1] license [77777777-dddd-4444-aaaa-888888888888] mode [basic] - valid [INFO ][o.e.g.GatewayService ] [tgs-1] recovered [0] indices into cluster_state [INFO ][o.e.c.s.MasterService ] [tgs-1] zen-disco-node-join[{tgs-2}{S64iPm03Qtq0-bvJipk-_A}{eAChESS6TceLHHTHyfMU7g}{192.168.113.32}{192.168.113.32:9300}{ml.machine_memory=134986862592ml.max_open_jobs=20xpack.installed=trueml.enabled=true}]reason: added {{tgs-2}{S64iPm03Qtq0-bvJipk-_A}{eAChESS6TceLHHTHyfMU7g}{192.168.113.32}{192.168.113.32:9300}{ml.machine_memory=134986862592ml.max_open_jobs=20xpack.installed=trueml.enabled=true},} [INFO ][o.e.c.s.ClusterApplierService] [tgs-1] added {{tgs-2}{S64iPm03Qtq0-bvJipk-_A}{eAChESS6TceLHHTHyfMU7g}{192.168.113.32}{192.168.113.32:9300}{ml.machine_memory=134986862592ml.max_open_jobs=20xpack.installed=trueml.enabled=true},}reason: apply cluster state (from master [master {tgs-1}{7IqQvmfdSb66AFcP0u0AZQ}{OveP8d_SR0WIjVupZcW35g}{192.168.113.31}{192.168.113.31:9300}{ml.machine_memory=134986862592xpack.installed=trueml.max_open_jobs=20ml.enabled=true} committed version [4] source [zen-disco-node-join[{tgs-2}{S64iPm03Qtq0-bvJipk-_A}{eAChESS6TceLHHTHyfMU7g}{192.168.113.32}{192.168.113.32:9300}{ml.machine_memory=134986862592ml.max_open_jobs=20xpack.installed=trueml.enabled=true}]]])
Узел 2 – установка и настройка
Войти на второй сервер, установить elasticsearch или извлечь из загруженного архива
Отредактируйте файл конфигурации соответственно.
Установите имя кластера:
cluster-name=TGS
Установите имя второго узла:
node.name=tgs-2
Установите, будет ли этот узел действовать как мастер:
node.master=true
Установите, будет ли этот узел действовать как узел данных:
node.data=true
Установите IP-адрес и порт второго узла:
network.host=192.168.113.32 http.port=9200
Протокол обнаружения узлов кластера и список узлов:
discovery.zen.ping.unicast.hosts: ["192.168.113.31", "192.168.113.32","192.168.113.33"]
Все эти узлы являются частью кластера, что облегчает обнаружение узлов.
Теперь запустите сервер Flexiblesearch, следующие являются важной частью журналов установки
[INFO ][o.e.c.s.ClusterApplierService] [tgs-2] detected_master {tgs-1} [WARN ][o.e.x.s.a.s.m.NativeRoleMappingStore] [tgs-2] Failed to clear cache for realms [[]] [INFO ][o.e.x.s.a.TokenService ] [tgs-2] refresh keys [INFO ][o.e.x.s.a.TokenService ] [tgs-2] refreshed keys [INFO ][o.e.l.LicenseService ] [tgs-2] license [77777777-dddd-4444-aaaa-888888888888] mode [basic] - valid [INFO ][o.e.h.n.Netty4HttpServerTransport] [tgs-2] publish_address {192.168.113.32:9200}, bound_addresses {192.168.113.32:9200} [INFO ][o.e.n.Node ] [tgs-2] started [INFO ][o.e.c.s.ClusterApplierService] [tgs-2] added {{tgs-3}
Узел 3 – Установка и настройка
Авторизуйтесь на третьем сервере и установите elasticsearch или распакуйте загруженный zip-архив
Установите имя кластера:
cluster-name=TGS
Установите имя третьего узла:
node.name=tgs-3
Установите, будет ли этот узел действовать как мастер:
node.master=true
Установите, будет ли этот узел действовать как узел данных:
node.data=true
Установите IP-адрес и порт второго узла:
network.host=192.168.113.33 http.port=9200
Протокол обнаружения узлов кластера и список узлов
discovery.zen.ping.unicast.hosts: ["192.168.113.31", "192.168.113.32","192.168.113.33"]
Все эти узлы являются частью кластера, что облегчает обнаружение узлов.
Теперь запустите сервер Flexiblesearch, следующие являются важной частью журналов установки
[INFO ][o.e.c.s.ClusterApplierService] [tgs-3] detected_master {tgs-1} [WARN ][o.e.x.s.a.s.m.NativeRoleMappingStore] [tgs-3] Failed to clear cache for realms [[]] [INFO ][o.e.x.s.a.TokenService ] [tgs-3] refresh keys [INFO ][o.e.x.s.a.TokenService ] [tgs-3] refreshed keys [INFO ][o.e.l.LicenseService ] [tgs-3] license [77777777-dddd-4444-aaaa-888888888888] mode [basic] - valid [INFO ][o.e.h.n.Netty4HttpServerTransport] [tgs-3] publish_address {192.168.113.33:9200}, bound_addresses {192.168.113.33:9200} [INFO ][o.e.n.Node ] [tgs-3] started
Проверить состояние кластера Elasticsearch
Наш кластер настроен и работает, давайте проверим настройки этого кластера, мы могли бы использовать API кластерного поиска с elasticsearch для проверки состояния кластера (подробно рассмотрим API-интерфейсы кластера в статьях серии ES)
curl -XGET 'http://localhost:9200/_cluster/state?pretty'
Вывод:
{ "cluster_name" : "TGS", "cluster_uuid" : "vlt_bBfJRP268MFFA5XY4w", "version" : 5, "state_uuid" : "VxN1E51xRievom5n1BDiNQ", "master_node" : "7IqQvmfdSb66AFcP0u0AZQ", "blocks" : { }, "nodes" : { "S64iPm03Qtq0-bvJipk-_A" : { "name" : "tgs-2", "ephemeral_id" : "eAChESS6TceLHHTHyfMU7g", "transport_address" : "192.168.113.32:9300", "attributes" : { "ml.machine_memory" : "134986862592", "ml.max_open_jobs" : "20", "xpack.installed" : "true", "ml.enabled" : "true" } }, "syxQbgRPS4q992NXkx3ptw" : { "name" : "tgs-3", "ephemeral_id" : "-uK6TjQ2Qz6o_6arfmRR3Q", "transport_address" : "192.168.113.33:9300", "attributes" : { "ml.machine_memory" : "134986862592", "ml.max_open_jobs" : "20", "xpack.installed" : "true", "ml.enabled" : "true" } }, "7IqQvmfdSb66AFcP0u0AZQ" : { "name" : "tgs-1", "ephemeral_id" : "OveP8d_SR0WIjVupZcW35g", "transport_address" : "192.168.113.31:9300", "attributes" : { "ml.machine_memory" : "134986862592", "xpack.installed" : "true", "ml.max_open_jobs" : "20", "ml.enabled" : "true" } } },
Это значимая часть API статуса, она показывает кластер, узлы, транспортный адрес и идентификаторы.
curl -XGET 'http://localhost:9200/_cluster/health'
Вывод:
{ "cluster_name" : "TGS", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 0, "active_shards" : 0, "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.0 }
Приведенный выше вывод отображает общее состояние кластера и его текущий статус – зеленый.