Как установить и настроить Elasticsearch в Ubuntu 14.04

Вступление

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

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

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

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

Предпосылки

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

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

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

В этом руководстве предполагается, что ваши серверы используют VPN, подобную описанной здесь:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure. Это обеспечит функционирование частной сети независимо от физической сети, используемой вашими серверами.

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

[[step-1 -—- install-java]] == Шаг 1. Установка Java

Во-первых, вам понадобится Java Runtime Environment (JRE) в вашей Droplet, потому что Elasticsearch написан на языке программирования Java. Elasticsearch требует Java 7 или выше. Elasticsearch рекомендует Oracle JDK версии 1.8.0_73, но также работает и собственный пакет Ubuntu OpenJDK для JRE.

На этом шаге показано, как установить обе версии, чтобы вы могли решить, какая из них лучше для вас.

Установка OpenJDK

Собственный пакет Ubuntu OpenJDK для JRE является бесплатным, хорошо поддерживается и автоматически управляется через менеджер установки Ubuntu APT.

Перед установкой OpenJDK с APT обновите список доступных пакетов для установки на Ubuntu Droplet, выполнив команду:

sudo apt-get update

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

sudo apt-get install openjdk-7-jre

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

java -version

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

Output of java -versionjava version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Установка Java 8

Когда вы продвинетесь в использовании Elasticsearch и начнете искать лучшую производительность и совместимость с Java, вы можете выбрать установку собственной Oracle Java (Oracle JDK 8).

Добавьте Oracle Java PPA в apt:

sudo add-apt-repository -y ppa:webupd8team/java

Обновите базу данных пакетов apt:

sudo apt-get update

Установите последнюю стабильную версию Oracle Java 8 с помощью этой команды (и примите появившееся лицензионное соглашение):

sudo apt-get -y install oracle-java8-installer

Наконец, убедитесь, что он установлен:

java -version

[[шаг-2 -—- загрузка-и-установка-elasticsearch]] == Шаг 2. Загрузка и установка Elasticsearch

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

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

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

Затем установите его обычным способом Ubuntu с помощью командыdpkg, например:

sudo dpkg -i elasticsearch-1.7.2.deb

[.tip] #Tip: Если вам нужна последняя выпущенная версия Elasticsearch, перейдите вelastic.co, чтобы найти ссылку, а затем используйтеwget, чтобы загрузить ее в свой дроплет. Обязательно загрузите пакет deb.
#

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

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

sudo update-rc.d elasticsearch defaults

[[step-3 -—- configuring-elastic]] == Шаг 3. Настройка Elastic

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

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

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

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

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

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

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

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

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml

...
node.name: "My First Node"
cluster.name: mycluster1
...

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

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

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

/etc/elasticsearch/elasticsearch.yml

...
node.master: false
...

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

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

/etc/elasticsearch/elasticsearch.yml

...
node.data: false
...

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

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

/etc/elasticsearch/elasticsearch.yml

...
index.number_of_shards: 1
index.number_of_replicas: 0
...

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

/etc/elasticsearch/elasticsearch.yml

...
path.data: /media/different_media
...

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

sudo service elasticsearch start

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

[[step-4 -—- secure-elastic]] == Шаг 4 - Обеспечение эластичности

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

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

sudo nano /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.yml

...
network.bind_host: localhost
...

[.warning] #Warning: Поскольку Elasticsearch не имеет встроенной системы безопасности, очень важно, чтобы вы не устанавливали для него какой-либо IP-адрес, доступный для любых серверов, которые вы не контролируете или не доверяете. Не привязывайте Elasticsearch к общедоступному IP-адресу или IP-адресуshared private network!
#
Кроме того, для дополнительной безопасности вы можете отключить динамические сценарии, которые используются для оценки пользовательских выражений. Создавая пользовательское вредоносное выражение, злоумышленник может поставить под угрозу вашу среду.

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

/etc/elasticsearch/elasticsearch.yml

...
script.disable_dynamic: true
...

[[step-5 -—- testing]] == Шаг 5 - Тестирование

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

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

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

Output of curl{
  "status" : 200,
  "name" : "Harry Leland",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

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

[[step-6 -—- using-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?pretty'

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

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

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

Заключение

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

Related