Установка 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» завершена.
Спасибо большое за ваш труд, жалко что с 6 версией немного несовместимо
Желательно акцентрировать внимание, что 8 жаву рекомендует эластик… а 9 нет. И вообще убрать ее из списка, чтобы меньше косячили пользователи….
-H ‘Content-Type: application/json’ нехватает
испавьте пожалуйста
curl -X POST http://localhost:9200/tutorial/helloworld/1 -d ‘{ «message»: «Hello World!» }’ | jq
на
curl -X POST -H ‘Content-Type: application/json’ http://localhost:9200/tutorial/helloworld/1 -d ‘{ «message»: «Hello World!» }’ | jq