Как да инсталирате и конфигурирате Elasticsearch на Rocky Linux 9


Въведение

Elasticsearch е платформа за разпределено търсене и анализ на данни в реално време. Това е популярен избор поради неговата използваемост, мощни функции и мащабируемост.

Тази статия ще ви преведе през инсталирането на Elasticsearch 8.x, конфигурирането му за вашия случай на употреба, защитата на вашата инсталация и започването на работа с вашия сървър Elasticsearch.

Предпоставки

Преди да следвате този урок, ще ви трябва:

  • Сървър Rocky Linux 9 с 2 GB RAM и 2 процесора, настроен с различен от root sudo потребител. Можете да постигнете това, като следвате първоначалната настройка на сървъра с Rocky Linux 9

Elasticsearch може да има относително високи изисквания, тъй като си разпределя около 1 GB RAM по подразбиране, така че имайте предвид, че може да се наложи да активирате суап в среда с ограничена памет. Количеството CPU, RAM и паметта, които вашият Elasticsearch сървър ще изисква зависи от това колко записи генерирате.

Стъпка 1 — Инсталиране и конфигуриране на Elasticsearch

Преди да инсталирате Elasticsearch, трябва да се уверите, че имате инсталиран използваем текстов редактор. Текстовият редактор по подразбиране, който идва с Rocky Linux 9, е vi. vi е изключително мощен текстов редактор, но може да бъде донякъде тъп за потребители, които нямат опит с него. Може да искате да инсталирате по-удобен за потребителя редактор като nano, за да улесните редактирането на конфигурационните файлове на вашия сървър Rocky Linux 9:

  1. sudo dnf install nano -y

Сега можете да продължите с инсталирането на Elasticsearch. Компонентите Elasticsearch не са налични в хранилищата на пакети по подразбиране на Rocky. Вместо това те могат да бъдат включени от хранилища, поддържани от проекта Elasticsearch.

Всички пакети са подписани с ключа за подписване на Elasticsearch, за да защитите системата си от подправяне на пакети. Пакетите, които са били удостоверени с помощта на ключа, ще се считат за надеждни от вашия мениджър на пакети. В тази стъпка ще импортирате публичния GPG ключ на Elasticsearch и ще добавите списъка с източници на пакети Elastic, за да инсталирате Elasticsearch.

За да започнете, използвайте пакетния инструмент rpm, за да импортирате ключа от elastic.co:

  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

След това, като използвате nano или любимия си текстов редактор, създайте файл, наречен elasticsearch.repo в директорията /etc/yum.repos.d/ , така че вашият мениджър на пакети да може да се свърже с хранилището на Elasticsearch:

  1. sudo nano /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Частта gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch на файла инструктира вашия мениджър на пакети да използва ключа, който сте изтеглили, за да провери информацията за хранилището и файла за пакетите Elasticsearch.

Запазете и затворете файла. Ако използвате nano, можете да запазите и излезете, като използвате Ctrl+X, след това, когато бъдете подканени, Y и след това Enter.

Накрая инсталирайте Elasticsearch с мениджъра на пакети dnf:

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch

Натиснете y, когато бъдете подканени да потвърдите инсталирането.

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

Output
--------------------------- Security autoconfiguration information ------------------------------ Authentication and authorization are enabled. TLS for the transport and HTTP layers is enabled and configured. The generated password for the elastic built-in superuser is : CH77_qG8ji8QCxwUCr3w

Запишете си тази парола, тъй като ще я използвате по-късно в този урок и ще ви е необходима, за да създадете други потребители на Elasticsearch. Elasticsearch вече е инсталиран и готов за конфигуриране.

Стъпка 2 — Конфигуриране на Elasticsearch

За да конфигурирате Elasticsearch, ще редактирате основния му конфигурационен файл elasticsearch.yml, където се съхраняват повечето от неговите опции за конфигуриране. Този файл се намира в директорията /etc/elasticsearch.

Отворете конфигурационния файл на Elasticsearch, като използвате nano или любимия си текстов редактор:

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

Забележка: Конфигурационният файл на Elasticsearch е във формат YAML, което означава, че трябва да поддържате синтаксиса на отстъпа. Уверете се, че не добавяте допълнителни интервали, докато редактирате този файл.

Файлът elasticsearch.yml предоставя опции за конфигурация за вашия клъстер, възел, пътища, памет, мрежа, откриване и шлюз. Повечето от тези опции са предварително конфигурирани във файла, но можете да ги промените според вашите нужди. За целите на тази конфигурация с един сървър ще коригирате настройките само за мрежовия хост.

Elasticsearch слуша за трафик отвсякъде на порт 9200. Това не е толкова голям проблем в Elasticsearch 8.x, колкото беше в предишните версии, тъй като Elasticsearch вече изисква удостоверяване по подразбиране. И все пак най-вероятно ще трябва да ограничите външния достъп до вашия екземпляр на Elasticsearch, за да попречите на външни лица да четат вашите данни или да изключат вашия клъстер Elasticsearch чрез [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer). За да ограничите достъпа, намерете реда, който посочва network.host, разкоментирайте го, като премахнете # в началото на реда и го заменете стойност с localhost, така че да се чете така:

. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

Указването на localhost позволява на Elasticsearch да слуша всички интерфейси и обвързани IP адреси. Ако искате да слуша само конкретен интерфейс, можете да посочите неговия IP вместо localhost. Запазете и затворете elasticsearch.yml. Ако използвате nano, можете да запазите и излезете, като използвате Ctrl+X, след това, когато бъдете подканени, Y и след това Enter.

Това са минималните настройки, с които можете да започнете, за да използвате Elasticsearch. Сега можете да стартирате Elasticsearch за първи път.

Стартирайте услугата Elasticsearch с systemctl. Дайте на Elasticsearch няколко минути, за да стартира. В противен случай може да получите грешки, че не можете да се свържете.

  1. sudo systemctl start elasticsearch

След това изпълнете следната команда, за да активирате Elasticsearch да стартира всеки път, когато вашият сървър се зарежда:

  1. sudo systemctl enable elasticsearch

С активиран Elasticsearch при стартиране, нека преминем към следващата стъпка, за да обсъдим сигурността.

Стъпка 3 — Защита на Elasticsearch

Elasticsearch може да се контролира от всеки, който има достъп до HTTP API. Това не е непременно риск за сигурността, защото вече сте конфигурирали Elasticsearch да слуша само на localhost и тъй като Elasticsearch 8+ задава администраторска парола по подразбиране.

Ако трябва да разрешите отдалечен достъп до HTTP API, можете да ограничите излагането на мрежата с firewalld. Тази защитна стена трябва вече да е активирана, ако сте следвали стъпките в предпоставката за създаване на профил на защитна стена, който отваря или ограничава порт 9200.

Ако искате да инвестирате в допълнителна защита, Elasticsearch предлага търговския плъгин Shield за закупуване.

Стъпка 4 — Тестване на Elasticsearch

Досега Elasticsearch трябва да работи на порт 9200. Можете да го тествате, като направите стандартна HTTP GET заявка към localhost:9200 с curl. От Elasticsearch 8.x API на Elasticsearch изисква HTTPS удостоверяване по подразбиране, така че можете да включите предоставения му сертификат в заявката, като използвате аргумента --cacert. И накрая, включете аргумента -u elastic, за да посочите потребителското име на администратора по подразбиране, elastic.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

Ще бъдете подканени да въведете администраторската парола, която сте получили при инсталирането. След удостоверяване трябва да получите следния отговор:

Output
{ "name" : "elasticrocky", "cluster_name" : "elasticsearch", "cluster_uuid" : "_hb4dLuuR-ipiloXHT_AMw", "version" : { "number" : "8.5.3", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e", "build_date" : "2022-12-05T18:22:22.226119656Z", "build_snapshot" : false, "lucene_version" : "9.4.2", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

Ако получите отговор, подобен на този по-горе, Elasticsearch работи правилно. Ако не, уверете се, че сте следвали инструкциите за инсталиране правилно и сте оставили известно време Elasticsearch да стартира напълно.

За да извършите по-задълбочена проверка на Elasticsearch, опитайте да направите заявка до крайната точка _nodes и добавете ?pretty в края на заявката, за да получите форматиране на текст, който може да се чете от човека:

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_nodes?pretty
[secondary label Output]
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "7TgeSgV2Tma0quqd6Mw6hQ" : {
…

По този начин можете да проверите всички текущи настройки за възела, клъстера, пътищата на приложението, модулите и др.

Стъпка 5 — Използване на Elasticsearch

За да започнете да използвате Elasticsearch, нека първо добавим някои данни. Elasticsearch използва RESTful API, който отговаря на обичайните CRUD команди: създаване, четене, актуализиране и изтриване. За да изпратите данни към API, ще използвате отново curl, но този път ще направите PUT, а не GET заявка от указване на -X PUT и включване на някои JSON-форматирани данни в командния ред чрез -d.

Можете да добавите първия си запис така:

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["red"]}'

Трябва да получите следния отговор:

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

С cURL сте изпратили HTTP PUT заявка до сървъра Elasticsearch. URI адресът на заявката беше /test/_doc/1 с няколко параметъра:

  • test е индексът на данните в Elasticsearch.
  • _doc е типът.
  • 1 е ID на нашия запис под горния индекс и тип.

Можете да извлечете този първи запис с HTTP GET заявка.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X GET "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json'

Това трябва да е резултатът:

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "counter" : 1, "tags" : [ "red" ] } }

За да промените съществуващ запис, можете да използвате HTTP PUT заявка.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["blue"]}'

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

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

В горния пример променихме съобщението на първия запис на \Здравейте, хора!. С това номерът на версията беше автоматично увеличен на 2.

Може би сте забелязали допълнителния аргумент pretty в горните заявки. Той добавя формат за форматиране, така че да можете да пишете всяко поле с данни на нов ред. Без pretty изходът на Elasticsearch се връща без прекъсвания на редове или отстъпи. Това е добре за API комуникация, но е по-трудно за четене в изхода на командния ред.

Вече добавихте и поискахте данни в Elasticsearch. За да научите за другите операции, моля, проверете документацията на API.

Заключение

Вече сте инсталирали, конфигурирали и сте започнали да използвате Elasticsearch. За да проучите допълнително функционалността на Elasticsearch, моля, вижте официалната документация на Elasticsearch.