Установка ElasticSearch (один сервер) кластер в Unix/Linux

Установка ElasticSearch (один сервер) кластер в Unix/Linux

Elasticsearch — это гибкий и мощный распределенный поиск в реальном времени и аналитический движок. Он использует простой набор API и обеспечивает возможность полнотекстового поиска. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.

Установка ElasticSearch (один сервер) кластер в Unix/Linux

Проверка Java

Java является основным требованием при установке ES. Поэтому, убедитесь что в вашей системе установлена Java:

# java -version

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Если в вашей системе не установлена Java, используйте одну из следующих ссылок для ее установки:

Установка JAVA (JDK) на CentOS/RHEL/Fedora

Установка JAVA 9 (JDK9) на Debian/Ubuntu/LinuxMint

Установка Java на Debian/Ubuntu/Mint

Вот еще полезное чтиво:

Узнать размер Java Heap Memory Size

Установка переменных JAVA_HOME / PATH в Linux

Установка ElasticSearch (один сервер) кластер в Debian/Ubuntu

-===СПОСОБ 1 — использовать репозиторий ===-

Импортируем ключ Eliteearch PGP ключ:

# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

Возможно, вам придется установить пакет apt-transport-https на Debian:

# apt-get install apt-transport-https -y

Добавлем репозиторий:

# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list

Выполняем установку ES:

# apt-get update && sudo apt-get install elasticsearch -y

-===СПОСОБ 2 — использовать DEB пакет ===-

# cd /usr/local/src && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.deb
# sha1sum elasticsearch-5.3.0.deb 
# dpkg -i elasticsearch-5.3.0.deb

-===СПОСОБ 3 — использовать исходный код ===-

Будет описан ниже.

Установка ElasticSearch (один сервер) кластер в CentOS/Fedora/RHEL

-===СПОСОБ 1 — использовать репозиторий ===-

Загружаем ключ:

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

Добавляем репозиторий:

# vim /etc/yum.repos.d/elasticsearch-5.x.repo

И прописываем:

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Выполняем установку ES:

# yum install elasticsearch -y

Если используете Fedora:

# dnf install elasticsearch

-===СПОСОБ 2 — использовать RPM пакет ===-

# cd /usr/local/src && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.rpm
# sha1sum elasticsearch-5.3.0.rpm 
# rpm --install elasticsearch-5.3.0.rpm

-===СПОСОБ 3 — использовать исходный код ===-

Будет описан ниже.

Установка ElasticSearch (один сервер) кластер в Mac OS X

Для начала, устанавливаем HOMEBREW — Установка HOMEBREW на Mac OS X после чего, выполняем поиск пакета:

$ brew search elasticsearch

Вывод:

elasticsearch                          elasticsearch@2.4

Как уже поняли, имеется несколько пакетов, я установлю:

$ brew install elasticsearch

Установка ElasticSearch (один сервер) кластер в других Unix/Linux ОС

-===Docker===-

Можно запустить докер контейнер с ES, но мне не приходилось этого делать. Т.к не было нужды. Если появится такая возможность, я обязательно дополню данную тему.

-===архив===-

Теперь загрузите архив Elasticsearch с официального сайта:

# cd /usr/local/src && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

Распакуем архив:

$ tar xvzf elasticsearch-*.tar.gz

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

# rm -f /usr/local/src/elasticsearch-5.3.0.tar.gz && mv /usr/local/src/elasticsearch-* /usr/share/elasticsearch

И, переходим к настройке.

Настройка ElasticSearch в Unix/Linux

И так, отредактируем конфиг:

$ vim /usr/share/elasticsearch/config/elasticsearch.yml

PS: Данный конфиг лежит там, т.к я использовал установку с архива. По умолчанию, все конфиги будут находиться в /etc/elasticsearch/ папке.

Изменяем:

cluster.name: linux_notes_cluster_1 
node.name: "My DataCenter"
bootstrap.memory_lock: true
network.host: 192.168.13.161
http.port: 9200
http.host: 0.0.0.0
transport.host: 127.0.0.1

Где:

  • cluster.name — Имя кластера.
  • node.name: Имя самого сервера.
  • network.host: ИП хоста.

Установка плагинов для Elasticsearch

Для его установки используйте следующую команду:

$ /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu

Запуск Elasticsearch

Запускаем службу:

$ /usr/share/elasticsearch/bin/elasticsearch &

Перед запуском (если использовали СПОСОБ 1 и 2), проверяем что у нас используется «SysV init vs systemd»:

# ps -p 1

Запуск  Elasticsearch с SysV init

Чтобы запустить/остановить службу ES, используйте:

$ sudo -i service elasticsearch start
$ sudo -i service elasticsearch stop

Если Elasticsearch не запускается по какой-либо причине, он выведет причину отказа на STDOUT. Лог-файлы можно найти в /var/log/elasticsearch/ папке.

Незабываем пробросить порт в iptables!

Используйте команду update-rc.d чтобы добавить службу в автозагурзку ОС Debian/Ubuntu:

# update-rc.d elasticsearch defaults 95 10

Используйте команду chkconfig, чтобы добавить службу в автозагрузку ОС RHEL/CentOS:

# chkconfig --add elasticsearch

Для просмотра, можно использовать:

# chkconfig --list elasticsearch

Запуск Elasticsearch с systemd

Чтобы добавить ES в автозагрузку системы, используйте:

# /bin/systemctl daemon-reload
# /bin/systemctl enable elasticsearch.service

Чтобы запустить/остановить службу ES, используйте:

# systemctl start elasticsearch.service
# systemctl stop elasticsearch.service

Чтобы получить вывод лога, используйте:

# journalctl -f

Чтобы показать логи конкретно для ES:

# journalctl --unit elasticsearch

Чтобы показать записи с лога для ES службы начиная с заданного времени:

# journalctl --unit elasticsearch --since "2017-12-10 15:12:33"

Разрешим прохождения трафика через 9200-й TCP-порт в вашем брандмауэре:

# firewall-cmd --add-port=9200/tcp
# firewall-cmd --add-port=9200/tcp --permanent

Переходим к тестированию

Тестирование Elasticsearch

Открываем браузер:

http://es.linux-notes.org:9200/

Или, можно выполнить в консоле:

# curl -X GET 'http://localhost:9200'
{
  "name" : "My DataCenter",
  "cluster_name" : "linux_notes_cluster_1",
  "cluster_uuid" : "sXHdudwXRnODMpPBA2NA6Q",
  "version" : {
    "number" : "5.3.0",
    "build_hash" : "3adb13b",
    "build_date" : "2017-03-23T03:31:50.652Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

Основные примеры использования Elasticearch

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

$ curl -XPUT http://localhost:9200/mybucket

Получаем:

{"acknowledged":true,"shards_acknowledged":true}

PS: Можно открыть ссылку в браузере.

Добавление данных в Elasticsearch

Чтобы начать использовать Elasticsearch, давайте сначала добавим некоторые данные. Как уже упоминалось, Elasticsearch использует API RESTful, который отвечает обычным командам CRUD: Create, Read, Update и Delete. Для работы с ним мы будем использовать curl.

$ curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Вывод:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"created":true}

Я курлом, отправил HTTP POST реквест на Elasticseach сервер. УРЛа запроса, была /tutorial/helloworld/1. Здесь важно понять параметры:

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

Вы можете получить эту первую запись с HTTP GET-запросом:

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

Вывод:

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello World!" }}

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

$ curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
  "message": "Hello Man!"
}'

И снова проверяем:

$ curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"found":true,"_source":
{
"message": "Hello Man!"

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

# curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 3,
  "found" : true,
  "_source" : {
    "message" : "Hello Man!"
  }
}

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

И так, можно проверить состояния кластера следующим образом:

# curl -XGET 'http://localhost:9200/_cluster/health'

Зачастую, многие для более надежной безоспастности, используют авторизацию и по этому — стоит выполнять команду следующим образом:

# curl --user Your_USER:Your_Password -XGET 'http://localhost:9200/_cluster/health'

Или в более красивом виде:

# curl --user Your_USER:Your_Password -XGET 'http://localhost:9200/_cluster/health?pretty'

Вывод получим:

{
  "cluster_name" : "cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 1800,
  "active_shards" : 3600,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

По статусу можно понять что все — ОК. Если будет другой цвет, скажем — красный (red) или желтый (yellow) — это уже не есть хорошо.

Вот и все, установка «Установка ElasticSearch (один сервер) кластер в Unix/Linux» завершена.

3 thoughts on “Установка ElasticSearch (один сервер) кластер в Unix/Linux

  1. Желательно акцентрировать внимание, что 8 жаву рекомендует эластик… а 9 нет. И вообще убрать ее из списка, чтобы меньше косячили пользователи….

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.