Поиск по сайту:

Как установить и настроить Elasticsearch на CentOS 7


Автор выбрал программу Write for DOnations.

Введение

Elasticsearch — это платформа для распределенного поиска и анализа данных в режиме реального времени. Его популярность обусловлена простотой использования, мощными функциями и масштабируемостью.

Elasticsearch поддерживает операции RESTful. Это означает, что вы можете использовать методы HTTP (GET, POST, PUT, DELETE и т. д.) в комбинации. с HTTP URI (/collection/entry) для управления вашими данными. Интуитивно понятный подход RESTful удобен как для разработчиков, так и для пользователей, что является одной из причин популярности Elasticsearch.

Elasticsearch — это бесплатное программное обеспечение с открытым исходным кодом, за которым стоит солидная компания — Elastic. Эта комбинация делает его пригодным для многих вариантов использования, от личного тестирования до корпоративной интеграции.

Эта статья познакомит вас с Elasticsearch и покажет, как его установить, настроить и начать использовать.

Предпосылки

Чтобы следовать этому руководству, вам понадобится следующее:

  • Сервер под управлением CentOS 7 с минимум 1 ГБ памяти и пользователем sudo без полномочий root. Подробные инструкции см. в нашем Руководстве по начальной настройке сервера для CentOS 7
  • wget установлен на вашем сервере

Шаг 1 — Установка Java на CentOS 7

Elasticsearch написан на языке программирования Java. Ваша первая задача — установить среду выполнения Java (JRE) на свой сервер. Вы будете использовать собственный пакет CentOS OpenJDK для JRE. Эта JRE бесплатна, хорошо поддерживается и автоматически управляется с помощью диспетчера установки CentOS Yum.

Установите последнюю версию OpenJDK 8:

  1. sudo yum install java-1.8.0-openjdk.x86_64

Теперь проверьте вашу установку:

  1. java -version

Команда создаст такой вывод:

Output
openjdk version "1.8.0_262" OpenJDK Runtime Environment (build 1.8.0_262-b10) OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

Когда вы продвинетесь в использовании Elasticsearch и начнете искать лучшую производительность и совместимость с Java, вы можете выбрать проприетарную Java от Oracle (Oracle JDK 8). Для получения дополнительной информации обратитесь к нашей статье Как установить Java в CentOS и Fedora.

Шаг 2 — Загрузка и установка Elasticsearch на CentOS 7

Вы можете скачать Elasticsearch напрямую с сайта elastic.co в пакетах zip, tar.gz, deb или rpm. Для CentOS лучше всего использовать собственный пакет rpm, который установит все необходимое для запуска Elasticsearch.

На момент написания этой статьи последняя версия Elasticsearch — 7.9.2.

Загрузите программу из рабочего каталога по вашему выбору:

  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm

Затем установите его с помощью команды rpm:

  1. sudo rpm -ivh elasticsearch-7.9.2-x86_64.rpm

Elasticsearch будет установлен в /usr/share/elasticsearch/, его файлы конфигурации будут помещены в /etc/elasticsearch, а его сценарий инициализации будет добавлен в /etc/init. д/эластичный поиск.

Чтобы убедиться, что Elasticsearch автоматически запускается и останавливается вместе с сервером, добавьте его сценарий инициализации в уровни запуска по умолчанию:

  1. sudo systemctl enable elasticsearch.service

Установив Elasticsearch, вы теперь настроите несколько важных параметров.

Шаг 3 — Настройка Elasticsearch в CentOS 7

Теперь, когда вы установили Elasticsearch и его зависимость от Java, пришло время настроить Elasticsearch.

Файлы конфигурации Elasticsearch находятся в каталоге /etc/elasticsearch. Те, которые мы рассмотрим и отредактируем:

  • elasticsearch.yml — настраивает параметры сервера Elasticsearch. Здесь хранится большинство параметров, поэтому нас больше всего интересует этот файл.
  • jvm.options — предоставляет конфигурацию для JVM, например параметры памяти.

Первыми переменными, которые нужно настроить на любом сервере Elasticsearch, являются node.name и cluster.name в elasticsearch.yml. Давайте сделаем это сейчас.

Как следует из их названий, node.name указывает имя сервера (узла) и кластера, с которым последний связан. Если вы не настроите эти переменные, node.name будет назначено автоматически в соответствии с именем хоста сервера. cluster.name будет автоматически установлено имя кластера по умолчанию.

Значение cluster.name используется функцией автоматического обнаружения Elasticsearch для автоматического обнаружения и связывания узлов Elasticsearch с кластером. Таким образом, если вы не измените значение по умолчанию, в вашем кластере могут оказаться нежелательные узлы, находящиеся в той же сети.

Приступим к редактированию основного файла конфигурации elasticsearch.yml.

Откройте его с помощью nano или любого другого текстового редактора:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

Удалите символ # в начале строк для node.name и cluster.name, чтобы раскомментировать их, а затем измените их значения. Ваши первые изменения конфигурации в файле /etc/elasticsearch/elasticsearch.yml будут выглядеть так:

...
node.name: "My First Node"
cluster.name: mycluster1
...

Сетевые настройки также находятся в elasticsearch.yml. По умолчанию Elasticsearch будет прослушивать локальный хост на порту 9200, чтобы могли подключаться только клиенты с того же сервера. Вы должны оставить эти настройки без изменений с точки зрения безопасности, потому что бесплатная версия Elasticsearch с открытым исходным кодом не предлагает функции аутентификации.

Еще одним важным параметром является свойство node.roles. Вы можете установить значение master-eligible (просто master в конфигурации), data или ingest.

Роль master-eligible отвечает за работоспособность и стабильность кластера. В больших развертываниях с большим количеством узлов кластера рекомендуется иметь более одного выделенного узла только с ролью master. Как правило, выделенный узел master не хранит данные и не создает индексы. Таким образом, не будет шанса быть перегруженным, что может поставить под угрозу здоровье кластера.

Роль data определяет узлы, которые будут хранить данные. Даже если узел данных перегружен, работоспособность кластера не должна серьезно пострадать, при условии, что есть другие узлы, которые берут на себя дополнительную нагрузку.

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

Примечание. У одного узла может быть одна или несколько ролей, обеспечивающих масштабируемость, избыточность и высокую доступность настройки Elasticsearch. По умолчанию все эти роли назначены узлу. Это подходит для Elasticsearch с одним узлом, как в примере сценария, описанном в этой статье. Поэтому вам не нужно менять роль. Тем не менее, если вы хотите изменить роль, например назначить узел в качестве мастера, вы можете сделать это, изменив /etc/elasticsearch/elasticsearch.yml следующим образом:

...
node.roles: [ master ]
...

Еще один параметр, который следует изменить, — path.data. Это определяет путь, по которому хранятся данные, и путь по умолчанию — /var/lib/elasticsearch. В производственной среде рекомендуется использовать выделенный раздел и точку монтирования для хранения данных Elasticsearch. В лучшем случае этот выделенный раздел будет отдельным носителем данных, что обеспечит лучшую производительность и изоляцию данных. Вы можете указать другой путь path.data, раскомментировав строку path.data и изменив ее значение следующим образом:

...
path.data: /media/different_media
...

Теперь, когда вы внесли все изменения, сохраните и закройте elasticsearch.yml.

Вы также должны отредактировать свои конфигурации в jvm.options.

Напомним, что Elasticsearch запускается JVM, т.е. по сути это Java-приложение. Как и любое приложение Java, оно имеет параметры JVM, которые можно настроить в файле /etc/elasticsearch/jvm.options. Двумя наиболее важными параметрами, особенно в отношении производительности, являются Xms и Xmx, которые определяют минимум (Xms) и максимум (Xmx) выделение памяти.

По умолчанию для обоих установлено значение 1 ГБ, но это почти никогда не бывает оптимальным. Кроме того, если на вашем сервере всего 1 ГБ ОЗУ, вы не сможете запустить Elasticsearch с настройками по умолчанию. Это связано с тем, что операционная система занимает не менее 100 МБ, поэтому невозможно выделить 1 ГБ для Elasticsearch.

К сожалению, универсальной формулы расчета параметров памяти не существует. Естественно, чем больше памяти вы выделите, тем выше будет ваша производительность, но убедитесь, что на сервере осталось достаточно памяти для остальных процессов. Например, если на вашем компьютере 1 ГБ ОЗУ, вы можете установить для Xms и Xmx значение 512 МБ, тем самым оставив еще 512 МБ для остальной части. процессы. Обратите внимание, что обычно для Xms и Xmx установлено одно и то же значение, чтобы избежать потери производительности при сборке мусора JVM.

Если на вашем сервере всего 1 ГБ ОЗУ, вы должны отредактировать этот параметр.

Откройте jvm.options:

  1. sudo nano /etc/elasticsearch/jvm.options

Теперь измените значения Xms и Xmx на 512MB:

...
-Xms512m
-Xmx512m
...

Сохраните и закройте файл.

Теперь запустите Elasticsearch в первый раз:

  1. sudo service elasticsearch start

Подождите не менее 10 секунд для запуска Elasticsearch, прежде чем пытаться его использовать. В противном случае вы можете получить ошибку подключения.

Примечание. Вы должны знать, что не все настройки Elasticsearch задаются и хранятся в файлах конфигурации. Вместо этого некоторые параметры задаются через его API, например index.number_of_shards и index.number_of_replicas. Первый определяет, на сколько частей (осколков) будет разбит индекс. Второй определяет количество реплик, которые будут распределены по кластеру. Наличие большего количества сегментов повышает производительность индексирования, а наличие большего количества реплик ускоряет поиск.

Предполагая, что вы все еще исследуете и тестируете Elasticsearch на одном узле, вы можете поиграть с этими настройками и изменить их, выполнив следующую команду curl:

  1. curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
  2. "index.number_of_replicas" : "0",
  3. "index.number_of_shards" : "1"
  4. }'

Установив и настроив Elasticsearch, вы теперь защитите и протестируете сервер.

Шаг 4 — (Необязательно) Защита Elasticsearch в CentOS 7

Elasticsearch не имеет встроенной системы безопасности, и любой, у кого есть доступ к HTTP API, может ею управлять. Этот раздел не является исчерпывающим руководством по обеспечению безопасности Elasticsearch. Примите все необходимые меры для предотвращения несанкционированного доступа к нему и серверу/виртуальной машине, на которой он работает.

По умолчанию Elasticsearch настроен на прослушивание только на локальном сетевом интерфейсе, т. е. удаленные подключения невозможны. Вам следует оставить этот параметр без изменений, если только вы не предприняли одну или обе из следующих мер:

  • Вы ограничили доступ к TCP-порту 9200 только доверенными хостами с iptables.
  • Вы создали VPN между доверенными хостами и собираетесь предоставить Elasticsearch на одном из виртуальных интерфейсов VPN.

Только после того, как вы сделаете все вышеперечисленное, вы можете разрешить Elasticseach прослушивать другие сетевые интерфейсы, кроме локального хоста. Такое изменение можно рассмотреть, например, когда вам нужно подключиться к Elasticsearch с другого хоста.

Чтобы изменить доступ к сети, откройте файл elasticsearch.yml:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

В этом файле найдите строку, содержащую network.host, раскомментируйте ее, удалив символ # в начале строки, а затем измените значение на IP-адрес защищенный сетевой интерфейс. Строка будет выглядеть примерно так:

...
network.host: 10.0.0.1
...

Предупреждение. Поскольку Elasticsearch не имеет встроенной защиты, очень важно, чтобы вы не устанавливали для этого какой-либо IP-адрес, доступный для любых серверов, которые вы не контролируете или которым не доверяете. Не привязывайте Elasticsearch к общедоступному или совместно используемому IP-адресу частной сети.

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

Чтобы отключить настраиваемые выражения, добавьте следующую строку в конец файла /etc/elasticsearch/elasticsearch.yml:

...
[label /etc/elasticsearch/elasticsearch.yml]
script.allowed_types: none
...

Чтобы вышеуказанные изменения вступили в силу, вам придется перезапустить Elasticsearch.

Перезапустите Elasticsearch сейчас:

  1. sudo service elasticsearch restart

На этом шаге вы предприняли некоторые меры для защиты вашего сервера Elasticsearch. Теперь вы готовы протестировать приложение.

Шаг 5 — Тестирование Elasticsearch на CentOS 7

К настоящему времени Elasticsearch должен работать на порту 9200. Вы можете проверить это с помощью curl, инструмента командной строки для передачи URL-адресов на стороне клиента.

Чтобы протестировать сервис, сделайте запрос GET следующим образом:

  1. curl -X GET 'http://localhost:9200'

Вы увидите следующий ответ:

Output
{ "name" : "My First Node", "cluster_name" : "mycluster1", "cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw", "version" : { "number" : "7.9.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e", "build_date" : "2020-09-23T00:45:33.626720Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

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

Ваш сервер Elasticsearch теперь работает. На следующем шаге вы добавите и получите некоторые данные из приложения.

Шаг 6 — Использование Elasticsearch в CentOS 7

На этом шаге вы добавите некоторые данные в Elasticsearch, а затем сделаете несколько запросов вручную.

Используйте curl, чтобы добавить первую запись:

  1. curl -H 'Content-Type: application/json' -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Вы увидите следующий вывод:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4

Используя curl, вы отправили HTTP-запрос POST на сервер Elasticseach. URI запроса был /tutorial/helloworld/1. Рассмотрим эти параметры подробнее:

  • tutorial – это индекс данных в Elasticsearch.
  • helloworld — это тип.
  • 1 — это идентификатор нашей записи с указанным выше индексом и типом.

Обратите внимание, что также необходимо установить тип контента для всех запросов POST в JSON с аргументом -H Content-Type: application/json. Если вы этого не сделаете, Elasticsearch отклонит ваш запрос.

Теперь получите первую запись с помощью HTTP-запроса GET:

  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

Результат будет выглядеть так:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}

Чтобы изменить существующую запись, вы можете использовать HTTP-запрос PUT следующим образом:

  1. curl -H 'Content-Type: application/json' -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello People!"
  4. }'

Elasticsearch подтвердит успешную модификацию следующим образом:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

В приведенном выше примере вы изменили сообщение первой записи на Hello People!. При этом номер версии увеличился до 2.

Чтобы сделать вывод ваших операций GET более удобочитаемым, вы также можете «украсить» свои результаты, добавив аргумент pretty:

  1. curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'

Теперь ответ будет выводиться в более читаемом формате:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello People!" } }

Вот как вы можете добавлять и запрашивать данные в Elasticsearch. Чтобы узнать о других операциях, вы можете проверить документацию по API Elasticsearch.

Заключение

В этом руководстве вы установили, настроили и начали использовать Elasticsearch в CentOS 7. Когда вы освоитесь с ручными запросами, вашей следующей задачей будет начать использовать службу из ваших приложений.