elasticsearch

АРХИВ

Этот проект больше не поддерживается.

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

Для альтернативных способов начала работы вы можете попробовать один из следующих вариантов:

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

Дополнительная конфигурация

В дополнение к 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 ПОРТ НЕ 9200

  • es_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. Это под наблюдением поддерживающих.

О проекте

Elasticsearch for Linux

Установить
ansible-galaxy install elastic/ansible-elasticsearch
Лицензия
other
Загрузки
4136397
Владелец