Neron
Пользователи
- Реєстрація
- 12.04.2014
- Повідомлення
- 384
- Репутація
- 24
- Вік
- 33
Вступ
Elasticsearch - це платформа для розподіленого пошуку та аналізу даних у режимі реального часу. Вона користується популярністю завдяки зручності у використанні, наявності потужних характеристик та можливості масштабування.Ця стаття розповість вам про те, як встановити Elasticsearch, налаштувати платформу під ваш варіант використання, забезпечити безпеку встановлення та розпочати роботу з вашим сервером Elasticsearch.
Попередні вимоги
Для роботи з цим навчальним посібником вам знадобиться наступне:- Сервер Ubuntu 20.04 з 4 ГБ оперативної пам'яті та 2 процесорами, а також налаштований користувач без прав root із привілеями sudo. Ви можете це зробити, скориставшись рекомендаціями щодо початкового настроювання сервера з Ubuntu 20.04.
- Встановлений OpenJDK 11
Крок 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 -
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
Код:
sudo apt update
Код:
sudo apt install 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
Код:
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
Код:
sudo ufw enable
Код:
sudo ufw status
Тепер UFW має бути активовано та налаштовано на захист порту Elasticsearch 9200.Output
Status: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
Якщо ви хочете інвестувати в додатковий захист, Elasticsearch пропонує купити платний плагін Shield.
Крок 4 - Тестування Elasticsearch
Зараз система Elasticsearch має працювати на порту 9200. Ви можете протестувати її за допомогою cURL та запиту GET.
Код:
curl -X GET 'http://localhost:9200'
Якщо ви отримаєте відповідь, аналогічну вищезгаданій, значить Elasticsearch працює коректно. Якщо ні, переконайтеся, що ви правильно виконали інструкції з встановлення та дали час системі Elasticsearch для повного запуску.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 виконайте таку команду:
Код:
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!" }'
За допомогою cURL ми надіслали запит HTTP POST на сервер Elasticsearch. URI запиту -{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
/tutorial/helloworld/1
з кількома параметрами:tutorial
- це індекс даних в Elasticsearch.helloworld
– це тип.1
— це ID нашого запису за індексом та типом.
Код:
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Для зміни існуючого запису можна використовувати запит HTTP PUT.{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
Код:
curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
"message": "Hello, People!"
}'
У прикладі, наведеному вище, ми змінили message першого запису на «Hello, People!». Номер версії автоматично збільшився до 2.{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Можливо, ви помітили додатковий аргумент pretty у наведеному вище запиті. Він забезпечує зручний для сприйняття людиною формат і ви можете для написання кожного поля даних використовувати новий ряд. Ви також можете «прикрасити» ваші результати при отриманні даних, щоб отримати більш читабельне виведення шляхом введення наступної команди:
Код:
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'
Ми додали та запросили дані в Elasticsearch. Інформацію про інші операції можна знайти у документації API.{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
}