В предыдущей статье был установлен Elasticsearch на примере CentOS 7. Для того, чтобы создать кластер нам необходимо минимум 2 инстанса с установленным Elasticsearch.
Так как это тестовая среда, то в кластере будет 2 воркера Elasticsearch, а так рекомендуется нечетное количество, и минимальное количество — 3.
Откроем файл конфигурации Elasticsearch:
vim /etc/elasticsearch/elasticsearch.yml
Тут нам интересны следующее параметры:
- cluster.name — имя кластера;
- node.name: имя ноды;
- network.host: IP адрес, который сервер будет "слушать".
Мне на AWS такого "минимального набора" не хватило, Elasticsearch падал с таким сообщением в лог:
bound or publishing to a non-loopback address, enforcing bootstrap checks
Виной тому параметр "network.bind_host" и "network.publish_host". Привел конфиг к следующему виду:
cluster.name: artem-es node.name: node-US node.master: true node.data: true network.host: 0.0.0.0 network.bind_host: 0.0.0.0 network.publish_host: 1.1.1.1
Elasticsearch перестал падать при запуске.
Имя ноды: node-US, так как тестил запуск кластера Elasticsearch в разных зонах.
Второй инстанс настроим по тому же подобию. И так есть 2 инстанса, это node-US и node-EU.
Неоходимо разрешить им доступ к друг другу по TCP порту 9300. На AWS это делается в SecureGroup, если вы запускали не на AWS, то добавьте разрешающие правило в фаерволе.
Теперь все готово, чтобы объединить наши ноды в кластер.
Вернемся опять к файлу конфигурации:
vim /etc/elasticsearch/elasticsearch.yml
И добавим следующее:
discovery.zen.ping.unicast.hosts: ["1.1.1.1", "2.2.2.2"] discovery.zen.minimum_master_nodes: 1
Получилось следующее.
Хост node-US:
cluster.name: artem-es node.name: node-US node.master: true node.data: true network.host: 0.0.0.0 network.bind_host: 0.0.0.0 network.publish_host: 1.1.1.1 discovery.zen.ping.unicast.hosts: ["1.1.1.1", "2.2.2.2"] discovery.zen.minimum_master_nodes: 1
Хост node-EU:
cluster.name: artem-es node.name: node-EU node.master: true node.data: true network.host: 0.0.0.0 network.bind_host: 0.0.0.0 network.publish_host: 2.2.2.2 discovery.zen.ping.unicast.hosts: ["1.1.1.1", "2.2.2.2"] discovery.zen.minimum_master_nodes: 1
Посмотреть список хостов в кластере можно так:
curl -X GET localhost:9200/_cat/nodes?v
Состояние кластера:
curl -X GET localhost:9200/_cluster/health?pretty
На этом статья о установке Elasticsearch кластера, в следующей мы к уже существующему кластеру прикрутим Kibana.