Установка и настройка ElasticSearch

<< Показать Оглавление >>

Установка > Установка и обновление сервиса статистики      

Установка и настройка ElasticSearch

Для настройки сервера Dictation Server потребуются следующие параметры установленного ElasticSearch:

•Имена хостов, на которых установлен ElasticSearch (на ОС Linux или Windows)

•Порт подключения

•Логин и пароль учетной записи в ElasticSearch

•Протокол, по которому происходит подключение

Требования

Рекомендуется, чтобы:

•сервис статистики был установлен на главном узле кластера ElasticSearch;

•всего в кластере было установлено не менее трех экземпляров ElasticSearch 7.10 (строго эта версия).

Три экземпляра ElasticSearch обеспечивают отказоустойчивость: при сбое главного узла решение о назначении нового главного узла исходит от оставшихся узлов. Это решение формируется после ответа как минимум двух узлов.

Если узлов в кластере меньше трех, при сбое главного узла назначить новый главный узел будет невозможно и запросы к системе не будут выполняться.

Установка ElasticSearch на ОС Linux

atten_red

Инструкции по установке пакета ElasticSearch на ОС Linux актуальны только для ОС Astra Linux Smolensk 1.7.5.

Установка с помощью готового скрипта

Установить ElasticSearch можно из установочного пакета, входившего в вашу поставку, с помощью готового скрипта. В процессе установки будут заданы нужные настройки.

1.Создайте файл script_install.sh и сохраните в нем код ниже.

#!/bin/bash

set -e

 

path_to_elastic=$1

elasticsearch_hosts=$2

 

#проверяет, что параметр path_to_elastic не пуст

if [ -z "${path_to_elastic}" ] || [ "${path_to_elastic}" = '""' ] ; then

  echo "Not found parameter for elasticsearch package"

  exit 1

fi

 

#устанавливает пакет ElasticSearch

dpkg -i "$path_to_elastic"

 

#проверяет, что параметр elasticsearch_hosts не пуст и создает переменные для файла конфигурации

if [ -z "${elasticsearch_hosts}" ] || [ "${elasticsearch_hosts}" = '""' ] ; then

  echo "Not found parameter for elasticsearch hosts"

  exit 1

else

for i in $elasticsearch_hosts

do

  ping_hosts+="\"$i:9300\", "

  nodes_hosts+="\"$i\", "

done

 

#правит файл конфигурации ElasticSearch

cat <<EOT > /etc/elasticsearch/elasticsearch.yml

bootstrap.memory_lock: false

cluster.name: dictation

http.port: 9200

node.data: true

node.master: true

node.name: $(echo "$elasticsearch_hosts" | cut -d" " -f1)

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

transport.tcp.port: 9300

discovery.zen.ping.unicast.hosts: [${ping_hosts::-2}]

discovery.zen.minimum_master_nodes: 1

network.host: 0.0.0.0

cluster.initial_master_nodes: [${nodes_hosts::-2}]

EOT

fi

 

#запускает ElasticSearch

systemctl enable elasticsearch.service

systemctl start elasticsearch.service

2.Запустите скрипт с помощью команд:

 sudo chmod +x script_install.sh

 sudo ./script_install.sh "<путь до установщика elasticsearch 7.10.0>" "<IP текущей машины> <IP 2-го хоста> <IP 3-го хоста>"

Параметры команды:

•путь до пакета ElasticSearch (пакет входит в вашу поставку);

•IP-адреса хостов, которые будут использоваться для кластера ElasticSearch. Первым должен идти адрес текущего хоста, на котором запускается скрипт.

Скрипт нужно запустить последовательно на каждом хосте, который входит в кластер.

info

Роль главного хоста будет выполнять тот хост, который запустится первым.

Установка вручную на три узла

1.Загрузите пакет для установки ElasticSearch, входивший в вашу поставку, и установите его:

 wget https://ftp.speechpro.com/ST/DevOps/Distr/elasticsearch-7.10.0-amd64.deb

 sudo dpkg -i elasticsearch-7.10.0-amd64.deb

2.Приведите файл конфигурации ElasticSearch /etc/elasticsearch/elasticsearch.yml к следующему виду (в этом примере показана установка на три узла):

bootstrap.memory_lock: false

cluster.name: dictation

http.port: 9200

node.data: true

node.master: true

node.name: <IP текущей машины>

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

transport.tcp.port: 9300

discovery.zen.ping.unicast.hosts: ["<IP текущей машины>:9300", "<IP 2-го хоста>:9300", "<IP 3-го хоста>:9300"]

discovery.zen.minimum_master_nodes: 1

network.host: 0.0.0.0

cluster.initial_master_nodes: ["<IP текущей машины>", "<IP 2-го хоста>", "<IP 3-го хоста>"]

3.Активируйте и запустите службу:

 sudo systemctl enable elasticsearch.service

 sudo systemctl start elasticsearch.service

Установка вручную на один узел

1.Загрузите пакет для установки ElasticSearch, входивший в вашу поставку, и установите его:

 wget https://ftp.speechpro.com/ST/DevOps/Distr/elasticsearch-7.10.0-amd64.deb

 sudo dpkg -i elasticsearch-7.10.0-amd64.deb

2.Приведите файл конфигурации ElasticSearch /etc/elasticsearch/elasticsearch.yml к следующему виду:

bootstrap.memory_lock: false

cluster.name: dictation

http.port: 9200

node.data: true

node.master: true

node.name: <IP текущей машины>

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: <IP текущей машины>

discovery.type: single-node # параметр, необходимый для работы ElasticSearch, если он развернут на одном узле

3.Активируйте и запустите службу:

 sudo systemctl enable elasticsearch.service

 sudo systemctl start elasticsearch.service

Настройка авторизации по логину и паролю

При установке на один узел:

1.Добавьте в файл конфигурации /etc/elasticsearch/elasticsearch.yml строку:

xpack.security.enabled: true

2.Задайте пароль пользователю, который будет подключаться к ElasticSearch, командой:

 /usr/share/elasticsearch/bin/elasticsearch-users useradd {{ elasticsearch_user }} -p {{ elasticsearch_password }} -r {{ elasticsearch_role }}

Параметры команды:

•elasticsearch_user — пользователь, который будет входить в систему;

•elasticsearch_password — пароль для этого пользователя;

•elasticsearch_role — роль пользователя.

Пример:

 /usr/share/elasticsearch/bin/elasticsearch-users useradd admin -p 1q2w3E4R -r superuser

При установке на несколько узлов:

1.Остановите службу ElasticSearch:

 sudo systemctl stop elasticsearch.service

2.Добавьте в файл конфигурации /etc/elasticsearch/elasticsearch.yml строку:

xpack.security.enabled: true

3.Сформируйте внутренний сертификат:

a.Создайте центр сертификации кластера на любом узле кластера с помощью инструмента elasticsearch-certutil. Задайте пароль либо используйте настройки по умолчанию:

 /usr/share/elasticsearch/bin/elasticsearch-certutil ca

Присвойте имя elastic-stack-ca.p12 созданному файлу.

b.Сформируйте сертификат и закрытый ключ для узлов кластера в центре сертификации. Включите в команду файл elastic-stack-ca.p12, созданный на предыдущем шаге.

 /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

Перейдите в директорию /usr/share/elasticsearch/ и скопируйте созданный сертификат.

4.Скопируйте сертификат elastic-certificates.p12 в директорию /etc/elasticsearch/ на каждом узле кластера.

5.Убедитесь, что права настроены корректно:

 chown elasticsearch: /etc/elasticsearch/elastic-certificates.p12

6.Если вы задавали пароль при создании сертификата для узлов кластера, сохраните этот пароль в хранилище ключей ElasticSearch. Для этого выполните приведенные ниже команды на каждом узле кластера.

 /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

 /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

7.Убедитесь, что скопировали сертификат на все узлы кластера, и добавьте в файлы конфигурации /etc/elasticsearch/elasticsearch.yml каждого узла строки:

 xpack.security.transport.ssl.enabled: true

 xpack.security.transport.ssl.verification_mode: certificate

 xpack.security.transport.ssl.client_authentication: required

 xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

8.На каждом узле кластера задайте пароль пользователю, который будет подключаться к ElasticSearch, командой:

 /usr/share/elasticsearch/bin/elasticsearch-users useradd {{ elasticsearch_user }} -p {{ elasticsearch_password }} -r {{ elasticsearch_role }}

Параметры команды:

•elasticsearch_user — пользователь, который будет входить в систему;

•elasticsearch_password — пароль для этого пользователя;

•elasticsearch_role — роль пользователя.

Пример:

 /usr/share/elasticsearch/bin/elasticsearch-users useradd admin -p 1q2w3E4R -r superuser

9.Запустите службу ElasticSearch.

Установка ElasticSearch на ОС Windows

atten_red

При установке пакета ElasticSearch на ОС Windows необходимо также установить и настроить nginx.

Установка через графический интерфейс инсталлятора

1.Запустите инсталлятор. В первом окне убедитесь, что напротив Use default directories установлен флажок, и нажмите Next.

2.Во втором окне убедитесь, что выбраны следующие опции:

oInstall as a service;

oВ блоке Account information выбрано Use Local System Account.

3.Нажмите Next.

4.В третьем окне заполните только следующие поля (остальные заполнятся автоматически):

oВ блоке Network укажите в поле Network host IP-адрес текущего узла.

oВ блоке Discovery установите флажок напротив опции This is the first master in a new cluster. Этот флажок устанавливается для каждого узла с ElasticSearch.

oВ блоке Discovery в поле Seed Hosts введите адреса дополнительных хостов для ElasticSearch (всех остальных хостов кластера) с портом, который автоматически подставится в поле Transport Port (см.рисунок Установка ElasticSearch через графический интерфейс в ОС Windows).

5.Пройдите остальные шаги до завершения установки, не меняя настроек по умолчанию.

Установка ElasticSearch в ОС Windows

Установка ElasticSearch через графический интерфейс в ОС Windows

6.Если вы устанавливаете ElasticSearch только на один узел, приведите файл конфигурации %ProgramData%\Elastic\Elasticsearch\config\elasticsearch.yml к следующему виду:

bootstrap.memory_lock: false

cluster.name: dictation

http.port: 9200

node.data: true

node.master: true

node.name: <IP текущей машины>

path.data: C:\ProgramData\Elastic\Elasticsearch\data

path.logs: C:\ProgramData\Elastic\Elasticsearch\logs

network.host: <IP текущей машины>

discovery.type: single-node # параметр, необходимый для работы ElasticSearch, если он установлен на одном узле

Тихая установка

Вы можете установить ElasticSearch в тихом режиме.

1.В командной строке выполните команду:

msiexec.exe /i elasticsearch-7.10.0.msi /qn

2.Приведите файл конфигурации %ProgramData%\Elastic\Elasticsearch\config\elasticsearch.yml к следующему виду.

При установке на один узел:

bootstrap.memory_lock: false

cluster.name: dictation

http.port: 9200

node.data: true

node.master: true

node.name: <IP текущей машины>

path.data: C:\ProgramData\Elastic\Elasticsearch\data

path.logs: C:\ProgramData\Elastic\Elasticsearch\logs

network.host: <IP текущей машины>

discovery.type: single-node # параметр, необходимый для работы ElasticSearch, если он установлен на одном узле

При установке на три узла:

bootstrap.memory_lock: false

cluster.initial_master_nodes:

  - <IP текущей машины>

  - <IP 2-го хоста>

  - <IP 3-го хоста>

cluster.name: elasticsearch

discovery.seed_hosts:

  - <IP 2-го хоста>:9300

  - <IP 3-го хоста>:9300

http.port: 9200

network.host: <IP текущей машины>

node.data: true

node.ingest: true

node.master: true

node.max_local_storage_nodes: 1

node.name: <IP текущей машины>

path.data: C:\ProgramData\Elastic\Elasticsearch\data

path.logs: C:\ProgramData\Elastic\Elasticsearch\logs

transport.tcp.port: 9300

xpack.license.self_generated.type: basic

xpack.security.enabled: false

Настройка nginx

1.Установите nginx.

2.Добавьте в секцию http файла конфигурации nginx.conf (расположение зависит от места установки, например С:\nginx\conf\nginx.conf) следующие строки:

  server {

    listen 19200;

    server_name <IP текущей машины>;

  

    location / {

      proxy_pass http://<IP текущей машины>:9200/;

      proxy_redirect off;

      add_header x-elastic-product "Elasticsearch";

      proxy_set_header Host $host;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

  }

3.Запустите nginx.

4.Повторите для каждого узла (при установке ElasticSearch на несколько узлов).

5.Укажите в файлах конфигурации сервера и сервиса статистики адрес http://<IP главного узла>:19200/ для подключения к ElasticSearch.

Настройка авторизации по логину и паролю

При установке на один узел:

1.Добавьте в файл конфигурации строку:

xpack.security.enabled: true

2.Запустите командную строку от имени администратора.

3.Выполните команду для задания пароля пользователю, который будет подключаться к ElasticSearch:

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-users" useradd {{ elasticsearch_user }} -p {{ elasticsearch_password }} -r {{ elasticsearch_role }}

Параметры команды:

•elasticsearch_user — пользователь, который будет входить в систему;

•elasticsearch_password — пароль для этого пользователя;

•elasticsearch_role — роль пользователя.

Пример:

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-users" useradd admin -p 1q2w3E4R -r superuser

4.Перезапустите службу ElasticSearch.

При установке на несколько узлов:

1.Остановите службу ElasticSearch через Службы.

2.Добавьте в файл конфигурации %ProgramData%\Elastic\Elasticsearch\config\elasticsearch.yml строку:

xpack.security.enabled: true

3.Запустите командную строку от имени администратора.

4.Сформируйте внутренний сертификат:

a.Создайте центр сертификации кластера на любом узле кластера с помощью инструмента elasticsearch-certutil. Задайте пароль либо используйте настройки по умолчанию:

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-certutil" ca

Присвойте имя elastic-stack-ca.p12 созданному файлу.

b.Сформируйте сертификат и закрытый ключ для узлов кластера в центре сертификации. Включите в команду файл elastic-stack-ca.p12, созданный на предыдущем шаге.

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-certutil" cert --ca elastic-stack-ca.p12

Перейдите в папку %Programfiles%\Elastic\Elasticsearch\7.10.0 и скопируйте из нее сертификат.

5.Скопируйте сертификат elastic-certificates.p12 в папку %ProgramData%\Elastic\Elasticsearch\config на каждом узле кластера.

6.Если вы задавали пароль при создании сертификата для узлов кластера, сохраните этот пароль в хранилище ключей ElasticSearch. Для этого выполните приведенные ниже команды на каждом узле кластера.

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-keystore" add xpack.security.transport.ssl.keystore.secure_password

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-keystore" add xpack.security.transport.ssl.truststore.secure_password

7.Убедитесь, что скопировали сертификат на все узлы кластера, и добавьте в конец файла конфигурации %ProgramData%\Elastic\Elasticsearch\config\elasticsearch.yml каждого узла строки:

 xpack.security.transport.ssl.enabled: true

 xpack.security.transport.ssl.verification_mode: certificate

 xpack.security.transport.ssl.client_authentication: required

 xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

8.На каждом узле кластера задайте пароль пользователю, который будет подключаться к ElasticSearch, командой:

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-users" useradd {{ elasticsearch_user }} -p {{ elasticsearch_password }} -r {{ elasticsearch_role }}

Параметры команды:

•elasticsearch_user — пользователь, который будет входить в систему;

•elasticsearch_password — пароль для этого пользователя;

•elasticsearch_role — роль пользователя.

Пример:

 "C:\Program Files\Elastic\Elasticsearch\7.10.0\bin\elasticsearch-users" useradd admin -p 1q2w3E4R -r superuser

9.Запустите службу ElasticSearch.

Проверка состояния

Проверить состояние кластера ElasticSearch можно с помощью запросов в браузере.

http://<IP главного узла>:9200/_cluster/state

Этот запрос выведет все узлы кластера с указанием главного узла.

Пример вывода:

Состав кластера

Вывод состава кластера

http://<IP главного узла>:9200/_cluster/health

Этот запрос выведет состояние кластера.

Пример вывода:

Состояние кластера

Вывод состояния кластера