elasticsearch
АРХИВ
Этот проект больше не поддерживается.
Вы можете продолжать его использовать и адаптировать под свои нужды, включая работу с Elasticsearch 8.x.
Для альтернативных способов начала работы вы можете попробовать один из следующих вариантов:
- Начать бесплатный пробный период на Elastic Cloud, нашем управляемом сервисе.
- Ознакомьтесь с Elastic Cloud на Kubernetes (ECK) для запуска стека через Kubernetes.
- Прочитайте наш Руководство по запуску Elastic Stack на Docker.
- Ознакомьтесь с Terraform провайдером Elastic Stack.
ansible-elasticsearch
ЭТА РОЛЬ ДЛЯ 7.x И 6.x, но также должна работать и с 8.x (см. замечание).
Ansible роль для Elasticsearch 7.x/6.x - тесты проводились на следующих платформах:
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Debian 8
- Debian 9
- Debian 10
- CentOS 7
- Amazon Linux 2
СУЩЕСТВЕННЫЕ ИЗМЕНЕНИЯ
Уведомление о поддержке множественных экземпляров
- Если вы используете только один экземпляр, но хотите обновить старую версию ansible-elasticsearch, следуйте процедуре обновления.
- Если вы устанавливаете более одного экземпляра Elasticsearch на том же хосте (с разными портами, директориями и конфигурационными файлами), не обновляйте до ansible-elasticsearch >= 7.1.1, используйте эту временную меру.
- Для случаев с несколькими экземплярами мы теперь рекомендуем использовать Docker-контейнеры с нашими официальными образами (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html).
Удаление настроек MAX_THREAD
Ansible-elasticsearch 7.5.2 убирает возможность настраивать максимальное количество потоков, которые процесс может запустить. Мы обнаружили, что эта опция больше не работала с момента удаления поддержки множественных экземпляров в ansible-elasticsearch 7.1.1. Эта опция будет добавлена обратно в следующем релизе, если она останется актуальной с учетом последних изменений в Elasticsearch.
Изменения в конфигурационных файлах
Ansible-elasticsearch 7.5.2 обновляет конфигурационные файлы, предоставляемые этой ролью, которые содержали некоторые параметры, устаревшие в 6.x и 7.x:
/etc/default/elasticsearch
|/etc/sysconfig/elasticsearch
: новый шаблон отражает конфигурационный файл, предоставляемый Elasticsearch >= 6.x, параметры, которые мы удалили, уже не использовались в 6.x и 7.x./etc/elasticsearch/jvm.options
: новый шаблон отражает предоставленные Elasticsearch файлы конфигурации >= 6.x./etc/elasticsearch/log4j2.properties
:- Мы удалили шаблон
log4j2.properties.j2
из этой Ansible роли, так как это был статический файл, не предлагающий никакой настройки конкретно для некоторых переменных ansible. - Развертывание этой Ansible роли на новых серверах получит стандартный
log4j2.properties
, предоставленный Elasticsearch, без каких-либо переопределений. - ПРЕДУПРЕЖДЕНИЕ: для сценариев обновления, где этот файл уже управляется предыдущими версиями ansible-elasticsearch, этот файл станет неуправляемым и не будет обновляться по умолчанию. Если вы хотите обновить его до версии 7.5, вы можете получить его здесь и использовать этот файл с переменной Ansible
es_config_log4j2
(см. ниже).
- Мы удалили шаблон
Удаление OSS дистрибутивов для версий >= 7.11.0
Начиная с Elasticsearch 7.11.0, OSS дистрибуции больше не будут предоставляться в связи с недавним изменением лицензии Elasticsearch.
Эта Ansible роль будет выдавать ошибку, если oss_version
установлен в true
, а es_version
больше
7.11.0
.
Смотрите блог Doubling down on open, Part II для получения дополнительной информации.
Как переопределить конфигурационные файлы, предоставленные ansible-elasticsearch?
Теперь вы можете переопределить конфигурационные файлы своими версиями, используя следующие переменные Ansible:
es_config_default: "elasticsearch.j2"
: заменитеelasticsearch.j2
на свой собственный шаблон для использования пользовательского конфигурационного файла/etc/default/elasticsearch
|/etc/sysconfig/elasticsearch
.es_config_jvm: "jvm.options.j2"
: заменитеjvm.options.j2
на свой собственный шаблон для использования пользовательского конфигурационного файла/etc/elasticsearch/jvm.options
.es_config_log4j2: ""
: установите эту переменную на путь к вашему собственному шаблону для использования пользовательского конфигурационного файла/etc/elasticsearch/log4j2.properties
.
Зависимость
Эта роль использует фильтр json_query, который требует jmespath на локальной машине.
Использование
Создайте свой Ansible плейбук с вашими собственными задачами и включите роль elasticsearch. Вам нужно будет иметь этот репозиторий доступным в контексте плейбука.
ansible-galaxy install elastic.elasticsearch,v7.17.0
Затем создайте ваш плейбук yaml, добавив роль elasticsearch. Применение роли elasticsearch приводит к установке узла на хосте.
Самая простая конфигурация состоит из:
- name: Простой пример
hosts: localhost
roles:
- role: elastic.elasticsearch
vars:
es_version: 7.17.0
Вышеуказанная установка Elasticsearch 7.17.0 на едином узле 'node1' на хостах 'localhost'.
Примечание:
Стандартная версия Elasticsearch описана в es_version
. Вы можете переопределить эту переменную в своем плейбуке, чтобы установить другую версию.
Хотя мы тестируем эту роль только с одной версией 7.x и одной версией 6.x (соответственно 7.17.0 и 6.8.23 на момент написания), эта роль должна работать и с другими версиями в большинстве случаев.
Эта роль также использует теги Ansible. Запустите ваш плейбук с флагом --list-tasks
, чтобы получить больше информации.
Тестирование
Этот плейбук использует Kitchen для CI и локального тестирования.
Требования
- Ruby
- Bundler
- Docker
- Make
Запуск тестов
- Убедитесь, что вы проверили этот репозиторий на
elasticsearch
, а неansible-elasticsearch
. - Если у вас нет золотой или платиновой лицензии для тестирования, вы можете запустить пробные версии наборов
xpack-upgrade
, добавив-trial
к переменнойPATTERN
. - Вам может понадобиться явно указать
VERSION=7.x
, если некоторые наборы не проходят.
Установите зависимости ruby с помощью bundler
make setup
Если вы хотите протестировать функции X-Pack с лицензией, вам нужно будет сначала экспортировать переменную ES_XPACK_LICENSE_FILE
.
export ES_XPACK_LICENSE_FILE="$(pwd)/license.json"
Чтобы развернуть узел Ubuntu 16.04 с X-Pack
$ make converge
Чтобы запустить тесты
$ make verify
Чтобы перечислить все разные тестовые наборы
$ make list
Стандартный тестовый набор - Ubuntu 16.04 с X-Pack. Если вы хотите протестировать другой набор, вы можете переопределить это с помощью переменной PATTERN
$ make converge PATTERN=security-centos-7
PATTERN
- это шаблон кухни, который может соответствовать нескольким наборам. Чтобы запустить все тесты для CentOS
$ make converge PATTERN=centos-7
Стандартная версия - 7.x. Если вы хотите протестировать 6.x, вы можете переопределить ее с помощью переменной VERSION
, например:
$ make converge VERSION=6.x PATTERN=security-centos-7
Когда вы закончите тестирование, вы можете очистить все с помощью
$ make destroy-all
Базовая конфигурация Elasticsearch
Все параметры конфигурации Elasticsearch поддерживаются. Это достигается с помощью параметра карты конфигурации 'es_config', который сериализуется в файл elasticsearch.yml. Использование карты гарантирует, что плейбук Ansible не нужно обновлять, чтобы отразить новые/устаревшие/параметры конфигурации плагинов.
В дополнение к карте es_config поддерживается несколько других параметров для дополнительных функций, например, установка скриптов. Эти параметры можно найти в файле defaults/main.yml роли.
Следующий пример иллюстрирует применение параметров конфигурации к экземпляру Elasticsearch.
- name: Elasticsearch с пользовательской конфигурацией
hosts: localhost
roles:
- role: elastic.elasticsearch
vars:
es_data_dirs:
- "/opt/elasticsearch/data"
es_log_dir: "/opt/elasticsearch/logs"
es_config:
node.name: "node1"
cluster.name: "custom-cluster"
discovery.seed_hosts: "localhost:9301"
http.port: 9201
transport.port: 9301
node.data: false
node.master: true
bootstrap.memory_lock: true
es_heap_size: 1g
es_api_port: 9201
Хотя роль устанавливает Elasticsearch со стандартными параметрами конфигурации, следующее должно быть настроено, чтобы убедиться, что кластер успешно образуется:
es_config['http.port']
- http порт для узлаes_config['transport.port']
- транспортный порт для узлаes_config['discovery.seed_hosts']
- список уникаст-обнаружения, в формате, разделенном запятыми"<host>:<port>,<host>:<port>"
(обычно это выделенные мастера кластера)es_config['cluster.initial_master_nodes']
- для 7.x и выше список узлов, которые могут быть мастерами для инициации кластера, в формате, разделенном запятыми"<node.name>:<port>,<node.name>:<port>"
(обычно имена узлов выделенных мастеров кластера)es_config['network.host']
- устанавливает как network.bind_host, так и network.publish_host на одно и то же значение хоста. Параметр network.bind_host позволяет контролировать, на каком хосте будут связываться разные сетевые компоненты.
Параметр network.publish_host
позволяет контролировать, на каком хосте узел будет публиковаться в кластере, чтобы другие узлы смогли к нему подключиться.
Смотрите https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html для получения дополнительной информации о поведении по умолчанию и доступных параметрах. Роль не делает попыток принудительно установить эти параметры и требует от пользователей их соответствующей настройки. Рекомендуется, чтобы мастера узлов были перечислены и, таким образом, разворачивались первыми, где это возможно.
Более сложный пример:
- name: Elasticsearch с пользовательской конфигурацией
hosts: localhost
roles:
- role: elastic.elasticsearch
vars:
es_data_dirs:
- "/opt/elasticsearch/data"
es_log_dir: "/opt/elasticsearch/logs"
es_config:
node.name: "node1"
cluster.name: "custom-cluster"
discovery.seed_hosts: "localhost:9301"
http.port: 9201
transport.port: 9301
node.data: false
node.master: true
bootstrap.memory_lock: true
es_heap_size: 1g
es_start_service: false
es_api_port: 9201
es_plugins:
- plugin: ingest-attachment
Важные примечания
Роль использует es_api_host и es_api_port для общения с узлом для действий, которые могут быть выполнены только через http, например, для установки шаблонов и проверки, что УЗЕЛ АКТИВЕН. Эти параметры по умолчанию равны "localhost" и 9200 соответственно. Если узел развернут для связывания на другом хосте или порту, они должны быть изменены.
Используйте только es_data_dirs и es_log_dir для настройки директорий данных и журналов соответственно. При использовании вместе с es_config['path.data']
и es_config['path.logs']
это приведет к созданию дубликатов ключей data и logs в elasticsearch.yml
, что может привести к неудаче при запуске Elasticsearch.
Установки многовузлового сервера
Применение роли elasticsearch приводит к установке узла на хосте. Указание роли несколько раз для хоста приводит к установке нескольких узлов на этом хосте.
Пример развертывания трех серверов показан ниже. Первый сервер является мастером и поэтому объявляется первым. Хотя это не обязательно, это рекомендуется в любой конфигурации кластеров с несколькими узлами. Два других сервера являются узлами данных.
Обратите внимание, что мы больше не поддерживаем установку более одного узла на одном хосте.
- hosts: master_node
roles:
- role: elastic.elasticsearch
vars:
es_heap_size: "1g"
es_config:
cluster.name: "test-cluster"
cluster.initial_master_nodes: "elastic02"
discovery.seed_hosts: "elastic02:9300"
http.host: 0.0.0.0
http.port: 9200
node.data: false
node.master: true
transport.host: 0.0.0.0
transport.port: 9300
bootstrap.memory_lock: false
es_plugins:
- plugin: ingest-attachment
- hosts: data_node_1
roles:
- role: elastic.elasticsearch
vars:
es_data_dirs:
- "/opt/elasticsearch"
es_config:
cluster.name: "test-cluster"
cluster.initial_master_nodes: "elastic02"
discovery.seed_hosts: "elastic02:9300"
http.host: 0.0.0.0
http.port: 9200
node.data: true
node.master: false
transport.host: 0.0.0.0
transport.port: 9300
bootstrap.memory_lock: false
es_plugins:
- plugin: ingest-attachment
- hosts: data_node_2
roles:
- role: elastic.elasticsearch
vars:
es_config:
cluster.name: "test-cluster"
discovery.seed_hosts: "elastic02:9300"
http.host: 0.0.0.0
http.port: 9200
node.data: true
node.master: false
transport.host: 0.0.0.0
transport.port: 9300
bootstrap.memory_lock: false
es_plugins:
- plugin: ingest-attachment
Параметры также могут быть назначены хостам с использованием файла инвентаря, если это необходимо.
Убедитесь, что ваши хосты определены в файле inventory
с соответствующими значениями ansible_ssh_host
, ansible_ssh_user
и ansible_ssh_private_key_file
.
Затем запустите его:
ansible-playbook -i hosts ./your-playbook.yml
Установка функций X-Pack
es_role_mapping
Файл сопоставления ролей объявленный как yml, как описано здесь
es_role_mapping:
power_user:
- "cn=admins,dc=example,dc=com"
user:
- "cn=users,dc=example,dc=com"
- "cn=admins,dc=example,dc=com"
es_users
- Пользователи могут быть объявлены здесь как yml. Две подкатегории 'native' и 'file' определяют область, в которой создается пользователь. Под каждой из этих категорий пользователи должны быть заявлены как yml элементы. Например:
es_users:
native:
kibana4_server:
password: changeMe
roles:
- kibana4_server
file:
es_admin:
password: changeMe
roles:
- admin
testUser:
password: changeMeAlso!
roles:
- power_user
- user
es_roles
- Роли Elasticsearch могут быть объявлены здесь как yml. Две подкатегории 'native' и 'file' определяют, как создается роль, то есть либо через файл, либо через http (native) вызов. Под каждой категорией перечислите роли с соответствующими разрешениями, используя формат файлового формата, описанный здесь например:
es_roles:
file:
admin:
cluster:
- all
indices:
- names: '*'
privileges:
- all
power_user:
cluster:
- monitor
indices:
- names: '*'
privileges:
- all
user:
indices:
- names: '*'
privileges:
- read
kibana4_server:
cluster:
- monitor
indices:
- names: '.kibana'
privileges:
- all
native:
logstash:
cluster:
- manage_index_templates
indices:
- names: 'logstash-*'
privileges:
- write
- delete
- create_index
es_xpack_license
- Лицензия X-Pack. Лицензия представляет собой json-объект. Установите переменную напрямую (возможно, защищенную с помощью Ansible vault) или из файла в проекте Ansible на управляющей машине с помощью функции поиска:
es_xpack_license: "{{ lookup('file', playbook_dir + '/files/' + es_cluster_name + '/license.json') }}"
Если у вас нет лицензии, вы можете включить 30-дневный пробный период, установив es_xpack_trial
в true
.
Параметры конфигурации X-Pack могут быть добавлены в файл elasticsearch.yml с использованием обычного параметра es_config
.
Для полного примера смотрите здесь
Важное примечание для конфигурации области
Для настройки местных пользователей и ролей роль вызывает API Elasticsearch. Поскольку безопасность установлена, это требует определения двух параметров:
es_api_basic_auth_username
- имя пользователя администратораes_api_basic_auth_password
- пароль администратора
Эти параметры могут быть установлены либо на пользователя, заявленного в файловой области с правами администратора, либо на суперпользователя "elastic" (стандартный пароль changeme).
SSL/TLS безопасность X-Pack
- Для настройки вашего кластера с SSL/TLS для HTTP и/или транспортных коммуникаций следуйте процедуре настройки SSL/TLS
Дополнительная конфигурация
В дополнение к es_config, следующие параметры позволяют настроить версии Java и Elasticsearch, а также поведение роли. Варианты включают:
oss_version
По умолчаниюfalse
. Установка этого значения вtrue
установит oss релиз Elasticsearch (только для версии <7.11.0).es_xpack_trial
По умолчаниюfalse
. Установка этого значения вtrue
начнет 30-дневный пробный период после запуска кластера.es_version
(например, "7.17.0").es_api_host
Имя хоста, используемое для действий, требующих HTTP, например, для установки шаблонов. По умолчанию "localhost".es_api_port
Порт, используемый для действий, требующих HTTP, например, для установки шаблонов. По умолчанию 9200. ИЗМЕНИТЕ, ЕСЛИ HTTP ПОРТ НЕ 9200es_api_basic_auth_username
Имя пользователя Elasticsearch для выполнения административных действий. Используется, если безопасность включена. Убедитесь, что этот пользователь - администратор.es_api_basic_auth_password
Пароль, связанный с пользователем, объявленным вes_api_basic_auth_username
es_delete_unmanaged_file
По умолчаниюtrue
. Установите на false, чтобы сохранить файловых пользователей, добавленных вне ansible.es_delete_unmanaged_native
По умолчаниюtrue
. Установите на false, чтобы сохранить местных пользователей, добавленных вне ansible.es_start_service
(true (по умолчанию) или false)es_plugins_reinstall
(true или false (по умолчанию) )es_plugins
массив определений плагинов, например:es_plugins: - plugin: ingest-attachment
es_path_repo
Устанавливает белый список для разрешения местных резервных репозиториевes_action_auto_create_index
Устанавливает значение для автоматического создания индексов, используйте нижеприведенный синтаксис для указания индексов (иначе true/false): es_action_auto_create_index: '[".watches", ".triggered_watches", ".watcher-history-*"]'es_allow_downgrades
Только для целей разработки. (true или false (по умолчанию) )es_java_install
Если установлено в true, Java будет установлена. (false (по умолчанию для 7.x) или true (по умолчанию для 6.x))update_java
Обновляет Java до последней версии. (true или false (по умолчанию))es_max_map_count
максимальное количество пространств виртуальной памяти (VMA), которые может иметь процесс. По умолчанию 262144.es_max_open_files
максимальное количество файловых дескрипторов, которые могут быть открыты этим процессом. По умолчанию 65536.es_debian_startup_timeout
как долго скрипты SysV init для Debian ждут, пока служба запустится, в секундах. По умолчанию 10 секунд.es_use_repository
Установка этого значения вfalse
остановит Ansible от использования официального Elastic пакета из любого репозитория, настроенного на системе.es_add_repository
Установка этого значения вfalse
остановит Ansible от добавления официальных репозиториев Elastic пакетов (если es_use_repository истинно), если вы хотите использовать уже существующий репозиторий.es_custom_package_url
URL для rpm или deb пакета для установки Ansible. При использовании этого вам также нужно будет установитьes_use_repository: false
и убедиться, чтоes_version
соответствует версии, устанавливаемой из вашего пользовательского URL. Пример:es_custom_package_url: https://downloads.example.com/elasticsearch.rpm
Ранее приведенные примеры иллюстрируют установку плагинов с использованием es_plugins
. Для официально поддерживаемых плагинов не требуется указание версии или источника. Скрипт плагина определит соответствующую версию плагина в зависимости от целевой версии Elasticsearch. Для плагинов на основе сообщества включайте полный URL. Этот подход НЕ следует использовать для плагина X-Pack. См. ниже для получения дополнительных сведений.
Если устанавливаете мониторинг или оповещения, убедитесь, что плагин лицензии также указан. Конфигурация безопасности в настоящее время имеет ограниченную поддержку, но планируется больше поддержки в будущем.
Для настройки X-pack для отправки электронной почты можно добавить следующую конфигурацию к роли. Когда require_auth истинно, вам также нужно будет указать пользователя и пароль. Если нет, их можно удалить:
es_mail_config:
account: <функциональное имя>
profile: standard
from: <адрес отправителя>
require_auth: <true или false>
host: <домен электронной почты>
port: <номер порта>
user: <электронный адрес> --по желанию
pass: <пароль> --по желанию
es_user
- по умолчанию elasticsearch.es_group
- по умолчанию elasticsearch.es_user_id
- по умолчанию не определено.es_group_id
- по умолчанию не определено.
И es_user_id
и es_group_id
должны быть установлены для установки значений пользовательских и групповых идентификаторов.
es_restart_on_change
- по умолчанию true. Если false, изменения не приведут к перезапуску Elasticsearch.es_plugins_reinstall
- по умолчанию false. Если true, все установленные плагины будут удалены с узла. Перечисленные плагины затем будут переустановлены.
Чтобы добавить, обновить или удалить записи elasticsearch.keystore используйте следующую переменную:
# state является необязательным и по умолчанию равен present
es_keystore_entries:
- key: someKeyToAdd
value: someValue
state: present
- key: someKeyToUpdate
value: newValue
# state: present
force: Yes
- key: someKeyToDelete
state: absent
Эта роль поставляется с образцами шаблонов, расположенными в test/integration/files/templates-7.x директории. Переменная es_templates_fileglob
используется с циклом Ansible with_fileglob. При установке glob убедитесь, что вы используете абсолютный путь.
Прокси
Чтобы определить прокси глобально, установите следующие переменные:
es_proxy_host
- глобальный хост проксиes_proxy_port
- глобальный порт прокси
Примечания
- Роль предполагает, что пользователь/группа существует на сервере. Пакеты elasticsearch создают стандартного пользователя elasticsearch. Если это нужно изменить, убедитесь, что пользователь существует.
- Плейбук полагается на inventory_name каждого хоста, чтобы гарантировать, что его директории уникальны.
- KitchenCI использовалась для тестирования. Это позволяет подтвердить, что образы достигают правильного состояния после первоначального применения плейбука. В настоящее время мы тестируем последнюю версию 7.x и 6.x на всех поддерживаемых платформах.
- Роль нацелена на идемпотентность. Многократное выполнение роли без изменений не должно приводить к изменению состояния на сервере. Если конфигурация изменена, они будут применены и Elasticsearch перезапустится, где это необходимо.
- Чтобы запускать тесты x-pack, требуется файл лицензии с включенной безопасностью. Установите переменную окружения
ES_XPACK_LICENSE_FILE
на полный путь к файлу лицензии перед запуском тестов. Пробная лицензия подходит и может быть использована, установивes_xpack_trial
вtrue
.
ВАЖНЫЕ ЗАМЕТКИ ОУПРАВЛЕНИИ ПЛАГИНАМИ
- Если версия ES изменится, все плагины будут удалены. Перечисленные в плейбуке будут переустановлены. Это поведение требуется в ES 6.x.
- Если ни один плагин не перечислен в плейбуке для узла, все установленные плагины будут удалены.
- Роль поддерживает автоматически определять различия между установленными и перечисленными плагинами - устанавливая перечисленные, но не установленные, а также удаляя установленные, но не перечисленные. Если пользователи хотят переустановить плагины, они должны установить es_plugins_reinstall в true. Это приведет к удалению всех установленных плагинов и установке перечисленных.
Вопросы по использованию
Мы приветствуем вопросы о том, как использовать роль. Однако, чтобы сохранить список проблем GitHub, сосредоточенным на "проблемах", мы просим сообщество поднимать вопросы на https://discuss.elastic.co/c/elasticsearch. Это под наблюдением поддерживающих.
ansible-galaxy install elastic/ansible-elasticsearch