Как установить и настроить Elasticsearch на CentOS 7

Вступление

Elasticsearch - платформа для распределенного поиска и анализа данных в режиме реального времени. Его популярность объясняется простотой использования, мощными функциями и масштабируемостью.

Elasticsearch поддерживает операции RESTful. Это означает, что вы можете использовать методы HTTP (GET, POST, PUT, DELETE и т. Д.) В сочетании с HTTP URI (/ collection / entry) для манипулирования вашими данными. Интуитивно понятный подход RESTful удобен как для разработчиков, так и для пользователей, что является одной из причин популярности Elasticsearch.

Elasticsearch - это бесплатное программное обеспечение с открытым исходным кодом, за которым стоит солидная компания Elastic. Эта комбинация делает его пригодным для использования в любом месте от личного тестирования до корпоративной интеграции.

Эта статья познакомит вас с Elasticsearch и покажет, как установить, настроить и начать его использовать.

Предпосылки

Прежде чем следовать этому руководству, убедитесь, что вы выполнили следующие предварительные условия:

  • A CentOS 7 Капли

  • Пользователь root, не являющийся пользователем root (для получения подробной информации обратитесь к Initial Server Setup с CentOS 7.)

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

Предположения

В этом руководстве предполагается, что ваши серверы используют VPN, подобную описанной здесь: https://www.digitalocean.com/community/tutorials/how-to-use-ansible-and-tinc-vpn-to-secure-your- серверная инфраструктура [Как использовать Ansible и Tinc VPN для защиты вашей серверной инфраструктуры]. Это обеспечит функционирование частной сети независимо от физической сети, используемой вашими серверами.

Если вы используете общую частную сеть, такую ​​как частная сеть DigitalOcean, вы должны использовать VPN для защиты Elasticsearch от несанкционированного доступа. Каждый сервер должен находиться в одной частной сети, поскольку Elasticsearch не имеет встроенной защиты в свой HTTP-интерфейс. Частная сеть не должна использоваться совместно с компьютерами, которым вы не доверяете.

Шаг 1 - Установка Java

Во-первых, вам понадобится Java Runtime Environment (JRE) в вашей Droplet, потому что Elasticsearch написан на языке программирования Java. Вы можете использовать собственный пакет CentOS OpenJDK для JRE. Этот JRE бесплатный, хорошо поддерживается и автоматически управляется через менеджер установки CentOS Yum.

Вы можете установить последнюю версию OpenJDK с помощью команды:

sudo yum install java-1.8.0-openjdk.x86_64

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

java -version

Результат должен выглядеть так:

Output of java -versionopenjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

Когда вы продвинетесь в использовании Elasticsearch и начнете искать лучшую производительность и совместимость с Java, вы можете выбрать установку собственной Oracle Java (Oracle JDK 8). Для получения дополнительной информации о том, как это сделать, пожалуйста, ознакомьтесь со статьей на How To Install Java on CentOS и Fedora.

Шаг 2 - Загрузка и установка Elasticsearch

Elasticsearch можно загрузить непосредственно с elastic.co в пакетах zip, tar.gz, deb или rpm. Для CentOS лучше всего использовать нативный пакет rpm, который установит все, что вам нужно для запуска Elasticsearch.

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

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm

Затем установите его обычным способом CentOS с помощью команды + rpm + следующим образом:

sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm

Это приводит к тому, что Elasticsearch устанавливается в + / usr / share /asticsearch / + с его файлами конфигурации, помещенными в + / etc /asticsearch +, а его скрипт инициализации добавляется в + / etc / init.d /asticsearch +.

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

sudo systemctl enable elasticsearch.service

Шаг 3 - Настройка Elastic

Теперь, когда Elasticsearch и его Java-зависимости установлены, пришло время настроить Elasticsearch.

Файлы конфигурации Elasticsearch находятся в каталоге + / etc /asticsearch +. Есть два файла:

  • +asticsearch.yml + - Конфигурирует настройки сервера Elasticsearch. Здесь хранятся все параметры, кроме тех, которые для ведения журнала, поэтому нас больше всего интересует этот файл.

  • + logging.yml + - Предоставляет конфигурацию для ведения журнала. В начале вам не нужно редактировать этот файл. Вы можете оставить все параметры ведения журнала по умолчанию. Вы можете найти полученные журналы в + / var / log /asticsearch + по умолчанию.

Первыми переменными, которые нужно настроить на любом сервере Elasticsearch, являются + node.name и` + cluster.name` в +asticsearch.yml. Как следует из их имен, + node.name + указывает имя сервера (узла) и кластер, с которым связан последний.

Если вы не настраиваете эти переменные, + node.name + будет автоматически назначен относительно имени хоста Droplet. + Cluster.name + будет автоматически установлен на имя кластера по умолчанию.

Значение + cluster.name + используется функцией автоматического обнаружения Elasticsearch для автоматического обнаружения и связывания узлов Elasticsearch с кластером. Таким образом, если вы не измените значение по умолчанию, у вас могут быть нежелательные узлы, найденные в той же сети, в вашем кластере.

Чтобы начать редактирование основного файла конфигурации +asticsearch.yml +:

sudo nano /etc/elasticsearch/elasticsearch.yml

Удалите символ + # + в начале строк для + node.name и` + cluster.name`, чтобы раскомментировать их, а затем измените их значения. Ваши первые изменения конфигурации в файле + / etc /asticsearch /asticsearch.yml + должны выглядеть следующим образом:

/etc/elasticsearch/elasticsearch.yml

...
node.name:
cluster.name:
...

Другим важным параметром является роль сервера, который может быть либо «главным», либо «ведомым». «Мастера» отвечают за здоровье и стабильность кластера. В больших развертываниях с большим количеством узлов кластера рекомендуется иметь более одного выделенного «мастера». Как правило, выделенный «мастер» не будет хранить данные или создавать индексы. Таким образом, не должно быть шансов быть перегруженным, из-за чего состояние кластера может быть поставлено под угрозу.

«Рабы» используются как «рабочие лошадки», которые могут быть загружены задачами с данными. Даже если «ведомый» узел перегружен, состояние кластера не должно подвергаться серьезному воздействию, если есть другие узлы, которые могут принять дополнительную нагрузку.

Параметр, который определяет роль сервера, называется + node.master +. Если у вас есть только один узел Elasticsearch, вы должны оставить эту опцию закомментированной, чтобы она сохраняла значение по умолчанию + true + - т.е. единственный узел должен быть также хозяином. В качестве альтернативы, если вы хотите настроить узел в качестве ведомого, удалите символ + # + в начале строки + node.master + и измените значение на + false +:

/etc/elasticsearch/elasticsearch.yml

...
node.master:
...

Другим важным параметром конфигурации является + node.data +, который определяет, будет ли узел хранить данные или нет. В большинстве случаев для этой опции следует оставить значение по умолчанию (+ true +), но есть два случая, в которых вы можете не хранить данные на узле. Во-первых, когда узел является выделенным «мастером», как мы уже упоминали. Другой случай, когда узел используется только для извлечения данных из узлов и агрегирования результатов. В последнем случае узел будет действовать как «поисковый балансировщик нагрузки».

Опять же, если у вас есть только один узел Elasticsearch, вы должны оставить этот параметр закомментированным, чтобы он сохранял значение по умолчанию + true +. В противном случае, чтобы отключить локальное хранение данных, раскомментируйте следующую строку и измените значение на + false +:

/etc/elasticsearch/elasticsearch.yml

...
node.data:
...

Двумя другими важными опциями являются + index.number_of_shards + и + index.number_of_replicas +. Первый определяет, на сколько частей (осколков) будет разбит индекс. Второй определяет количество реплик, которые будут распределены по кластеру. Наличие большего количества шардов повышает производительность индексации, а наличие большего количества реплик ускоряет поиск.

Предполагая, что вы все еще исследуете и тестируете Elasticsearch на одном узле, лучше начать с одного шарда и без реплик. Таким образом, их значения должны быть установлены следующим образом (обязательно уберите + # + в начале строк):

/etc/elasticsearch/elasticsearch.yml

...
index.number_of_shards:
index.number_of_replicas:
...

Последний параметр, который вас может заинтересовать, это + path.data +, который определяет путь, по которому хранятся данные. Путь по умолчанию - + / var / lib /asticsearch +. В производственной среде рекомендуется использовать выделенный раздел и точку монтирования для хранения данных Elasticsearch. В лучшем случае этот выделенный раздел будет отдельным носителем, который обеспечит лучшую производительность и изоляцию данных. Вы можете указать другой путь + path.data, раскомментировав строку` + path.data + `и изменив ее значение:

/etc/elasticsearch/elasticsearch.yml

...
path.data:
...

После внесения всех изменений сохраните и выйдите из файла. Теперь вы можете запустить Elasticsearch впервые с помощью команды:

sudo service elasticsearch start

Пожалуйста, подождите не менее 10 секунд, чтобы Elasticsearch полностью запустился, прежде чем вы сможете его использовать. В противном случае вы можете получить ошибки о невозможности подключения.

Шаг 4 - Обеспечение эластичности

Elasticsearch не имеет встроенной защиты и может контролироваться любым, кто может получить доступ к HTTP API. Этот раздел не является исчерпывающим руководством по обеспечению безопасности Elasticsearch. Примите все необходимые меры для предотвращения несанкционированного доступа к нему и к серверу / виртуальной машине, на которых он работает. Попробуйте использовать iptables для дальнейшей защиты вашей системы.

Первая настройка безопасности заключается в предотвращении публичного доступа. Чтобы удалить публичный доступ, отредактируйте файл +asticsearch.yml +:

sudo nano /etc/elasticsearch/elasticsearch.yml

Найдите строку, которая содержит + network.bind_host +, раскомментируйте ее, удалив символ + # + в начале строки, и измените значение на + localhost +, чтобы оно выглядело так:

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host:
...

+ Кроме того, для дополнительной безопасности вы можете отключить динамические сценарии, которые используются для оценки пользовательских выражений. Создавая пользовательское вредоносное выражение, злоумышленник может поставить под угрозу вашу среду.

Чтобы отключить пользовательские выражения, добавьте следующую строку в конец файла + / etc /asticsearch /asticsearch.yml +:

/etc/elasticsearch/elasticsearch.yml

...
script.disable_dynamic: true
...

Чтобы вышеуказанные изменения вступили в силу, вам придется перезапустить Elasticsearch с помощью команды:

sudo service elasticsearch restart

Шаг 5 - Тестирование

На данный момент Elasticsearch должен работать на порту 9200. Вы можете протестировать его с помощью curl, инструмента передачи URL-адресов на стороне клиента и простого запроса GET, например:

curl -X GET 'http://localhost:9200'

Вы должны увидеть следующий ответ:

Output of curl{
 "status" : 200,
 "name" : "CentOS Node",
 "cluster_name" : "mysqluster",
 "version" : {
   "number" : "1.7.3",
   "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682",
   "build_timestamp" : "2015-10-15T09:14:17Z",
   "build_snapshot" : false,
   "lucene_version" : "4.10.4"
 },
 "tagline" : "You Know, for Search"
}

Если вы видите ответ, аналогичный приведенному выше, Elasticsearch работает правильно. Если нет, убедитесь, что вы правильно следовали инструкциям по установке и дали некоторое время для полного запуска Elasticsearch.

Шаг 6 - Использование Elasticsearch

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

Вы можете добавить свою первую запись с помощью команды:

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

Вы должны увидеть следующий ответ:

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

С помощью curl мы отправили HTTP-запрос POST на сервер Elasticsearch. URI запроса был + / tutorial / helloworld / 1 +. Здесь важно понимать параметры:

  • + tutorial + - это индекс данных в Elasticsearch.

  • + helloworld + - это тип.

  • + 1 + - это идентификатор нашей записи под указанным выше индексом и типом.

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

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

Результат должен выглядеть так:

Output{"_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 People!"
}'

Elasticsearch должен признать успешную модификацию следующим образом:

Output{
 "_index" : "tutorial",
 "_type" : "helloworld",
 "_id" : "1",
 "_version" : 2,
 "created" : false
}

В приведенном выше примере мы изменили «+ message » первой записи на «Hello People!». При этом номер версии был автоматически увеличен до « 2 +».

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

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

Теперь ответ будет в гораздо лучшем формате:

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

До сих пор мы добавляли и запрашивали данные в Elasticsearch. Чтобы узнать о других операциях, пожалуйста, проверьте the документацию API.

Заключение

Вот как просто установить, настроить и начать использовать Elasticsearch. Как только вы поиграете с ручными запросами, ваша следующая задача будет начать использовать его из ваших приложений.

Related