Два Elasticsearch на одном хосте. Серты и порты

Добрый день!

Скажите пожалуйста, как правильно разместить на одном хосте два Elasticsearch? Как выпустить серты для каждого, с учетом того, что серты выпускаются на ip или на dns?

Или два Elasticsearch могут работать с одним сертом?

Как разнести по портам? Например - 9200,9201 - 9300,9301?

Планирую разместить в докере.

Эластик - это распределенная система, то есть на одном хост можно установить (инсталлировать) два или более нод.
Один нод это один эластик инстанс. Более того, можно установить два и более нодов на другом хосте или хостах.
Два или более нод на одном хосте или на нескольких будут коммуникировать между собой и с внешними устройствами
с помощью портов и хост имя или айпи адресов, которые конфигурируются в elasticsearch.yml файле на каждом ноде.
Эти ноды на хосте или хостах образуют элаcтик кластер, функционирующий как единое целое.
9300,9301 и т.д. предназначены для общения между нодами 9200,9201 и т.д. для общения с внешними устройствами.
Серты подразумевают сертификат файлы ?
Если да, то ответить коротко не получится.
Я установил элаcтик кластер недавно и это взяло некоторое время для решения различных проблем по ходу.
Кластер установлен на двух хостах, два нода на каждом хосте.
На кластере я конфигурировал секюрити TLS/SSL как для внутреннего так и для наружного общения.
Для этого мне потребовалось подробно ознакомиться со всей документацией, много экспериментироваь и общаться
с эластик инженерами на форуме Testing TLS/SSL secured elastic cluster.

Серты можно генерировать (а)только для ip, (б)только для dns (с)или для ip и для dns.
Как генерировать серты https://www.elastic.co/guide/en/elasticsearch/reference/7.x/configuring-tls.html#node-certificates

bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
bin/elasticsearch-certutil http

Для докера смотри https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls-docker.html

Я бы советовал путь от простого к сложному:
-установи на докере эластик кластер с двумя нодами без секюрити
-убедись что они образовали кластер и правильно работают с помощью CURL команды
-генерируй юзера и его пароль, создай роль с опреденными пермишн, присвой эту роль юзеру.
-этот изер и пароль будешь использовать при тестировании кластера с помощью CURL команды
-добавь TLS/SSL для внутреннего обмена между нодами
-убедись что они правильно работают с помощью CURL команды
-добавь TLS/SSL для врешнего обмена между нодами
-убедись что они правильно работают с помощью CURL команды

Главное, прочитай эластик документацию и особенно тщательно в отношении секюрити. Без этого будет очень сложно. Путь непростой но преодолимый.

Удачи.

1 Like

Благодарю за ответ!

Если вы собирали через docker-compose - могли бы вы поделиться рабочим конфигом?

И я так понимаю самая большая трудность - правильно выпустить сертификаты, чтобы несколько нод работали на одном сервере. Как правильно прописать ноды в instances.yml? И как правильно потом прописать эти ноды в конфиге эластиков?

Я инсталлировал эластик кластер на RHEL (Linux) серверах
Прежде чем генерировать сертификаты, надо инстлл-ть эластик кластер минимум с двумя нодами без всякого секюрити, стартовать его убедиться что кластер работает правильно и лишь затем конфигурировать секюрити.
Ты проделал эту часть уже ?
С документацией по ссылках ознакомился ?
Трудно что то советовать, не зная на какой стадии ты находишься, какую версию эластика используешь (7.0 или 7.9) ?

Сертификаты генерируются не для того,чтобы несколько нод работали на одном сервере а для конфигурирования секюрити на кластере.
Мне кажется мы под "сертами" подрaзумеваем разные вещи или я не понял этот жаргон о "сертах" изначально.

Благодарю за ответ! Да, эту часть я проделал - на одной ноде собрал кластер, и он работает. Кластер собрал по вашей ссылке - в докере и с SSL.

Но сейчас есть одна проблема - так как есть и другие серверы, я не могу заставить видеть ноды находящиеся на 1 сервере со 2 сервера.

Со 2 сервера могу выполнить на 1 команду:

curl -XGET -k "https://es01-01-d:9200/_cluster/health?pretty=true" -u elastic:pass

но в логах:

es02-03-m | {"type": "server", "timestamp": "2020-10-26T15:30:55,336Z", "level": "WARN", "component": "o.e.d.SeedHostsResolver", "cluster.name": "es-logs-cluster", "node.name": "es02-03-m", "message": "failed to resolve host [es01-01-d]"

"Серты" - все верно, так называют сертификаты.

какая версия эластик ?
сколько серверов и нодов на каждом сервере ты конфигурировал и стартовал чтобы образовать эластик кластер ?
содержимое elasticsearch.yml конфиг файлов на серверах/нодах ?

чтобы проверить или ноды образуют кластер
curl -XGET -k "https://es01-01-d:9200/_cut/nodes?v" -u elastic:pass

какой результат этой и предыдущей команды
curl -XGET -k "https://es01-01-d:9200/_cluster/health?pretty=true" -u elastic:pass

Привет Сергей,
Хотя бы дал знать как твой проект.
Жаль потраченного на тебя времeни.
Осваивай английский.
Удачи.

Добрый день!

Извиняюсь, не увидел в почте уведомления, а на форум захожу не часто.

Прошу прощения, не держите на меня зла.

Сделал overlay-сеть для хостов, на которых установлен docker.

Сделал все по документации:

Сеть также называется elastic, но она - overlay сеть из docker-swarm.

Думаю что следующим шагом загоню все это в кубер. Сейчас контейнеры работают стабильно, держат нагрузку примерно 35000 индексируемых событий в секунду.

ok, np