Установка та налаштування Elasticsearch в Ubuntu 20.04

Neron

Neron

Пользователи
Реєстрація
12.04.2014
Повідомлення
384
Репутація
24
Вік
33

Вступ

Elasticsearch - це платформа для розподіленого пошуку та аналізу даних у режимі реального часу. Вона користується популярністю завдяки зручності у використанні, наявності потужних характеристик та можливості масштабування.
Ця стаття розповість вам про те, як встановити Elasticsearch, налаштувати платформу під ваш варіант використання, забезпечити безпеку встановлення та розпочати роботу з вашим сервером Elasticsearch.

Попередні вимоги

Для роботи з цим навчальним посібником вам знадобиться наступне:
  • Сервер Ubuntu 20.04 з 4 ГБ оперативної пам'яті та 2 процесорами, а також налаштований користувач без прав root із привілеями sudo. Ви можете це зробити, скориставшись рекомендаціями щодо початкового настроювання сервера з Ubuntu 20.04.
  • Встановлений OpenJDK 11
У цьому навчальному посібнику ми будемо використовувати мінімальну кількість процесорів та оперативної пам'яті, необхідну для роботи з Elasticsearch. Зверніть увагу, що вимоги сервера Elasticsearch до кількості процесорів, оперативної пам'яті та системи зберігання даних залежать від очікуваного обсягу журналів.

Крок 1 - Встановлення та налаштування Elasticsearch

Компоненти Elasticsearch відсутні у репозиторіях пакетів Ubuntu за замовчуванням. Однак їх можна встановити за допомогою APT після додавання списку джерел пакетів Elastic.

Усі пакети підписані ключем підпису Elasticsearch для захисту вашої системи від підроблених пакетів. Ваш диспетчер пакетів буде вважати надійними пакети, для яких здійснено автентифікацію за допомогою ключа. На цьому кроці ви імпортуєте відкритий ключ Elasticsearch GPG і додати список джерел Elastic пакетів для встановлення Elasticsearch.

Для початку використовуйте cURL, інструмент командного рядка передачі даних за допомогою URL, для імпорту відкритого ключа Elasticsearch GPG в APT. Зверніть увагу, що ми використовуємо аргументи -fsSL для придушення всіх поточних та можливих помилок (крім збою сервера), а також щоб дозволити cURL подати запит на інші локації під час переадресації. Виведіть результати команди cURL у програму apt-key, яка додасть відкритий ключ GPG до APT.
Код:
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Потім додайте список джерел Elastic до директорії sources.list.d, де APT шукатиме нові джерела:
Код:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Потім оновіть списки пакетів, щоб APT могло прочитати нове джерело Elastic:
Код:
sudo apt update
Встановіть Elasticsearch за допомогою наступної команди:
Код:
sudo apt install elasticsearch
Тепер система Elasticsearch встановлена і готова до налаштування.

Крок 2 - Налаштування Elasticsearch

Для налаштування Elasticsearch ми змінимо її основний конфігураційний файл elasticsearch.yml, де зберігається більшість варіантів конфігурації. Цей файл знаходиться в директорії /etc/elasticsearch.

Використовуйте текстовий редактор для вибору файлу конфігурації Elasticsearch. Ми будемо використовувати nano:
Код:
sudo nano /etc/elasticsearch/elasticsearch.yml
Примітка. Файл конфігурації Elasticsearch представлений у форматі YAML. Це означає, що потрібно зберегти формат відступів. Не додавайте жодних додаткових пробілів під час редагування цього файлу.
Файл elasticsearch.yml надає варіанти конфігурації для кластера, вузла, шляху, пам'яті, мережі, виявлення та шлюзу. Більшість із цих варіантів вже налаштовані у файлі, але ви можете змінити їх відповідно до ваших потреб. У нашому випадку для демонстрації односерверної конфігурації ми регулюватимемо налаштування тільки для хоста мережі.

Elasticsearch прослуховує весь трафік порту 9200. За бажанням ви можете обмежити зовнішній доступ до вашого екземпляра Elasticsearch, щоб сторонні не змогли прочитати ваші дані або відключити ваш кластер Elasticsearch через [REST API] (https://en.wikipedia.org/wiki/Representational_ ). Для обмеження доступу та підвищення безпеки знайдіть рядок із зазначенням network.host, приберіть з нього значок коментаря та замініть значення на localhost, щоб він виглядав таким чином:
/etc/elasticsearch/elasticsearch.yml
YAML:
. . .
# ---------------------------------- 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 може зайняти деякий час. В іншому випадку можна побачити повідомлення про помилку підключення.
Код:
sudo systemctl start elasticsearch
Потім запустіть наступну команду, щоб активувати Elasticsearch при кожному завантаженні сервера:
Код:
sudo systemctl enable elasticsearch

Крок 3 - Захист Elasticsearch

За замовчуванням будь-який користувач, який має доступ до HTTP API, може контролювати Elasticsearch. Це не завжди пов'язане з ризиком для безпеки, оскільки Elasticsearch прослуховує лише циклічний інтерфейс (мається на увазі 127.0.0.1), доступ до якого лише локальний. Таким чином, неможливо отримати публічний доступ до сервера, і, поки всі користувачі сервера перевірені, питання безпеки не буде для вас серйозною проблемою.

Якщо вам потрібно дозволити віддалений доступ до HTTP API, ви можете обмежити відкритість мережі за допомогою налаштувань брандмауера Ubuntu за замовчуванням, UFW. Цей брандмауер вже повинен бути активований, якщо ви виконали всі попередні кроки з початкового настроювання сервера з Ubuntu 20.04.

Тепер ми налаштуємо брандмауер для доступу до порту HTTP API Elasticsearch за замовчуванням (TCP 9200) для віддаленого хоста. Як правило, це сервер, який ви використовуєте для налаштування на одному сервері, наприклад 198.51.100.0. Для доступу введіть таку команду:
Код:
sudo ufw allow from 198.51.100.0 to any port 9200
Після цього ви можете активувати UFW за допомогою команди:
Код:
sudo ufw enable
На закінчення перевірте статус UFW за допомогою наступної команди:
Код:
sudo ufw status
Якщо ви правильно вказали правила, ви повинні отримати наступний результат:
Output
Status: active

To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
Тепер UFW має бути активовано та налаштовано на захист порту Elasticsearch 9200.

Якщо ви хочете інвестувати в додатковий захист, Elasticsearch пропонує купити платний плагін Shield.

Крок 4 - Тестування Elasticsearch

Зараз система Elasticsearch має працювати на порту 9200. Ви можете протестувати її за допомогою cURL та запиту GET.
Код:
curl -X GET 'http://localhost:9200'
Ви повинні отримати наступну відповідь:
Output
{
"name" : "elasticsearch-ubuntu20-04",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Якщо ви отримаєте відповідь, аналогічну вищезгаданій, значить Elasticsearch працює коректно. Якщо ні, переконайтеся, що ви правильно виконали інструкції з встановлення та дали час системі Elasticsearch для повного запуску.

Для більш ретельної перевірки Elasticsearch виконайте таку команду:
Код:
curl -XGET 'http://localhost:9200/_nodes?pretty'
У виводі для команди, зазначеної вище, ви можете перевірити всі поточні налаштування для вузла, кластера, шляхів програми, модулів і т.д.

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

Щоб почати використовувати Elasticsearch, спочатку потрібно додати деякі дані. Elasticsearch використовує RESTful API, який відповідає звичайним командам CRUD: create, read, update та delete. Для роботи ми знову використовуємо команду cURL.

Ваш перший запис може виглядати так:
Код:
curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Ви повинні отримати наступну відповідь:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
За допомогою cURL ми надіслали запит HTTP POST на сервер Elasticsearch. URI запиту - /tutorial/helloworld/1 з кількома параметрами:

  • tutorial - це індекс даних в Elasticsearch.
  • helloworld – це тип.
  • 1 — це ID нашого запису за індексом та типом.
Ви можете отримати цей перший запис на запит HTTP GET.
Код:
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Виведення має виглядати так:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
Для зміни існуючого запису можна використовувати запит HTTP PUT.
Код:
curl -X PUT -H "Content-Type: application/json"  'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
  "message": "Hello, People!"
}'
Elasticsearch повинна визнати успішну зміну таким чином:
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
У прикладі, наведеному вище, ми змінили message першого запису на «Hello, People!». Номер версії автоматично збільшився до 2.

Можливо, ви помітили додатковий аргумент pretty у наведеному вище запиті. Він забезпечує зручний для сприйняття людиною формат і ви можете для написання кожного поля даних використовувати новий ряд. Ви також можете «прикрасити» ваші результати при отриманні даних, щоб отримати більш читабельне виведення шляхом введення наступної команди:
Код:
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'
Тепер відповідь відформатована так, щоб синтаксис був зручний для людини:
{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}

}
Ми додали та запросили дані в Elasticsearch. Інформацію про інші операції можна знайти у документації API.

Висновок​

Ви встановили, налаштували та почали використовувати Elasticsearch. Щоб продовжити вивчення функцій Elasticsearch, ознайомтеся з офіційною документацією Elasticsearch.
 
Назад
Зверху