Install and upgrade OpenSearch
OpenSearch и OpenSearch Dashboards доступны на любом совместимом хосте, который поддерживает Docker
OpenSearch и OpenSearch Dashboards доступны на любом совместимом хосте, который поддерживает Docker (таких как Linux, MacOS или Windows). Кроме того, вы можете установить оба продукта на различных дистрибутивах Linux и на Windows.
Скачайте OpenSearch для вашей предпочтительной платформы, а затем выберите один из следующих руководств по установке.
OpenSearch |
OpenSearch Dashboards |
Docker |
Docker |
Helm |
Helm |
Tarball |
Tarball |
RPM |
RPM |
Debian |
Debian |
Ansible playbook |
|
Windows |
Windows |
После установки OpenSearch ознакомьтесь с его настройкой для вашего развертывания.
Для получения дополнительной информации об обновлении вашего кластера OpenSearch смотрите руководство по обновлению.
Для информации об инструментах обновления смотрите инструменты обновления, миграции и сравнения OpenSearch.
Для установки плагинов смотрите раздел Установка плагинов.
1 - Установка OpenSearch
В этом разделе представлена информация о том, как установить OpenSearch на вашем хосте, включая порты, которые необходимо открыть, и важные настройки, которые нужно сконфигурировать на вашем хосте.
Рекомендации по файловой системе
Избегайте использования сетевой файловой системы для хранения узлов в рабочем процессе в производственной среде. Использование сетевой файловой системы для хранения узлов может вызвать проблемы с производительностью в вашем кластере из-за таких факторов, как условия сети (например, задержка или ограниченная пропускная способность) или скорости чтения/записи. Вам следует использовать твердотельные накопители (SSD), установленные на хосте, для хранения узлов, где это возможно.
Совместимость с Java
Распределение OpenSearch для Linux поставляется с совместимой версией JDK Adoptium Java в каталоге jdk. Чтобы узнать версию JDK, выполните команду ./jdk/bin/java -version
. Например, архив OpenSearch 1.0.0 поставляется с Java 15.0.1+9 (не LTS), OpenSearch 1.3.0 поставляется с Java 11.0.14.1+1 (LTS), а OpenSearch 2.0.0 поставляется с Java 17.0.2+8 (LTS). OpenSearch тестируется со всеми совместимыми версиями Java.
Версия OpenSearch |
Совместимые версии Java |
Встроенная версия Java |
1.0–1.2.x |
11, 15 |
15.0.1+9 |
1.3.x |
8, 11, 14 |
11.0.25+9 |
2.0.0–2.11.x |
11, 17 |
17.0.2+8 |
2.12.0+ |
11, 17, 21 |
21.0.5+11 |
Чтобы использовать другую установку Java, установите переменную окружения OPENSEARCH_JAVA_HOME
или JAVA_HOME
на расположение установки Java. Например:
export OPENSEARCH_JAVA_HOME=/path/to/opensearch-3.1.0/jdk
Сетевые требования
Следующие порты необходимо открыть для компонентов OpenSearch.
Номер порта |
Компонент OpenSearch |
443 |
OpenSearch Dashboards в AWS OpenSearch Service с шифрованием в пути (TLS) |
5601 |
OpenSearch Dashboards |
9200 |
OpenSearch REST API |
9300 |
Внутреннее взаимодействие узлов и транспорт, поиск по кластерам |
9600 |
Анализатор производительности |
Важные настройки
Для рабочих нагрузок в производственной среде убедитесь, что настройка Linux vm.max_map_count
установлена как минимум на 262144. Даже если вы используете образ Docker, установите это значение на хост-машине. Чтобы проверить текущее значение, выполните следующую команду:
cat /proc/sys/vm/max_map_count
Чтобы увеличить значение, добавьте следующую строку в файл /etc/sysctl.conf
:
Затем выполните команду sudo sysctl -p
, чтобы перезагрузить настройки.
Для рабочих нагрузок Windows вы можете установить vm.max_map_count
, выполнив следующие команды:
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
Пример файла docker-compose.yml
Файл docker-compose.yml
также содержит несколько ключевых настроек:
bootstrap.memory_lock: true
Эта настройка отключает свопинг (вместе с memlock
). Свопинг может значительно снизить производительность и стабильность, поэтому вы должны убедиться, что он отключен на производственных кластерах.
Включение настройки bootstrap.memory_lock
заставит JVM зарезервировать всю необходимую память. Руководство по настройке сборки мусора Java SE Hotspot VM документирует резервирование 1 гигабайта (ГБ) нативной памяти для метаданных классов по умолчанию. В сочетании с кучей Java это может привести к ошибке из-за нехватки нативной памяти на ВМ с меньшим объемом памяти, чем эти требования. Чтобы предотвратить ошибки, ограничьте размер резервируемой памяти с помощью -XX:CompressedClassSpaceSize
или -XX:MaxMetaspaceSize
и установите размер кучи Java, чтобы убедиться, что у вас достаточно системной памяти.
OPENSEARCH_JAVA_OPTS: -Xms512m -Xmx512m
Эта настройка устанавливает размер кучи Java (рекомендуем использовать половину системной ОЗУ).
OpenSearch по умолчанию использует -Xms1g -Xmx1g
для выделения памяти кучи, что имеет приоритет над конфигурациями, указанными с использованием процентной нотации (-XX:MinRAMPercentage
, -XX:MaxRAMPercentage
). Например, если вы установите OPENSEARCH_JAVA_OPTS=-XX:MinRAMPercentage=30 -XX:MaxRAMPercentage=70
, предустановленные значения -Xms1g -Xmx1g
переопределят эти настройки. При использовании OPENSEARCH_JAVA_OPTS
для определения выделения памяти убедитесь, что вы используете нотацию -Xms
и -Xmx
.
Эта настройка устанавливает лимит в 65536 открытых файлов для пользователя OpenSearch.
Эта настройка позволяет вам получить доступ к Анализатору производительности на порту 9600.
Не объявляйте одни и те же параметры JVM в нескольких местах, так как это может привести к непредсказуемому поведению или сбою запуска службы OpenSearch. Если вы объявляете параметры JVM с помощью переменной окружения, такой как OPENSEARCH_JAVA_OPTS=-Xms3g -Xmx3g
, то вам следует закомментировать любые ссылки на этот параметр JVM в config/jvm.options
. Напротив, если вы определяете параметры JVM в config/jvm.options
, то не следует определять эти параметры JVM с помощью переменных окружения.
Важные системные свойства
OpenSearch имеет ряд системных свойств, перечисленных в следующей таблице, которые вы можете указать в файле config/jvm.options
или в переменной OPENSEARCH_JAVA_OPTS
, используя нотацию аргументов командной строки -D
.
Свойство |
Описание |
opensearch.xcontent.string.length.max=<value> |
По умолчанию OpenSearch не накладывает ограничений на максимальную длину строковых полей JSON/YAML/CBOR/Smile. Чтобы защитить ваш кластер от потенциальных атак типа “отказ в обслуживании” (DDoS) или проблем с памятью, вы можете установить это свойство на разумный предел (максимум 2,147,483,647), например, -Dopensearch.xcontent.string.length.max=5000000 . |
`opensearch.xcontent.fast_double_writer=[true |
false]` |
opensearch.xcontent.name.length.max=<value> |
По умолчанию OpenSearch не накладывает ограничений на максимальную длину имен полей JSON/YAML/CBOR/Smile. Чтобы защитить ваш кластер от потенциальных DDoS или проблем с памятью, вы можете установить это свойство на разумный предел (максимум 2,147,483,647), например, -Dopensearch.xcontent.name.length.max=50000 . |
opensearch.xcontent.depth.max=<value> |
По умолчанию OpenSearch не накладывает ограничений на максимальную глубину вложенности для документов JSON/YAML/CBOR/Smile. Чтобы защитить ваш кластер от потенциальных DDoS или проблем с памятью, вы можете установить это свойство на разумный предел (максимум 2,147,483,647), например, -Dopensearch.xcontent.depth.max=1000 . |
opensearch.xcontent.codepoint.max=<value> |
По умолчанию OpenSearch накладывает ограничение в 52428800 на максимальный размер YAML-документов (в кодовых точках). Чтобы защитить ваш кластер от потенциальных DDoS или проблем с памятью, вы можете изменить это свойство на разумный предел (максимум 2,147,483,647). Например, -Dopensearch.xcontent.codepoint.max=5000000 . |
1.1 - Docker
Docker значительно упрощает процесс настройки и управления вашими кластерами OpenSearch.
Docker значительно упрощает процесс настройки и управления вашими кластерами OpenSearch. Вы можете загружать официальные образы из Docker Hub или Amazon Elastic Container Registry (Amazon ECR) и быстро развернуть кластер, используя Docker Compose и любой из примеров файлов Docker Compose, включенных в этот гид. Опытные пользователи OpenSearch могут дополнительно настроить свое развертывание, создав собственный файл Docker Compose.
Контейнеры Docker являются портативными и будут работать на любом совместимом хосте, который поддерживает Docker (таких как Linux, MacOS или Windows). Портативность контейнера Docker предлагает гибкость по сравнению с другими методами установки, такими как RPM или ручная установка из Tarball, которые требуют дополнительной конфигурации после загрузки и распаковки.
Этот гид предполагает, что вы уверенно работаете с интерфейсом командной строки (CLI) Linux. Вы должны понимать, как вводить команды, перемещаться между директориями и редактировать текстовые файлы. Для получения помощи по Docker или Docker Compose обратитесь к официальной документации на их веб-сайтах.
Установка Docker и Docker Compose
Посетите страницу Get Docker для получения рекомендаций по установке и настройке Docker для вашей среды. Если вы устанавливаете Docker Engine с помощью CLI, то по умолчанию Docker не будет иметь никаких ограничений на доступные ресурсы хоста. В зависимости от вашей среды вы можете настроить ограничения ресурсов в Docker. См. раздел Runtime options with Memory, CPUs, and GPUs для получения информации.
Пользователи Docker Desktop должны установить использование памяти хоста на минимум 4 ГБ, открыв Docker Desktop и выбрав Settings → Resources.
Docker Compose — это утилита, которая позволяет пользователям запускать несколько контейнеров с одной командой. Вы передаете файл Docker Compose при его вызове. Docker Compose читает эти настройки и запускает запрашиваемые контейнеры. Docker Compose устанавливается автоматически с Docker Desktop, но пользователи, работающие в командной строке, должны установить Docker Compose вручную. Вы можете найти информацию о установке Docker Compose на официальной странице Docker Compose GitHub.
Если вам нужно установить Docker Compose вручную и ваш хост поддерживает Python, вы можете использовать pip
для автоматической установки пакета Docker Compose.
Настройка важных параметров хоста
Перед установкой OpenSearch с использованием Docker настройте следующие параметры. Это самые важные настройки, которые могут повлиять на производительность ваших сервисов, но для дополнительной информации смотрите раздел о важных системных настройках.
Настройки для Linux
Для среды Linux выполните следующие команды:
-
Отключите производительность памяти с помощью свопинга для улучшения производительности:
-
Увеличьте количество доступных для OpenSearch карт памяти:
# Отредактируйте файл конфигурации sysctl
sudo vi /etc/sysctl.conf
# Добавьте строку для определения желаемого значения
# или измените значение, если ключ существует,
# а затем сохраните изменения.
vm.max_map_count=262144
# Перезагрузите параметры ядра с помощью sysctl
sudo sysctl -p
# Проверьте, что изменение было применено, проверив значение
cat /proc/sys/vm/max_map_count
Настройки для Windows
Для рабочих нагрузок Windows, использующих WSL через Docker Desktop, выполните следующие команды в терминале, чтобы установить vm.max_map_count
:
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
Запуск OpenSearch в контейнере Docker
Официальные образы OpenSearch размещены на Docker Hub и Amazon ECR. Если вы хотите просмотреть образы, вы можете загружать их по отдельности, используя команду docker pull
, как в следующих примерах.
Docker Hub:
docker pull opensearchproject/opensearch:3
docker pull opensearchproject/opensearch-dashboards:3
Amazon ECR:
docker pull public.ecr.aws/opensearchproject/opensearch:3
docker pull public.ecr.aws/opensearchproject/opensearch-dashboards:3
Чтобы загрузить конкретную версию OpenSearch или OpenSearch Dashboards, отличную от последней доступной версии, измените тег образа, где он упоминается (либо в командной строке, либо в файле Docker Compose). Например, opensearchproject/opensearch:3.1.0
загрузит версию OpenSearch 3.1.0. Чтобы загрузить последнюю версию, используйте opensearchproject/opensearch:latest
. Обратитесь к официальным репозиториям образов для доступных версий.
Перед тем как продолжить, вы должны убедиться, что Docker работает корректно, развернув OpenSearch в одном контейнере.
Запуск OpenSearch в контейнере Docker
- Выполните следующую команду:
# Эта команда сопоставляет порты 9200 и 9600, устанавливает тип обнаружения на "single-node" и запрашивает самый новый образ OpenSearch
docker run -d -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" opensearchproject/opensearch:latest
Для OpenSearch версии 2.12 или выше установите новый пользовательский пароль администратора перед установкой, используя следующую команду:
docker run -d -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password>" opensearchproject/opensearch:latest
- Отправьте запрос на порт 9200. Имя пользователя и пароль по умолчанию —
admin
.
curl https://localhost:9200 -ku admin:<custom-admin-password>
Вы должны получить ответ, который выглядит следующим образом:
{
"name" : "a937e018cee5",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw",
"version" : {
"distribution" : "opensearch",
"number" : "<version>",
"build_type" : "<build-type>",
"build_hash" : "<build-hash>",
"build_date" : "<build-date>",
"build_snapshot" : false,
"lucene_version" : "<lucene-version>",
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
- Перед остановкой работающего контейнера отобразите список всех работающих контейнеров и скопируйте идентификатор контейнера для узла OpenSearch, который вы тестируете. В следующем примере идентификатор контейнера —
a937e018cee5
:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a937e018cee5 opensearchproject/opensearch:latest "./opensearch-docker…" 19 minutes ago Up 19 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp, 0.0.0.0:9600->9600/tcp, 9650/tcp wonderful_boyd
- Остановите работающий контейнер, передав идентификатор контейнера в команду
docker stop
.
docker stop <containerId>
Помните, что команда docker container ls
не отображает остановленные контейнеры. Если вы хотите просмотреть остановленные контейнеры, используйте команду docker container ls -a
. Вы можете удалить ненужные контейнеры вручную с помощью команды docker container rm <containerId_1> <containerId_2> <containerId_3> [...]
(укажите все идентификаторы контейнеров, которые вы хотите остановить, разделенные пробелами), или, если вы хотите удалить все остановленные контейнеры, вы можете использовать более короткую команду docker container prune
.
Развертывание кластера OpenSearch с использованием Docker Compose
Хотя технически возможно создать кластер OpenSearch, создавая контейнеры по одной команде за раз, гораздо проще определить вашу среду в YAML-файле и позволить Docker Compose управлять кластером. В следующем разделе содержатся примеры YAML-файлов, которые вы можете использовать для запуска предопределенного кластера с OpenSearch и OpenSearch Dashboards. Эти примеры полезны для тестирования и разработки, но не подходят для производственной среды. Если у вас нет опыта работы с Docker Compose, вам может быть полезно ознакомиться со спецификацией Docker Compose для получения рекомендаций по синтаксису и форматированию перед внесением изменений в структуры словарей в примерах.
Файл YAML, который определяет среду, называется файлом Docker Compose. По умолчанию команды docker-compose
сначала проверяют вашу текущую директорию на наличие файла, который соответствует любому из следующих имен:
docker-compose.yml
docker-compose.yaml
compose.yml
compose.yaml
Если ни один из этих файлов не существует в вашей текущей директории, команда docker-compose
завершится с ошибкой.
Вы можете указать пользовательское местоположение и имя файла при вызове docker-compose
с помощью флага -f
:
# Используйте относительный или абсолютный путь к файлу.
docker compose -f /path/to/your-file.yml up
Если вы впервые запускаете кластер OpenSearch с использованием Docker Compose, используйте следующий пример файла docker-compose.yml
. Сохраните его в домашнем каталоге вашего хоста и назовите его docker-compose.yml
. Этот файл создает кластер, который содержит три контейнера: два контейнера, работающих с сервисом OpenSearch, и один контейнер, работающий с OpenSearch Dashboards. Эти контейнеры общаются через мостовую сеть под названием opensearch-net
и используют два тома, по одному для каждого узла OpenSearch. Поскольку этот файл явно не отключает демонстрационную конфигурацию безопасности, устанавливаются самоподписанные TLS-сертификаты, и создаются внутренние пользователи с именами и паролями по умолчанию.
Установка пользовательского пароля администратора
Начиная с OpenSearch 2.12, для настройки демонстрационной конфигурации безопасности требуется пользовательский пароль администратора. Выполните одно из следующих действий:
-
Перед запуском docker-compose.yml
установите новый пользовательский пароль администратора, используя следующую команду:
export OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password>
-
Создайте файл .env
в той же папке, что и ваш файл docker-compose.yml
, с переменной OPENSEARCH_INITIAL_ADMIN_PASSWORD
и значением надежного пароля.
Требования к паролям
OpenSearch по умолчанию обеспечивает высокую безопасность паролей, используя библиотеку оценки прочности паролей zxcvbn, разработанную компанией Dropbox.
Эта библиотека оценивает пароли на основе энтропии, а не жестких правил сложности, используя следующие рекомендации:
-
Сосредоточьтесь на энтропии, а не только на правилах: Вместо того чтобы просто добавлять цифры или специальные символы, придавайте приоритет общей непредсказуемости. Длинные пароли, состоящие из случайных слов или символов, обеспечивают более высокую энтропию, что делает их более безопасными, чем короткие пароли, соответствующие традиционным правилам сложности.
-
Избегайте общих шаблонов и слов из словаря: Библиотека zxcvbn обнаруживает распространенные шаблоны и слова из словаря, что помогает предотвратить использование легко угадываемых паролей.
Следуя этим рекомендациям, вы сможете создать более надежные пароли, которые обеспечат лучшую защиту ваших учетных записей и данных в OpenSearch.
Sample docker-compose.yml
services:
opensearch-node1: # This is also the hostname of the container within the Docker network (i.e. https://opensearch-node1/)
image: opensearchproject/opensearch:latest # Specifying the latest available image - modify if you want a specific version
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster # Name the cluster
- node.name=opensearch-node1 # Name the node that will run in this container
- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligible to serve as cluster manager
- bootstrap.memory_lock=true # Disable JVM heap memory swapping
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD} # Sets the demo admin user password when using demo configuration, required for OpenSearch 2.12 and later
ulimits:
memlock:
soft: -1 # Set memlock to unlimited (no soft or hard limit)
hard: -1
nofile:
soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536
hard: 65536
volumes:
- opensearch-data1:/usr/share/opensearch/data # Creates volume called opensearch-data1 and mounts it to the container
ports:
- 9200:9200 # REST API
- 9600:9600 # Performance Analyzer
networks:
- opensearch-net # All of the containers will join the same Docker bridge network
opensearch-node2:
image: opensearchproject/opensearch:latest # This should be the same image used for opensearch-node1 to avoid issues
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster
- node.name=opensearch-node2
- discovery.seed_hosts=opensearch-node1,opensearch-node2
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- opensearch-data2:/usr/share/opensearch/data
networks:
- opensearch-net
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:latest # Make sure the version of opensearch-dashboards matches the version of opensearch installed on other nodes
container_name: opensearch-dashboards
ports:
- 5601:5601 # Map host port 5601 to container port 5601
expose:
- "5601" # Expose port 5601 for web access to OpenSearch Dashboards
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' # Define the OpenSearch nodes that OpenSearch Dashboards will query
networks:
- opensearch-net
volumes:
opensearch-data1:
opensearch-data2:
networks:
opensearch-net:
Если вы переопределяете настройки opensearch_dashboards.yml, используя переменные окружения в вашем файле Compose, используйте все заглавные буквы и заменяйте точки на подчеркивания. Например, для opensearch.hosts используйте OPENSEARCH_HOSTS.
Это поведение отличается от переопределения настроек opensearch.yml, где преобразование заключается только в изменении оператора присваивания. Например, discovery.type: single-node в opensearch.yml определяется как discovery.type=single-node в docker-compose.yml.
Запуск и управление контейнерами OpenSearch с использованием Docker Compose
-
Создайте и запустите контейнеры в фоновом режиме из домашнего каталога вашего хоста (содержащего docker-compose.yml
):
-
Проверьте, что сервисные контейнеры запустились корректно:
-
Если контейнер не удалось запустить, вы можете просмотреть логи сервиса:
# Если вы не укажете имя сервиса, docker compose покажет логи всех узлов
docker compose logs <serviceName>
-
Проверьте доступ к OpenSearch Dashboards, подключившись к http://localhost:5601 из браузера. Для OpenSearch версии 2.12 и выше вы должны использовать ваш настроенный логин и пароль. Для более ранних версий логин и пароль по умолчанию — admin
. Мы не рекомендуем использовать эту конфигурацию на хостах, доступных из публичного интернета, пока вы не настроите конфигурацию безопасности вашего развертывания.
Помните, что localhost
не может быть доступен удаленно. Если вы развертываете эти контейнеры на удаленном хосте, вам нужно установить сетевое соединение и заменить localhost
на IP-адрес или DNS-запись, соответствующую хосту.
-
Остановите работающие контейнеры в вашем кластере:
Команда docker compose down
остановит работающие контейнеры, но не удалит Docker-тома, которые существуют на хосте. Если вам не важны содержимое этих томов, используйте опцию -v
, чтобы удалить все тома, например:
Настройка OpenSearch
В отличие от RPM-распределения OpenSearch, которое требует значительного объема конфигурации после установки, запуск кластеров OpenSearch с помощью Docker позволяет вам определить среду еще до создания контейнеров. Это возможно как при использовании Docker, так и при использовании Docker Compose.
Пример команды Docker
Рассмотрим следующую команду:
docker run \
-p 9200:9200 -p 9600:9600 \
-e "discovery.type=single-node" \
-v /path/to/custom-opensearch.yml:/usr/share/opensearch/config/opensearch.yml \
opensearchproject/opensearch:latest
Разберем каждую часть команды:
- Сопоставляет порты 9200 и 9600 (HOST_PORT:CONTAINER_PORT).
- Устанавливает
discovery.type
в single-node
, чтобы проверки загрузки не завершились неудачей для этого развертывания с одним узлом.
- Использует флаг
-v
, чтобы передать локальный файл с именем custom-opensearch.yml
в контейнер, заменяя файл opensearch.yml
, включенный в образ.
- Запрашивает образ
opensearchproject/opensearch:latest
из Docker Hub.
- Запускает контейнер.
Если вы сравните эту команду с примером файла docker-compose.yml
, вы можете заметить некоторые общие настройки, такие как сопоставление портов и ссылка на образ. Однако эта команда только развертывает один контейнер, работающий с OpenSearch, и не создает контейнер для OpenSearch Dashboards. Более того, если вы хотите использовать пользовательские TLS-сертификаты, пользователей или роли, или определить дополнительные тома и сети, то эта “однострочная” команда быстро становится непрактичной. Вот где полезность Docker Compose становится очевидной.
Использование Docker Compose
Когда вы строите свой кластер OpenSearch с помощью Docker Compose, вам может быть проще передавать пользовательские файлы конфигурации с вашего хоста в контейнер, вместо того чтобы перечислять каждую отдельную настройку в docker-compose.yml
. Аналогично тому, как в примере команды docker run
был смонтирован том с хоста в контейнер с помощью флага -v
, файлы Compose могут указывать тома для монтирования как подопцию для соответствующей службы. Следующий сокращенный YAML-файл демонстрирует, как смонтировать файл или директорию в контейнер:
services:
opensearch-node1:
volumes:
- opensearch-data1:/usr/share/opensearch/data
- ./custom-opensearch.yml:/usr/share/opensearch/config/opensearch.yml
opensearch-node2:
volumes:
- opensearch-data2:/usr/share/opensearch/data
- ./custom-opensearch.yml:/usr/share/opensearch/config/opensearch.yml
opensearch-dashboards:
volumes:
- ./custom-opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml
Обратите внимание, что в этом примере каждый узел OpenSearch использует один и тот же файл конфигурации, что упрощает управление настройками. Для получения более подробной информации о использовании томов и синтаксисе обратитесь к официальной документации Docker по томам.
Пример файла Docker Compose для разработки
Если вы хотите создать свой собственный файл compose на основе примера, ознакомьтесь с следующим образцом файла docker-compose.yml
. Этот образец создает два узла OpenSearch и один узел OpenSearch Dashboards с отключенным плагином безопасности. Вы можете использовать этот образец в качестве отправной точки, просматривая Настройка основных параметров безопасности.
services:
opensearch-node1:
image: opensearchproject/opensearch:latest
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster # Название кластера
- node.name=opensearch-node1 # Название узла, который будет работать в этом контейнере
- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Узлы, которые будут использоваться для обнаружения кластера
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Узлы, которые могут служить менеджерами кластера
- bootstrap.memory_lock=true # Отключить свопинг памяти кучи JVM
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Установить минимальный и максимальный размеры кучи JVM не менее 50% от системной оперативной памяти
- "DISABLE_INSTALL_DEMO_CONFIG=true" # Предотвращает выполнение встроенного демо-скрипта, который устанавливает демо-сертификаты и конфигурации безопасности в OpenSearch
- "DISABLE_SECURITY_PLUGIN=true" # Отключает плагин безопасности
ulimits:
memlock:
soft: -1 # Установить memlock на неограниченное (без мягкого или жесткого ограничения)
hard: -1
nofile:
soft: 65536 # Максимальное количество открытых файлов для пользователя opensearch - установить не менее 65536
hard: 65536
volumes:
- opensearch-data1:/usr/share/opensearch/data # Создает том с именем opensearch-data1 и монтирует его в контейнер
ports:
- 9200:9200 # REST API
- 9600:9600 # Анализатор производительности
networks:
- opensearch-net # Все контейнеры будут присоединены к одной и той же сети Docker bridge
opensearch-node2:
image: opensearchproject/opensearch:latest
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster # Название кластера
- node.name=opensearch-node2 # Название узла, который будет работать в этом контейнере
- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Узлы, которые будут использоваться для обнаружения кластера
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Узлы, которые могут служить менеджерами кластера
- bootstrap.memory_lock=true # Отключить свопинг памяти кучи JVM
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Установить минимальный и максимальный размеры кучи JVM не менее 50% от системной оперативной памяти
- "DISABLE_INSTALL_DEMO_CONFIG=true" # Предотвращает выполнение встроенного демо-скрипта, который устанавливает демо-сертификаты и конфигурации безопасности в OpenSearch
- "DISABLE_SECURITY_PLUGIN=true" # Отключает плагин безопасности
ulimits:
memlock:
soft: -1 # Установить memlock на неограниченное (без мягкого или жесткого ограничения)
hard: -1
nofile:
soft: 65536 # Максимальное количество открытых файлов для пользователя opensearch - установить не менее 65536
hard: 65536
volumes:
- opensearch-data2:/usr/share/opensearch/data # Создает том с именем opensearch-data2 и монтирует его в контейнер
networks:
- opensearch-net # Все контейнеры будут присоединены к одной и той же сети Docker bridge
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:latest
container_name: opensearch-dashboards
ports:
- 5601:5601 # Привязка порта хоста 5601 к порту контейнера 5601
expose:
- "5601" # Открыть порт 5601 для веб-доступа к OpenSearch Dashboards
environment:
- 'OPENSEARCH_HOSTS=["http://opensearch-node1:9200","http://opensearch-node2:9200"]' # Указать узлы OpenSearch для Dashboards
- "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true" # Отключает плагин безопасности в OpenSearch Dashboards
networks:
- opensearch-net
volumes:
opensearch-data1: {} # Создает том opensearch-data1
opensearch-data2: {} # Создает том opensearch-data2
networks:
opensearch-net: {} # Создает сеть opensearch-net
Настройка основных параметров безопасности
Перед тем как сделать ваш кластер OpenSearch доступным для внешних хостов, рекомендуется ознакомиться с конфигурацией безопасности развертывания. Вы можете вспомнить из первого примера файла docker-compose.yml
, что, если не отключить плагин безопасности, установив DISABLE_SECURITY_PLUGIN=true
, встроенный скрипт применит стандартную демо-конфигурацию безопасности к узлам в кластере. Поскольку эта конфигурация используется для демонстрационных целей, стандартные имена пользователей и пароли известны. Поэтому мы рекомендуем создать собственные файлы конфигурации безопасности и использовать тома для передачи этих файлов в контейнеры. Для получения конкретных рекомендаций по настройке безопасности OpenSearch смотрите Конфигурация безопасности.
Чтобы использовать свои собственные сертификаты в конфигурации, добавьте все необходимые сертификаты в раздел томов файла compose:
volumes:
- ./root-ca.pem:/usr/share/opensearch/config/root-ca.pem
- ./admin.pem:/usr/share/opensearch/config/admin.pem
- ./admin-key.pem:/usr/share/opensearch/config/admin-key.pem
- ./node1.pem:/usr/share/opensearch/config/node1.pem
- ./node1-key.pem:/usr/share/opensearch/config/node1-key.pem
Когда вы добавляете сертификаты TLS к узлам OpenSearch с помощью томов Docker Compose, вы также должны включить пользовательский файл opensearch.yml
, который определяет эти сертификаты. Например:
volumes:
- ./root-ca.pem:/usr/share/opensearch/config/root-ca.pem
- ./admin.pem:/usr/share/opensearch/config/admin.pem
- ./admin-key.pem:/usr/share/opensearch/config/admin-key.pem
- ./node1.pem:/usr/share/opensearch/config/node1.pem
- ./node1-key.pem:/usr/share/opensearch/config/node1-key.pem
- ./custom-opensearch.yml:/usr/share/opensearch/config/opensearch.yml
Помните, что сертификаты, которые вы указываете в файле compose, должны совпадать с сертификатами, определенными в вашем пользовательском файле opensearch.yml
. Вам следует заменить корневые, администраторские и узловые сертификаты на свои собственные. Для получения дополнительной информации смотрите Настройка сертификатов TLS.
Пример конфигурации в вашем пользовательском файле opensearch.yml
может выглядеть следующим образом, добавляя сертификаты TLS и отличительное имя (DN) сертификата администратора, определяя несколько разрешений и включая подробное аудиторское логирование:
plugins.security.ssl.transport.pemcert_filepath: node1.pem
plugins.security.ssl.transport.pemkey_filepath: node1-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: node1.pem
plugins.security.ssl.http.pemkey_filepath: node1-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
- CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA
plugins.security.nodes_dn:
- 'CN=N,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
cluster.routing.allocation.disk.threshold_enabled: false
opendistro_security.audit.config.disabled_rest_categories: NONE
opendistro_security.audit.config.disabled_transport_categories: NONE
Полный список настроек
Для получения полного списка настроек смотрите Безопасность.
Используйте тот же процесс для указания конфигурации Backend в файле /usr/share/opensearch/config/opensearch-security/config.yml
, а также для создания новых внутренних пользователей, ролей, сопоставлений, групп действий и арендаторов в соответствующих YAML-файлах.
После замены сертификатов и создания собственных внутренних пользователей, ролей, сопоставлений, групп действий и арендаторов, используйте Docker Compose для запуска кластера:
Работа с плагинами
Чтобы использовать образ OpenSearch с пользовательским плагином, вам сначала нужно создать Dockerfile. Ознакомьтесь с официальной документацией Docker для получения информации о создании Dockerfile.
FROM opensearchproject/opensearch:latest
RUN /usr/share/opensearch/bin/opensearch-plugin install --batch <pluginId>
Затем выполните следующие команды:
# Создание образа из Dockerfile
docker build --tag=opensearch-custom-plugin .
# Запуск контейнера из пользовательского образа
docker run -p 9200:9200 -p 9600:9600 -v /usr/share/opensearch/data opensearch-custom-plugin
В качестве альтернативы, вы можете удалить плагин из образа перед его развертыванием. Этот пример Dockerfile удаляет плагин безопасности:
FROM opensearchproject/opensearch:latest
RUN /usr/share/opensearch/bin/opensearch-plugin remove opensearch-security
Вы также можете использовать Dockerfile для передачи своих собственных сертификатов для использования с плагином безопасности:
FROM opensearchproject/opensearch:latest
COPY --chown=opensearch:opensearch opensearch.yml /usr/share/opensearch/config/
COPY --chown=opensearch:opensearch my-key-file.pem /usr/share/opensearch/config/
COPY --chown=opensearch:opensearch my-certificate-chain.pem /usr/share/opensearch/config/
COPY --chown=opensearch:opensearch my-root-cas.pem /usr/share/opensearch/config/
1.2 - Установка OpenSearch на Debian
Установка OpenSearch с использованием менеджера пакетов Advanced Packaging Tool (APT)
Установка OpenSearch с использованием менеджера пакетов Advanced Packaging Tool (APT) значительно упрощает процесс по сравнению с методом Tarball. Несколько технических аспектов, таких как путь установки, расположение конфигурационных файлов и создание службы, управляемой systemd, обрабатываются автоматически менеджером пакетов.
В общем, установка OpenSearch из дистрибутива Debian может быть разбита на несколько шагов:
- Скачать и установить OpenSearch.
- Установить вручную из Debian-пакета или из APT-репозитория.
- (Необязательно) Протестировать OpenSearch.
- Подтвердите, что OpenSearch может работать, прежде чем применять какую-либо пользовательскую конфигурацию.
- Это можно сделать без какой-либо безопасности (без пароля, без сертификатов) или с демо-конфигурацией безопасности, которая может быть применена с помощью упакованного скрипта.
- Настроить OpenSearch для вашей среды.
- Примените основные настройки к OpenSearch и начните использовать его в вашей среде.
Дистрибутив Debian предоставляет все необходимое для запуска OpenSearch внутри дистрибутивов Linux на базе Debian, таких как Ubuntu.
Этот гид предполагает, что вы уверенно работаете с интерфейсом командной строки (CLI) Linux. Вы должны понимать, как вводить команды, перемещаться между директориями и редактировать текстовые файлы. Некоторые примеры команд ссылаются на текстовый редактор vi, но вы можете использовать любой доступный текстовый редактор.
Шаг 1: Скачивание и установка OpenSearch
Установка OpenSearch из пакета
Скачайте Debian-пакет для желаемой версии непосредственно с страницы загрузок OpenSearch. Debian-пакет можно скачать как для архитектуры x64, так и для arm64.
Из командной строки установите пакет с помощью dpkg
:
Для новых установок OpenSearch 2.12 и более поздних версий необходимо определить пользовательский пароль администратора для настройки демо-конфигурации безопасности. Используйте одну из следующих команд для определения пользовательского пароля администратора:
# x64
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> dpkg -i opensearch-3.1.0-linux-x64.deb
# arm64
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> dpkg -i opensearch-3.1.0-linux-arm64.deb
Используйте следующую команду для версий OpenSearch 2.11 и более ранних:
# x64
sudo dpkg -i opensearch-3.1.0-linux-x64.deb
# arm64
sudo dpkg -i opensearch-3.1.0-linux-arm64.deb
После успешной установки включите OpenSearch как службу:
sudo systemctl enable opensearch
Запустите службу OpenSearch:
sudo systemctl start opensearch
Проверьте, что OpenSearch запустился корректно:
sudo systemctl status opensearch
Проверка отпечатка
Debian-пакет не подписан. Если вы хотите проверить отпечаток, проект OpenSearch предоставляет файл .sig
, а также пакет .deb
для использования с GNU Privacy Guard (GPG).
Скачайте желаемый Debian-пакет:
curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch/3.1.0/opensearch-3.1.0-linux-x64.deb
Скачайте соответствующий файл подписи:
curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch/3.1.0/opensearch-3.1.0-linux-x64.deb.sig
Скачайте и импортируйте GPG-ключ:
curl -o- https://artifacts.opensearch.org/publickeys/opensearch-release.pgp | gpg --import -
Проверьте подпись:
gpg --verify opensearch-3.1.0-linux-x64.deb.sig opensearch-3.1.0-linux-x64.deb
Установка OpenSearch из APT-репозитория
APT, основной инструмент управления пакетами для операционных систем на базе Debian, позволяет загружать и устанавливать Debian-пакет из APT-репозитория.
- Установите необходимые пакеты:
sudo apt-get update && sudo apt-get -y install lsb-release ca-certificates curl gnupg2
- Импортируйте публичный GPG-ключ. Этот ключ используется для проверки подписи APT-репозитория:
curl -o- https://artifacts.opensearch.org/publickeys/opensearch-release.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-release-keyring
- Создайте APT-репозиторий для OpenSearch:
echo "deb [signed-by=/usr/share/keyrings/opensearch-release-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-3.x.list
- Проверьте, что репозиторий был успешно создан:
- С добавленной информацией о репозитории перечислите все доступные версии OpenSearch:
sudo apt list -a opensearch
- Выбор версии OpenSearch для установки
- Если не указано иное, будет установлена последняя доступная версия OpenSearch.
# Для новых установок OpenSearch 2.12 и более поздних версий необходимо определить пользовательский пароль администратора для настройки демо-конфигурации безопасности.
# Используйте одну из следующих команд для определения пользовательского пароля:
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> apt-get install opensearch
# Для версий OpenSearch 2.11 и более ранних используйте следующую команду:
sudo apt-get install opensearch
- Установка конкретной версии OpenSearch
# Чтобы установить конкретную версию OpenSearch, укажите версию вручную, используя `opensearch=<version>`:
# Для новых установок OpenSearch 2.12 и более поздних версий:
sudo env OPENSEARCH_INITIAL_ADMIN_PASSWORD=<custom-admin-password> apt-get install opensearch=3.1.0
# Для версий OpenSearch 2.11 и более ранних:
sudo apt-get install opensearch=3.1.0
- Во время установки установщик предоставит вам отпечаток GPG-ключа. Убедитесь, что информация совпадает с указанной ниже:
Fingerprint: c5b7 4989 65ef d1c2 924b a9d5 39d3 1987 9310 d3fc
- Проверьте, что отпечаток ключа соответствует ожидаемому значению, чтобы гарантировать целостность и подлинность пакета.
sudo systemctl enable opensearch
- Запуск OpenSearch
Чтобы запустить OpenSearch, выполните следующую команду:
sudo systemctl start opensearch
- Проверка статуса OpenSearch
После запуска проверьте, что OpenSearch запустился корректно, с помощью следующей команды:
sudo systemctl status opensearch
Шаг 2: (Необязательно) Тестирование OpenSearch
Перед тем как продолжить с любой конфигурацией, рекомендуется протестировать вашу установку OpenSearch. В противном случае может быть сложно определить, связаны ли будущие проблемы с установочными ошибками или с пользовательскими настройками, которые вы применили после установки.
Когда OpenSearch установлен с использованием Debian-пакета, некоторые демо-настройки безопасности автоматически применяются. Это включает в себя самоподписанные TLS-сертификаты и несколько пользователей и ролей. Если вы хотите настроить их самостоятельно, смотрите раздел Настройка OpenSearch в вашей среде.
Узел OpenSearch в своей стандартной конфигурации (с демо-сертификатами и пользователями с стандартными паролями) не подходит для производственной среды. Если вы планируете использовать узел в производственной среде, вам следует, как минимум, заменить демо TLS-сертификаты на ваши собственные и обновить список внутренних пользователей и паролей. Смотрите Конфигурация безопасности для получения дополнительной информации, чтобы убедиться, что ваши узлы настроены в соответствии с вашими требованиями безопасности.
Отправка запросов на сервер
Отправьте запросы на сервер, чтобы проверить, что OpenSearch работает. Обратите внимание на использование флага --insecure
, который необходим, поскольку TLS-сертификаты самоподписаны.
Отправьте запрос на порт 9200:
curl -X GET https://localhost:9200 -u 'admin:<custom-admin-password>' --insecure
Ожидаемый ответ
Вы должны получить ответ, который выглядит примерно так:
{
"name": "hostname",
"cluster_name": "opensearch",
"cluster_uuid": "QqgpHCbnSRKcPAizqjvoOw",
"version": {
"distribution": "opensearch",
"number": <version>,
"build_type": <build-type>,
"build_hash": <build-hash>,
"build_date": <build-date>,
"build_snapshot": false,
"lucene_version": <lucene-version>,
"minimum_wire_compatibility_version": "7.10.0",
"minimum_index_compatibility_version": "7.0.0"
},
"tagline": "The OpenSearch Project: https://opensearch.org/"
}
Запрос к конечной точке плагинов
Запросите конечную точку плагинов:
curl -X GET https://localhost:9200/_cat/plugins?v -u 'admin:<custom-admin-password>' --insecure
Этот запрос вернет список установленных плагинов, что также подтвердит, что OpenSearch работает корректно.
Ожидаемый ответ для запроса к конечной точке плагинов
Name |
Component |
Version |
hostname |
opensearch-alerting |
3.1.0 |
hostname |
opensearch-anomaly-detection |
3.1.0 |
hostname |
opensearch-asynchronous-search |
3.1.0 |
hostname |
opensearch-cross-cluster-replication |
3.1.0 |
hostname |
opensearch-geospatial |
3.1.0 |
hostname |
opensearch-index-management |
3.1.0 |
hostname |
opensearch-job-scheduler |
3.1.0 |
hostname |
opensearch-knn |
3.1.0 |
hostname |
opensearch-ml |
3.1.0 |
hostname |
opensearch-neural-search |
3.1.0 |
hostname |
opensearch-notifications |
3.1.0 |
hostname |
opensearch-notifications-core |
3.1.0 |
hostname |
opensearch-observability |
3.1.0 |
hostname |
opensearch-performance-analyzer |
3.1.0 |
hostname |
opensearch-reports-scheduler |
3.1.0 |
hostname |
opensearch-security |
3.1.0 |
hostname |
opensearch-security-analytics |
3.1.0 |
hostname |
opensearch-sql |
3.1.0 |
Шаг 3: Настройка OpenSearch в вашей среде
Пользователи, не имеющие предварительного опыта работы с OpenSearch, могут захотеть получить список рекомендуемых настроек для начала работы с сервисом. По умолчанию OpenSearch не привязан к сетевому интерфейсу и не может быть доступен внешними хостами. Кроме того, настройки безопасности заполняются стандартными именами пользователей и паролями. Следующие рекомендации позволят пользователю привязать OpenSearch к сетевому интерфейсу, создать и подписать TLS-сертификаты, а также настроить базовую аутентификацию.
Рекомендуемые настройки
Следующие настройки позволят вам:
- Привязать OpenSearch к IP-адресу или сетевому интерфейсу на хосте.
- Установить начальные и максимальные размеры кучи JVM.
- Определить переменную окружения, указывающую на встроенный JDK.
- Настроить собственные TLS-сертификаты — сторонний центр сертификации (CA) не требуется.
- Создать администратора с пользовательским паролем.
Если вы запускали демо-скрипт безопасности, вам нужно будет вручную перенастроить настройки, которые были изменены. Обратитесь к Конфигурации безопасности для получения рекомендаций перед продолжением.
Перед внесением каких-либо изменений в конфигурационные файлы всегда полезно сохранить резервную копию. Резервный файл можно использовать для устранения любых проблем, вызванных неправильной конфигурацией.
- Открытие файла
opensearch.yml
Откройте файл opensearch.yml
:
sudo vi /etc/opensearch/opensearch.yml
- Добавление следующих строк
Добавьте следующие строки в файл:
# Привязать OpenSearch к правильному сетевому интерфейсу. Используйте 0.0.0.0
# для включения всех доступных интерфейсов или укажите IP-адрес,
# назначенный конкретному интерфейсу.
network.host: 0.0.0.0
# Если вы еще не настроили кластер, установите
# discovery.type в single-node, иначе проверки загрузки
# не пройдут, когда вы попытаетесь запустить службу.
discovery.type: single-node
# Если вы ранее отключили плагин безопасности в opensearch.yml,
# обязательно включите его снова. В противном случае вы можете пропустить эту настройку.
plugins.security.disabled: false
-
Сохраните изменения и закройте файл
-
Укажите начальные и максимальные размеры кучи JVM
- Откройте файл
jvm.options
:
vi /etc/opensearch/jvm.options
-
Измените значения для начального и максимального размеров кучи. В качестве отправной точки вы должны установить эти значения на половину доступной системной памяти. Для выделенных хостов это значение можно увеличить в зависимости от ваших рабочих требований.
-
Например, если у хост-машины 8 ГБ памяти, вы можете установить начальные и максимальные размеры кучи на 4 ГБ:
- Сохраните изменения и закройте файл.
Настройка TLS
Сертификаты TLS обеспечивают дополнительную безопасность для вашего кластера, позволяя клиентам подтверждать личность хостов и шифровать трафик между клиентом и хостом. Для получения дополнительной информации обратитесь к разделам “Настройка сертификатов TLS” и “Генерация сертификатов”, которые включены в документацию по плагину безопасности. Для работы в среде разработки обычно достаточно самоподписанных сертификатов. Этот раздел проведет вас через основные шаги, необходимые для генерации собственных сертификатов TLS и их применения к вашему хосту OpenSearch.
- Перейдите в директорию, где будут храниться сертификаты
- Удалите демонстрационные сертификаты
- Сгенерируйте корневой сертификат
Это то, что вы будете использовать для подписания других сертификатов.
# Создайте закрытый ключ для корневого сертификата
sudo openssl genrsa -out root-ca-key.pem 2048
# Используйте закрытый ключ для создания самоподписанного корневого сертификата. Обязательно
# замените аргументы, переданные в -subj, чтобы они отражали ваш конкретный хост.
sudo openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730
- Создайте сертификат администратора
Этот сертификат используется для получения повышенных прав для выполнения административных задач, связанных с плагином безопасности.
# Создайте закрытый ключ для сертификата администратора
sudo openssl genrsa -out admin-key-temp.pem 2048
# Преобразуйте закрытый ключ в PKCS#8
sudo openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
# Создайте запрос на подпись сертификата (CSR). Общим именем (CN) "A" можно пользоваться, так как этот сертификат
# используется для аутентификации повышенного доступа и не привязан к хосту.
sudo openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
# Подпишите сертификат администратора с помощью корневого сертификата и закрытого ключа, которые вы создали ранее.
sudo openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730
- Создайте закрытый ключ для сертификата узла
sudo openssl genrsa -out node1-key-temp.pem 2048
# Преобразуйте закрытый ключ в PKCS#8
sudo openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem
# Создайте CSR и замените аргументы, переданные в -subj, чтобы они отражали ваш конкретный хост
# Обратите внимание, что CN должен соответствовать DNS A записи для хоста — не используйте имя хоста.
sudo openssl req -new -key node1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node1.dns.a-record" -out node1.csr
# Создайте файл расширений, который определяет SAN DNS имя для хоста
# Этот файл должен соответствовать DNS A записи хоста.
sudo sh -c 'echo subjectAltName=DNS:node1.dns.a-record > node1.ext'
# Подпишите сертификат узла с помощью корневого сертификата и закрытого ключа, которые вы создали ранее
sudo openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 730 -extfile node1.ext
- Удалите временные файлы, которые больше не нужны
sudo rm -f *temp.pem *csr *ext
- Убедитесь, что оставшиеся сертификаты принадлежат пользователю opensearch
sudo chown opensearch:opensearch admin-key.pem admin.pem node1-key.pem node1.pem root-ca-key.pem root-ca.pem root-ca.srl
- Добавьте эти сертификаты в
opensearch.yml
Как описано в разделе “Генерация сертификатов”. Продвинутые пользователи также могут выбрать добавление настроек с помощью скрипта.
#! /bin/bash
# Before running this script, make sure to replace the CN in the
# node's distinguished name with a real DNS A record.
echo "plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/node1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/node1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/node1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/node1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.authcz.admin_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo " - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.nodes_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo " - 'CN=node1.dns.a-record,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /etc/opensearch/opensearch.yml
- (Необязательно) Добавление доверия к самоподписанному корневому сертификату
# Скопируйте корневой сертификат в правильную директорию
sudo cp /etc/opensearch/root-ca.pem /etc/pki/ca-trust/source/anchors/
# Добавьте доверие
sudo update-ca-trust
Настройка пользователя
Пользователи определяются и аутентифицируются OpenSearch различными способами. Один из методов, который не требует дополнительной инфраструктуры на стороне сервера, — это ручная настройка пользователей в файле internal_users.yml
. В следующих шагах объясняется, как добавить нового внутреннего пользователя и как заменить пароль по умолчанию для администратора с помощью скрипта.
- Перейдите в директорию инструментов плагина безопасности
cd /usr/share/opensearch/plugins/opensearch-security/tools
- Запустите
hash.sh
для генерации нового пароля
- Этот скрипт завершится с ошибкой, если путь к JDK не был определен.
# Пример вывода, если JDK не найден...
$ ./hash.sh
**************************************************************************
** Этот инструмент будет устаревшим в следующем крупном релизе OpenSearch **
** https://github.com/opensearch-project/security/issues/1755 **
**************************************************************************
which: no java in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin)
WARNING: nor OPENSEARCH_JAVA_HOME nor JAVA_HOME is set, will use
./hash.sh: line 35: java: command not found
- Объявите переменную окружения при вызове скрипта, чтобы избежать проблем
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./hash.sh
- Введите желаемый пароль на запросе и запомните хэш, который будет выведен
- Откройте файл
internal_users.yml
sudo vi /etc/opensearch/opensearch-security/internal_users.yml
- Добавьте нового внутреннего пользователя и замените хэш внутри
internal_users.yml
на вывод, предоставленный hash.sh
на шаге 2
Файл должен выглядеть примерно так:
---
# This is the internal user database
# The hash value is a bcrypt hash and can be generated with plugin/tools/hash.sh
_meta:
type: "internalusers"
config_version: 2
# Define your internal users here
admin:
hash: "$2y$1EXAMPLEQqwS8TUcoEXAMPLEeZ3lEHvkEXAMPLERqjyh1icEXAMPLE."
reserved: true
backend_roles:
- "admin"
description: "Admin user"
user1:
hash: "$2y$12$zoHpvTCRjjQr6h0PEaabueCaGam3/LDvT6rZZGDGMusD7oehQjw/O"
reserved: false
backend_roles: []
description: "New internal user"
# Other users
...
Применение изменений
Теперь, когда сертификаты TLS установлены, а демонстрационные пользователи были удалены или им были назначены новые пароли, последний шаг — применить изменения конфигурации. Этот последний шаг конфигурации требует вызова securityadmin.sh
, пока OpenSearch работает на хосте.
Убедитесь, что OpenSearch запущен
OpenSearch должен быть запущен, чтобы securityadmin.sh
мог применить изменения. Если вы внесли изменения в opensearch.yml
, перезапустите OpenSearch:
sudo systemctl restart opensearch
Откройте отдельную сессию терминала на хосте и перейдите в директорию, содержащую securityadmin.sh
# Перейдите в правильную директорию
cd /usr/share/opensearch/plugins/opensearch-security/tools
Вызовите скрипт
Смотрите раздел “Применение изменений с помощью securityadmin.sh” для определения аргументов, которые вы должны передать.
# Вы можете опустить переменную окружения, если вы объявили ее в вашем $PATH.
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./securityadmin.sh -cd /etc/opensearch/opensearch-security/ -cacert /etc/opensearch/root-ca.pem -cert /etc/opensearch/admin.pem -key /etc/opensearch/admin-key.pem -icl -nhnv
Параметры скрипта:
-cd
: указывает директорию конфигурации.
-cacert
: указывает путь к корневому сертификату.
-cert
: указывает путь к сертификату администратора.
-key
: указывает путь к закрытому ключу администратора.
-icl
: включает режим конфигурации.
-nhnv
: отключает проверку хоста и не выводит информацию о версии.
Проверка работы сервиса
OpenSearch теперь работает на вашем хосте с пользовательскими сертификатами TLS и безопасным пользователем для базовой аутентификации. Вы можете проверить внешнюю доступность, отправив API-запрос к вашему узлу OpenSearch с другого хоста.
Во время предыдущего теста вы направляли запросы на localhost
. Теперь, когда сертификаты TLS были применены и новые сертификаты ссылаются на фактическую DNS-запись вашего хоста, запросы к localhost
не пройдут проверку CN, и сертификат будет считаться недействительным. Вместо этого запросы должны быть отправлены на адрес, который вы указали при генерации сертификата.
Перед отправкой запросов вы должны добавить доверие к корневому сертификату на вашем клиенте. Если вы не добавите доверие, вам нужно будет использовать опцию -k
, чтобы cURL игнорировал проверку CN и корневого сертификата.
$ curl https://your.host.address:9200 -u admin:yournewpassword -k
{
"name":"hostname",
"cluster_name":"opensearch",
"cluster_uuid":"QqgpHCbnSRKcPAizqjvoOw",
"version":{
"distribution":"opensearch",
"number":<version>,
"build_type":<build-type>,
"build_hash":<build-hash>,
"build_date":<build-date>,
"build_snapshot":false,
"lucene_version":<lucene-version>,
"minimum_wire_compatibility_version":"7.10.0",
"minimum_index_compatibility_version":"7.0.0"
},
"tagline":"The OpenSearch Project: https://opensearch.org/"
}
Обновление до новой версии
Экземпляры OpenSearch, установленные с помощью dpkg
или apt-get
, можно легко обновить до более новой версии.
Ручное обновление с помощью DPKG
Скачайте Debian-пакет для желаемой версии обновления непосредственно со страницы загрузок OpenSearch Project.
Перейдите в директорию, содержащую дистрибутив, и выполните следующую команду:
sudo dpkg -i opensearch-3.1.0-linux-x64.deb
Обновление с помощью APT-GET
Чтобы обновить до последней версии OpenSearch с помощью apt-get
, выполните:
sudo apt-get upgrade opensearch
Вы также можете обновить до конкретной версии OpenSearch:
sudo apt-get upgrade opensearch=<version>
Автоматическая перезагрузка сервиса после обновления пакета (2.13.0+)
Чтобы автоматически перезапустить OpenSearch после обновления пакета, включите opensearch.service
через systemd:
sudo systemctl enable opensearch.service
2 - Установка OpenSearch Dashboards
OpenSearch Dashboards предоставляет полностью интегрированное решение для визуального изучения, обнаружения и запроса ваших данных наблюдаемости.
OpenSearch Dashboards предоставляет полностью интегрированное решение для визуального изучения, обнаружения и запроса ваших данных наблюдаемости. Вы можете установить OpenSearch Dashboards с помощью одного из следующих вариантов:
- Docker
- Tarball
- RPM
- Debian
- Helm
- Windows
Совместимость с браузерами
OpenSearch Dashboards поддерживает следующие веб-браузеры:
- Chrome
- Firefox
- Safari
- Edge (Chromium)
Другие браузеры на основе Chromium также могут работать. Internet Explorer и Microsoft Edge Legacy не поддерживаются.
Совместимость с Node.js
OpenSearch Dashboards требует бинарный файл среды выполнения Node.js для работы. Один из них включен в дистрибутивные пакеты, доступные на странице загрузок OpenSearch.
OpenSearch Dashboards версии 2.8.0 и новее могут использовать версии Node.js 14, 16 и 18. Дистрибутивные пакеты для OpenSearch Dashboards версии 2.10.0 и новее включают Node.js 18 и 14 (для обратной совместимости).
Чтобы использовать бинарный файл среды выполнения Node.js, отличный от включенных в дистрибутивные пакеты, выполните следующие шаги:
-
Скачайте и установите Node.js; совместимые версии: >=14.20.1 <19.
-
Установите путь установки в переменные окружения NODE_HOME или NODE_OSD_HOME.
-
На UNIX, если Node.js установлен в /usr/local/nodejs, а бинарный файл среды выполнения находится по пути /usr/local/nodejs/bin/node:
export NODE_HOME=/usr/local/nodejs
-
Если Node.js установлен с помощью NVM, а бинарный файл среды выполнения находится по пути /Users/user/.nvm/versions/node/v18.19.0/bin/node:
export NODE_HOME=/Users/user/.nvm/versions/node/v18.19.0
# или, если NODE_HOME используется для чего-то другого:
export NODE_OSD_HOME=/Users/user/.nvm/versions/node/v18.19.0
-
На Windows, если Node.js установлен в C:\Program Files\nodejs, а бинарный файл среды выполнения находится по пути C:\Program Files\nodejs\node.exe:
set "NODE_HOME=C:\Program Files\nodejs"
# или с использованием PowerShell:
$Env:NODE_HOME = 'C:\Program Files\nodejs'
-
Ознакомьтесь с документацией вашей операционной системы, чтобы внести постоянные изменения в переменные окружения.
Скрипт запуска OpenSearch Dashboards, bin/opensearch-dashboards
, ищет бинарный файл среды выполнения Node.js, используя NODE_OSD_HOME, затем NODE_HOME, прежде чем использовать бинарные файлы, включенные в дистрибутивные пакеты. Если подходящий бинарный файл среды выполнения Node.js не найден, скрипт запуска попытается найти его в системном PATH, прежде чем завершить работу с ошибкой.
Конфигурация
Чтобы узнать, как настроить TLS для OpenSearch Dashboards, смотрите раздел Настройка TLS.
2.1 - Запуск OpenSearch Dashboards с использованием Docker
“Вы можете запустить OpenSearch Dashboards с помощью команды docker run после создания сети Docker и запуска OpenSearch, но процесс подключения OpenSearch Dashboards к OpenSearch значительно проще с использованием файла Docker Compose.”
-
Выполните команду для загрузки образа OpenSearch Dashboards:
docker pull opensearchproject/opensearch-dashboards:2
-
Создайте файл docker-compose.yml
, соответствующий вашей среде. Пример файла, который включает OpenSearch Dashboards, доступен на странице установки OpenSearch Docker.
-
Так же, как и для opensearch.yml
, вы можете передать пользовательский файл opensearch_dashboards.yml
в контейнер в файле Docker Compose.
-
Запустите команду:
-
Подождите, пока контейнеры запустятся. Затем ознакомьтесь с документацией OpenSearch Dashboards.
-
Когда закончите, выполните команду:
2.2 - Установка OpenSearch Dashboards (Debian)
Установка OpenSearch Dashboards с использованием менеджера пакетов Advanced Packaging Tool (APT)
Установка OpenSearch Dashboards с использованием менеджера пакетов Advanced Packaging Tool (APT) значительно упрощает процесс по сравнению с методом Tarball. Например, менеджер пакетов обрабатывает несколько технических аспектов, таких как путь установки, расположение конфигурационных файлов и создание службы, управляемой systemd.
Перед установкой OpenSearch Dashboards необходимо настроить кластер OpenSearch. Обратитесь к руководству по установке OpenSearch для Debian для получения инструкций.
Данное руководство предполагает, что вы уверенно работаете с интерфейсом командной строки (CLI) Linux. Вы должны понимать, как вводить команды, перемещаться между директориями и редактировать текстовые файлы. Некоторые примеры команд ссылаются на текстовый редактор vi, но вы можете использовать любой доступный текстовый редактор.
Установка OpenSearch Dashboards из пакета
-
Скачайте пакет Debian для нужной версии непосредственно с страницы загрузок OpenSearch. Пакет Debian доступен для архитектур x64 и arm64.
-
Установите пакет с помощью dpkg
из командной строки:
-
Для x64:
sudo dpkg -i opensearch-dashboards-3.1.0-linux-x64.deb
-
Для arm64:
sudo dpkg -i opensearch-dashboards-3.1.0-linux-arm64.deb
-
После завершения установки перезагрузите конфигурацию менеджера systemd:
sudo systemctl daemon-reload
-
Включите OpenSearch как службу:
sudo systemctl enable opensearch-dashboards
-
Запустите службу OpenSearch:
sudo systemctl start opensearch-dashboards
-
Проверьте, что OpenSearch запустился корректно:
sudo systemctl status opensearch-dashboards
Проверка подписи
Пакет Debian не подписан. Если вы хотите проверить подпись, проект OpenSearch предоставляет файл .sig, а также .deb пакет для использования с GNU Privacy Guard (GPG).
-
Скачайте нужный пакет Debian:
curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.1.0/opensearch-dashboards-3.1.0-linux-x64.deb
-
Скачайте соответствующий файл подписи:
curl -SLO https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.1.0/opensearch-dashboards-3.1.0-linux-x64.deb.sig
-
Скачайте и импортируйте GPG-ключ:
curl -o- https://artifacts.opensearch.org/publickeys/opensearch-release.pgp | gpg --import -
-
Проверьте подпись:
gpg --verify opensearch-dashboards-3.1.0-linux-x64.deb.sig opensearch-dashboards-3.1.0-linux-x64.deb
Установка OpenSearch Dashboards из репозитория APT
APT, основной инструмент управления пакетами для операционных систем на базе Debian, позволяет загружать и устанавливать пакет Debian из репозитория APT.
-
Установите необходимые пакеты:
sudo apt-get update && sudo apt-get -y install lsb-release ca-certificates curl gnupg2
-
Импортируйте публичный GPG-ключ. Этот ключ используется для проверки подписи репозитория APT:
curl -o- https://artifacts.opensearch.org/publickeys/opensearch-release.pgp | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-release-keyring
-
Создайте репозиторий APT для OpenSearch:
echo "deb [signed-by=/usr/share/keyrings/opensearch-release-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/apt stable main" | sudo tee /etc/apt/sources.list.d/opensearch-dashboards-3.x.list
-
Проверьте, что репозиторий был успешно создан:
-
С добавленной информацией о репозитории, перечислите все доступные версии OpenSearch:
sudo apt list -a opensearch-dashboards
-
Выберите версию OpenSearch, которую хотите установить:
-
Если не указано иное, будет установлена последняя доступная версия OpenSearch:
sudo apt-get install opensearch-dashboards
-
Чтобы установить конкретную версию OpenSearch Dashboards, укажите номер версии после имени пакета:
# Укажите версию вручную с помощью opensearch=<version>
sudo apt-get install opensearch-dashboards=3.1.0
-
После завершения установки включите OpenSearch:
sudo systemctl enable opensearch-dashboards
-
Запустите OpenSearch:
sudo systemctl start opensearch-dashboards
-
Проверьте, что OpenSearch запустился корректно:
sudo systemctl status opensearch-dashboards
Изучение OpenSearch Dashboards
По умолчанию OpenSearch Dashboards, как и OpenSearch, связывается с localhost при первоначальной установке. В результате OpenSearch Dashboards недоступен с удаленного хоста, если конфигурация не обновлена.
-
Откройте файл opensearch_dashboards.yml
:
sudo vi /etc/opensearch-dashboards/opensearch_dashboards.yml
-
Укажите сетевой интерфейс, к которому должен связываться OpenSearch Dashboards:
# Используйте 0.0.0.0, чтобы связаться с любым доступным интерфейсом.
server.host: 0.0.0.0
-
Сохраните изменения и выйдите из редактора.
-
Перезапустите OpenSearch Dashboards, чтобы применить изменения конфигурации:
sudo systemctl restart opensearch-dashboards
-
В веб-браузере перейдите к OpenSearch Dashboards. Порт по умолчанию — 5601.
-
Войдите с использованием имени пользователя admin
и пароля admin
. (Для OpenSearch 2.12 и новее пароль должен быть пользовательским паролем администратора.)
-
Посетите раздел “Начало работы с OpenSearch Dashboards”, чтобы узнать больше.
Обновление до новой версии
Экземпляры OpenSearch Dashboards, установленные с помощью dpkg
или apt-get
, можно легко обновить до новой версии.
Ручное обновление с помощью DPKG
-
Скачайте пакет Debian для желаемой версии обновления непосредственно со страницы загрузок проекта OpenSearch.
-
Перейдите в директорию, содержащую дистрибутив, и выполните следующую команду:
sudo dpkg -i opensearch-dashboards-3.1.0-linux-x64.deb
Обновление с помощью APT-GET
Чтобы обновить до последней версии OpenSearch Dashboards с помощью apt-get
, выполните следующую команду:
sudo apt-get upgrade opensearch-dashboards
Вы также можете обновить до конкретной версии OpenSearch Dashboards, указав номер версии:
sudo apt-get upgrade opensearch-dashboards=<version>
Автоматический перезапуск службы после обновления пакета (2.13.0+)
Чтобы автоматически перезапустить OpenSearch Dashboards после обновления пакета, включите службу opensearch-dashboards.service
через systemd:
sudo systemctl enable opensearch-dashboards.service
2.3 - Настройка TLS для OpenSearch Dashboards
По умолчанию, для упрощения тестирования и начала работы, OpenSearch Dashboards работает по протоколу HTTP. Чтобы включить TLS для HTTPS, обновите следующие настройки в файле opensearch_dashboards.yml.
Настройка |
Описание |
server.ssl.enabled |
Включает SSL-соединение между сервером OpenSearch Dashboards и веб-браузером пользователя. Установите значение true для HTTPS или false для HTTP. |
server.ssl.supportedProtocols |
Указывает массив поддерживаемых протоколов TLS. Возможные значения: TLSv1 , TLSv1.1 , TLSv1.2 , TLSv1.3 . По умолчанию: ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'] . |
server.ssl.cipherSuites |
Указывает массив шифров TLS. Необязательная настройка. |
server.ssl.certificate |
Если server.ssl.enabled установлено в true , указывает полный путь к действительному сертификату сервера Privacy Enhanced Mail (PEM) для OpenSearch Dashboards. Вы можете сгенерировать свой сертификат или получить его у центра сертификации (CA). |
server.ssl.key |
Если server.ssl.enabled установлено в true , указывает полный путь к ключу для вашего серверного сертификата, например, /usr/share/opensearch-dashboards-1.0.0/config/my-client-cert-key.pem . Вы можете сгенерировать свой сертификат или получить его у CA. |
server.ssl.keyPassphrase |
Устанавливает пароль для ключа. Удалите эту настройку, если у ключа нет пароля. Необязательная настройка. |
server.ssl.keystore.path |
Использует файл JKS (Java KeyStore) или PKCS12/PFX (Public-Key Cryptography Standards) вместо сертификата и ключа PEM. |
server.ssl.keystore.password |
Устанавливает пароль для хранилища ключей. Обязательная настройка. |
server.ssl.clientAuthentication |
Указывает режим аутентификации клиента TLS. Может быть одним из следующих: none , optional или required . Если установлено в required , ваш веб-браузер должен отправить действительный клиентский сертификат, подписанный CA, настроенным в server.ssl.certificateAuthorities . По умолчанию: none . |
server.ssl.certificateAuthorities |
Указывает полный путь к одному или нескольким сертификатам CA в массиве, которые выдают сертификат, используемый для аутентификации клиента. Обязательная настройка, если server.ssl.clientAuthentication установлено в optional или required . |
server.ssl.truststore.path |
Использует файл JKS или PKCS12/PFX trust store вместо сертификатов CA PEM. |
server.ssl.truststore.password |
Устанавливает пароль для trust store. Обязательная настройка. |
opensearch.ssl.verificationMode |
Устанавливает связь между OpenSearch и OpenSearch Dashboards. Допустимые значения: full , certificate или none . Рекомендуется использовать full , если TLS включен, что включает проверку имени хоста. certificate проверяет сертификат, но не имя хоста. none не выполняет никаких проверок (подходит для HTTP). По умолчанию: full . |
opensearch.ssl.certificateAuthorities |
Если opensearch.ssl.verificationMode установлено в full или certificate , указывает полный путь к одному или нескольким сертификатам CA в массиве, которые составляют доверенную цепочку для кластера OpenSearch. Например, вам может потребоваться включить корневой CA и промежуточный CA, если вы использовали промежуточный CA для выдачи ваших сертификатов администратора, клиента и узла. |
opensearch.ssl.truststore.path |
Использует файл trust store JKS или PKCS12/PFX вместо сертификатов CA PEM. |
opensearch.ssl.truststore.password |
Устанавливает пароль для trust store. Обязательная настройка. |
opensearch.ssl.alwaysPresentCertificate |
Отправляет клиентский сертификат в кластер OpenSearch, если установлено значение true , что необходимо, когда mTLS включен в OpenSearch. По умолчанию: false . |
opensearch.ssl.certificate |
Если opensearch.ssl.alwaysPresentCertificate установлено в true , указывает полный путь к действительному клиентскому сертификату для кластера OpenSearch. Вы можете сгенерировать свой сертификат или получить его у CA. |
opensearch.ssl.key |
Если opensearch.ssl.alwaysPresentCertificate установлено в true , указывает полный путь к ключу для клиентского сертификата. Вы можете сгенерировать свой сертификат или получить его у CA. |
opensearch.ssl.keyPassphrase |
Устанавливает пароль для ключа. Удалите эту настройку, если у ключа нет пароля. Необязательная настройка. |
opensearch.ssl.keystore.path |
Использует файл хранилища ключей JKS или PKCS12/PFX вместо сертификата и ключа PEM. |
opensearch.ssl.keystore.password |
Устанавливает пароль для хранилища ключей. Обязательная настройка. |
opensearch_security.cookie.secure |
Если TLS включен для OpenSearch Dashboards, измените эту настройку на true . Для HTTP установите значение false . |
Пример конфигурации opensearch_dashboards.yml
Следующая конфигурация opensearch_dashboards.yml
показывает, как OpenSearch и OpenSearch Dashboards могут работать на одной машине с демонстрационной конфигурацией:
server.host: '0.0.0.0'
server.ssl.enabled: true
server.ssl.certificate: /usr/share/opensearch-dashboards/config/client-cert.pem
server.ssl.key: /usr/share/opensearch-dashboards/config/client-cert-key.pem
opensearch.hosts: ["https://localhost:9200"]
opensearch.ssl.verificationMode: full
opensearch.ssl.certificateAuthorities: [ "/usr/share/opensearch-dashboards/config/root-ca.pem", "/usr/share/opensearch-dashboards/config/intermediate-ca.pem" ]
opensearch.username: "kibanaserver"
opensearch.password: "kibanaserver"
opensearch.requestHeadersAllowlist: [ authorization,securitytenant ]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
opensearch_security.readonly_mode.roles: ["kibana_read_only"]
opensearch_security.cookie.secure: true
Если вы используете опцию установки через Docker, вы можете передать пользовательский файл opensearch_dashboards.yml
в контейнер. Чтобы узнать больше, посетите страницу установки Docker.
После включения этих настроек и запуска приложения вы можете подключиться к OpenSearch Dashboards по адресу https://localhost:5601. Возможно, вам потребуется подтвердить предупреждение браузера, если ваши сертификаты самоподписанные. Чтобы избежать такого предупреждения (или полной несовместимости с браузером), рекомендуется использовать сертификаты от доверенного центра сертификации (CA).
3 - configuring opensearch
Существует два типа настроек OpenSearch: динамические и статические.
Динамические настройки
Динамические настройки индекса — это настройки, которые вы можете обновлять в любое время. Вы можете настраивать динамические параметры OpenSearch через API настроек кластера. Для получения подробной информации смотрите раздел Обновление настроек кластера с помощью API.
При возможности используйте API настроек кластера; файл opensearch.yml
локален для каждого узла, в то время как API применяет настройки ко всем узлам в кластере.
Статические настройки
Некоторые операции являются статическими и требуют изменения конфигурационного файла opensearch.yml
и перезапуска кластера. В общем, эти настройки относятся к сетевым параметрам, формированию кластера и локальной файловой системе. Чтобы узнать больше, смотрите раздел Формирование кластера.
Указание настроек в виде переменных окружения
Вы можете указывать переменные окружения следующими способами:
Аргументы при запуске
Вы можете указать переменные окружения в качестве аргументов, используя -E
при запуске OpenSearch:
./opensearch -Ecluster.name=opensearch-cluster -Enode.name=opensearch-node1 -Ehttp.host=0.0.0.0 -Ediscovery.type=single-node
Непосредственно в среде оболочки
Вы можете настроить переменные окружения непосредственно в среде оболочки перед запуском OpenSearch, как показано в следующем примере:
export OPENSEARCH_JAVA_OPTS="-Xms2g -Xmx2g"
export OPENSEARCH_PATH_CONF="/etc/opensearch"
./opensearch
Файл службы systemd
При запуске OpenSearch как службы, управляемой systemd, вы можете указать переменные окружения в файле службы, как показано в следующем примере:
# /etc/systemd/system/opensearch.service.d/override.conf
[Service]
Environment="OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
Environment="OPENSEARCH_PATH_CONF=/etc/opensearch"
После создания или изменения файла перезагрузите конфигурацию systemd и перезапустите службу с помощью следующих команд:
sudo systemctl daemon-reload
sudo systemctl restart opensearch
Переменные окружения Docker
При запуске OpenSearch в Docker вы можете указать переменные окружения, используя опцию -e
с командой docker run
, как показано в следующей команде:
docker run -e "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g" -e "OPENSEARCH_PATH_CONF=/usr/share/opensearch/config" opensearchproject/opensearch:latest
Обновление настроек кластера с помощью API
Первый шаг в изменении настройки — это просмотр текущих настроек, отправив следующий запрос:
GET _cluster/settings?include_defaults=true
Для более краткого резюме нестандартных настроек отправьте следующий запрос:
В API настроек кластера существуют три категории настроек: постоянные, временные и стандартные. Постоянные настройки сохраняются после перезапуска кластера. После перезапуска OpenSearch очищает временные настройки.
Если вы указываете одну и ту же настройку в нескольких местах, OpenSearch использует следующий порядок приоритета:
- Временные настройки
- Постоянные настройки
- Настройки из
opensearch.yml
- Стандартные настройки
Чтобы изменить настройку, используйте API настроек кластера и укажите новое значение как постоянное или временное. Этот пример показывает форму плоских настроек:
PUT _cluster/settings
{
"persistent" : {
"action.auto_create_index" : false
}
}
Вы также можете использовать расширенную форму, которая позволяет вам копировать и вставлять из ответа GET и изменять существующие значения:
PUT _cluster/settings
{
"persistent": {
"action": {
"auto_create_index": false
}
}
}
Конфигурационный файл
Вы можете найти файл opensearch.yml
по следующему пути:
- Для Docker:
/usr/share/opensearch/config/opensearch.yml
- Для большинства дистрибутивов Linux:
/etc/opensearch/opensearch.yml
Вы можете отредактировать переменную OPENSEARCH_PATH_CONF=/etc/opensearch
, чтобы изменить расположение каталога конфигурации. Эта переменная берется из /etc/default/opensearch
(для Debian-пакета) и /etc/sysconfig/opensearch
(для RPM-пакета).
Если вы установите свою пользовательскую переменную OPENSEARCH_PATH_CONF
, имейте в виду, что другие стандартные переменные окружения не будут загружены.
В файле opensearch.yml
вы не помечаете настройки как постоянные или временные, и настройки используют плоскую форму:
cluster.name: my-application
action.auto_create_index: true
compatibility.override_main_response_version: true
Демонстрационная конфигурация включает в себя ряд настроек для плагина безопасности, которые вы должны изменить перед использованием OpenSearch для производственной нагрузки. Чтобы узнать больше, смотрите раздел Безопасность.
(Необязательно) Конфигурация заголовков CORS
Если вы работаете над клиентским приложением, которое взаимодействует с кластером OpenSearch на другом домене, вы можете настроить заголовки в opensearch.yml
, чтобы разрешить разработку локального приложения на той же машине. Используйте механизм Cross Origin Resource Sharing (CORS), чтобы ваше приложение могло делать вызовы к API OpenSearch, работающему локально. Добавьте следующие строки в ваш файл custom-opensearch.yml
(обратите внимание, что символ “-” должен быть первым символом в каждой строке):
- http.host: 0.0.0.0
- http.port: 9200
- http.cors.allow-origin: "http://localhost"
- http.cors.enabled: true
- http.cors.allow-headers: X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
- http.cors.allow-credentials: true
3.1 - Настройки доступности и восстановления
Настройки доступности и восстановления включают настройки для следующих компонентов
- Снимки
- Ограничение задач менеджера кластера
- Хранение с удаленной поддержкой
- Обратное давление при поиске
- Обратное давление при индексации шардов
- Репликация сегментов
- Репликация между кластерами
Чтобы узнать больше о статических и динамических настройках, см. Настройка OpenSearch.
Настройки снимков
OpenSearch поддерживает следующие настройки снимков:
- snapshot.max_concurrent_operations (Динамическое, целое число): Максимальное количество одновременных операций снимков. По умолчанию 1000.
Настройки снимков, связанные с безопасностью
Для настроек снимков, связанных с безопасностью, см. Настройки безопасности.
Настройки файловой системы
Для получения информации о настройках файловой системы см. Общая файловая система.
Настройки Amazon S3
Для получения информации о настройках репозитория Amazon S3 см. Amazon S3.
Настройки ограничения задач менеджера кластера
Для получения информации о настройках ограничения задач менеджера кластера см. Установка пределов ограничения.
Настройки хранения с удаленной поддержкой
OpenSearch поддерживает следующие настройки хранения с удаленной поддержкой на уровне кластера:
-
cluster.remote_store.translog.buffer_interval (Динамическое, единица времени): Значение по умолчанию для интервала буфера транзакционного лога, используемого при выполнении периодических обновлений транзакционного лога. Эта настройка эффективна только в том случае, если настройка индекса index.remote_store.translog.buffer_interval
отсутствует.
-
remote_store.moving_average_window_size (Динамическое, целое число): Размер окна скользящего среднего, используемый для расчета значений скользящей статистики, доступных через API статистики удаленного хранилища. По умолчанию 20. Минимально допустимое значение - 5.
Для получения дополнительной информации о настройках хранения с удаленной поддержкой см. Хранение с удаленной поддержкой и Настройка хранения с удаленной поддержкой.
Для получения информации о настройках обратного давления сегментов см. Настройки обратного давления сегментов.
Настройки обратного давления при поиске
Обратное давление при поиске - это механизм, используемый для выявления ресурсоемких запросов на поиск и их отмены, когда узел испытывает нагрузку. Для получения дополнительной информации см. Настройки обратного давления при поиске.
Настройки обратного давления при индексации шардов
Обратное давление при индексации шардов - это механизм умного отклонения на уровне шардов, который динамически отклоняет запросы на индексацию, когда ваш кластер испытывает нагрузку. Для получения дополнительной информации см. Настройки обратного давления при индексации шардов.
Настройки репликации сегментов
Для получения информации о настройках репликации сегментов см. Репликация сегментов.
Для получения информации о настройках обратного давления репликации сегментов см. Обратное давление репликации сегментов.
Настройки репликации между кластерами
Для получения информации о настройках репликации между кластерами см. Настройки репликации.
3.2 - Конфигурация и системные настройки
Обзор настрек Opensearch
Для получения обзора создания кластера OpenSearch и примеров настроек конфигурации см. раздел Создание кластера. Чтобы узнать больше о статических и динамических настройках, см. раздел Настройка OpenSearch.
OpenSearch поддерживает следующие системные настройки:
-
cluster.name (Статическая, строка): Имя кластера.
-
node.name (Статическая, строка): Описательное имя для узла.
-
node.roles (Статическая, список): Определяет одну или несколько ролей для узла OpenSearch. Допустимые значения: cluster_manager
, data
, ingest
, search
, ml
, remote_cluster_client
и coordinating_only
.
-
path.data (Статическая, строка): Путь к директории, где хранятся ваши данные. Разделяйте несколько местоположений запятыми.
-
path.logs (Статическая, строка): Путь к файлам журналов.
-
bootstrap.memory_lock (Статическая, логическое): Блокирует память при запуске. Рекомендуется установить размер кучи примерно на половину доступной памяти в системе и убедиться, что владелец процесса имеет право использовать этот лимит. OpenSearch работает неэффективно, когда система использует свопинг памяти.
3.3 - Сетевые настройки
OpenSearch использует настройки HTTP для конфигурации связи с внешними клиентами через REST API и транспортные настройки для внутренней связи между узлами в OpenSearch.
Чтобы узнать больше о статических и динамических настройках, см. раздел Настройка OpenSearch.
OpenSearch поддерживает следующие общие сетевые настройки:
-
network.host (Статическая, список): Привязывает узел OpenSearch к адресу. Используйте 0.0.0.0
, чтобы включить все доступные сетевые интерфейсы, или укажите IP-адрес, назначенный конкретному интерфейсу. Настройка network.host
является комбинацией network.bind_host
и network.publish_host
, если они имеют одинаковое значение. Альтернативой network.host
является отдельная настройка network.bind_host
и network.publish_host
по мере необходимости. См. раздел Расширенные сетевые настройки.
-
http.port (Статическая, одно значение или диапазон): Привязывает узел OpenSearch к пользовательскому порту или диапазону портов для HTTP-связи. Вы можете указать адрес или диапазон адресов. По умолчанию — 9200-9300.
-
transport.port (Статическая, одно значение или диапазон): Привязывает узел OpenSearch к пользовательскому порту для связи между узлами. Вы можете указать адрес или диапазон адресов. По умолчанию — 9300-9400.
Расширенные сетевые настройки
OpenSearch поддерживает следующие расширенные сетевые настройки:
-
network.bind_host (Статическая, список): Привязывает узел OpenSearch к адресу или адресам для входящих соединений. По умолчанию — значение из network.host
.
-
network.publish_host (Статическая, список): Указывает адрес или адреса, которые узел OpenSearch публикует для других узлов в кластере, чтобы они могли подключиться к нему.
Расширенные HTTP-настройки
OpenSearch поддерживает следующие расширенные сетевые настройки для HTTP-связи:
-
http.host (Статическая, список): Устанавливает адрес узла OpenSearch для HTTP-связи. Настройка http.host
является комбинацией http.bind_host
и http.publish_host
, если они имеют одинаковое значение. Альтернативой http.host
является отдельная настройка http.bind_host
и http.publish_host
по мере необходимости.
-
http.bind_host (Статическая, список): Указывает адрес или адреса, к которым узел OpenSearch привязывается для прослушивания входящих HTTP-соединений.
-
http.publish_host (Статическая, список): Указывает адрес или адреса, которые узел OpenSearch публикует для других узлов для HTTP-связи.
-
http.compression (Статическая, логическое): Включает поддержку сжатия с использованием Accept-Encoding
, когда это применимо. Когда включен HTTPS, по умолчанию — false, в противном случае — true. Отключение сжатия для HTTPS помогает снизить потенциальные риски безопасности, такие как атаки BREACH. Чтобы включить сжатие для HTTPS-трафика, явно установите http.compression
в true.
-
http.max_header_size (Статическая, строка): Максимальный общий размер всех HTTP-заголовков, разрешенный в запросе. По умолчанию — 16KB.
Расширенные транспортные настройки
OpenSearch поддерживает следующие расширенные сетевые настройки для транспортной связи:
-
transport.host (Статическая, список): Устанавливает адрес узла OpenSearch для транспортной связи. Настройка transport.host
является комбинацией transport.bind_host
и transport.publish_host
, если они имеют одинаковое значение. Альтернативой transport.host
является отдельная настройка transport.bind_host
и transport.publish_host
по мере необходимости.
-
transport.bind_host (Статическая, список): Указывает адрес или адреса, к которым узел OpenSearch привязывается для прослушивания входящих транспортных соединений.
-
transport.publish_host (Статическая, список): Указывает адрес или адреса, которые узел OpenSearch публикует для других узлов для транспортной связи.OpenSearch использует настройки HTTP для конфигурации связи с внешними клиентами через REST API и транспортные настройки для внутренней связи между узлами в OpenSearch.
Выбор транспорта
По умолчанию OpenSearch использует транспорт, предоставляемый модулем transport-netty4
, который использует движок Netty 4 как для внутренней TCP-связи между узлами в кластере, так и для внешней HTTP-связи с клиентами. Эта связь полностью асинхронна и неблокирующая. В следующей таблице перечислены другие доступные плагины транспорта, которые могут использоваться взаимозаменяемо.
Плагин |
Описание |
transport-reactor-netty4 |
HTTP-транспорт OpenSearch на основе Project Reactor и Netty 4 (экспериментальный) |
Установка
./bin/opensearch-plugin install transport-reactor-netty4
Конфигурация (с использованием opensearch.yml)
http.type: reactor-netty4
http.type: reactor-netty4-secure
3.4 - Настройки обнаружения и шлюза
Следующие настройки относятся к процессу обнаружения и локальному шлюзу.
Чтобы узнать больше о статических и динамических настройках, см. раздел Настройка OpenSearch.
Настройки обнаружения
Процесс обнаружения используется при формировании кластера. Он включает в себя обнаружение узлов и выбор узла-менеджера кластера. OpenSearch поддерживает следующие настройки обнаружения:
-
discovery.seed_hosts (Статическая, список): Список хостов, которые выполняют обнаружение при запуске узла. По умолчанию список хостов: ["127.0.0.1", "[::1]"]
.
-
discovery.seed_providers (Статическая, список): Указывает типы провайдеров начальных хостов, которые будут использоваться для получения адресов начальных узлов с целью запуска процесса обнаружения.
-
discovery.type (Статическая, строка): По умолчанию OpenSearch формирует кластер с несколькими узлами. Установите discovery.type
в single-node
, чтобы сформировать кластер с одним узлом.
-
cluster.initial_cluster_manager_nodes (Статическая, список): Список узлов, имеющих право быть узлами-менеджерами кластера, используемых для начальной загрузки кластера.
Настройки шлюза
Локальный шлюз хранит состояние кластера и данные шардов, которые используются при перезапуске кластера. OpenSearch поддерживает следующие настройки локального шлюза:
-
gateway.recover_after_nodes (Статическая, целое число): После полного перезапуска кластера количество узлов, которые должны присоединиться к кластеру, прежде чем может начаться восстановление.
-
gateway.recover_after_data_nodes (Статическая, целое число): После полного перезапуска кластера количество узлов данных, которые должны присоединиться к кластеру, прежде чем может начаться восстановление.
-
gateway.expected_data_nodes (Статическая, целое число): Ожидаемое количество узлов данных, которые должны существовать в кластере. После того как ожидаемое количество узлов присоединится к кластеру, может начаться восстановление локальных шардов.
-
gateway.recover_after_time (Статическая, значение времени): Количество времени, которое нужно подождать перед началом восстановления, если количество узлов данных меньше ожидаемого количества узлов данных.
3.5 - Настройки безопасности
Плагин безопасности предоставляет ряд файлов конфигурации YAML, которые используются для хранения необходимых настроек, определяющих, как плагин безопасности управляет пользователями, ролями и активностью внутри кластера.
Для полного списка файлов конфигурации плагина безопасности см. раздел Изменение файлов YAML.
Следующие разделы описывают настройки, связанные с безопасностью, в файле opensearch.yml
. Вы можете найти opensearch.yml
в <OPENSEARCH_HOME>/config/opensearch.yml
. Чтобы узнать больше о статических и динамических настройках, см. раздел Настройка OpenSearch.
Общие настройки
Плагин безопасности поддерживает следующие общие настройки:
-
plugins.security.nodes_dn (Статическая): Указывает список отличительных имен (DN), обозначающих другие узлы в кластере. Эта настройка поддерживает подстановочные знаки и регулярные выражения. Список DN также считывается из индекса безопасности, помимо конфигурации YAML, когда plugins.security.nodes_dn_dynamic_config_enabled
установлено в true. Если эта настройка не настроена правильно, кластер не сможет сформироваться, так как узлы не смогут доверять друг другу, что приведет к следующей ошибке: “Аутентификация транспортного клиента больше не поддерживается”.
-
plugins.security.nodes_dn_dynamic_config_enabled (Статическая): Актуально для сценариев использования кросс-кластера, где необходимо управлять разрешенными узлами DN без необходимости перезапускать узлы каждый раз, когда настраивается новый удаленный кросс-кластер. Установка nodes_dn_dynamic_config_enabled
в true включает доступные для супер-администратора API для отличительных имен, которые предоставляют средства для динамического обновления или получения узлов DN. Эта настройка имеет эффект только если plugins.security.cert.intercluster_request_evaluator_class
не установлено. По умолчанию — false.
-
plugins.security.authcz.admin_dn (Статическая): Определяет DN сертификатов, к которым должны быть назначены административные привилегии. Обязательно.
-
plugins.security.roles_mapping_resolution (Статическая): Определяет, как бэкенд-ролям сопоставляются роли безопасности. Поддерживаются следующие значения:
- MAPPING_ONLY (По умолчанию): Сопоставления должны быть явно настроены в
roles_mapping.yml
.
- BACKENDROLES_ONLY: Бэкенд-роли сопоставляются с ролями безопасности напрямую. Настройки в
roles_mapping.yml
не имеют эффекта.
- BOTH: Бэкенд-роли сопоставляются с ролями безопасности как напрямую, так и через
roles_mapping.yml
.
-
plugins.security.dls.mode (Статическая): Устанавливает режим оценки безопасности на уровне документа (DLS). По умолчанию — адаптивный. См. раздел Как установить режим оценки DLS.
-
plugins.security.compliance.salt (Статическая): Соль, используемая при генерации хеш-значения для маскирования полей. Должна содержать не менее 32 символов. Разрешены только ASCII-символы. Необязательно.
-
plugins.security.compliance.immutable_indices (Статическая): Документы в индексах, помеченных как неизменяемые, следуют парадигме “запись один раз, чтение много раз”. Документы, созданные в этих индексах, не могут быть изменены и, следовательно, являются неизменяемыми.
-
config.dynamic.http.anonymous_auth_enabled (Статическая): Включает анонимную аутентификацию. Это приведет к тому, что все HTTP-аутентификаторы не будут вызывать запросы на аутентификацию. По умолчанию — false.
-
http.detailed_errors.enabled (Статическая): Включает подробное сообщение об ошибке для REST-вызовов, выполненных против кластера OpenSearch. Если установлено в true, предоставляет root_cause
вместе с кодом ошибки. По умолчанию — true.
Настройки API управления REST
Плагин безопасности поддерживает следующие настройки API управления REST:
-
plugins.security.restapi.roles_enabled (Статическая): Включает доступ к API управления REST на основе ролей для указанных ролей. Роли разделяются запятой. По умолчанию — пустой список (ни одна роль не имеет доступа к API управления REST). См. раздел Контроль доступа для API.
-
plugins.security.restapi.endpoints_disabled.. (Статическая): Отключает конкретные конечные точки и их HTTP-методы для ролей. Значения для этой настройки составляют массив HTTP-методов. Например: plugins.security.restapi.endpoints_disabled.all_access.ACTIONGROUPS: ["PUT","POST","DELETE"]
. По умолчанию все конечные точки и методы разрешены. Существующие конечные точки включают ACTIONGROUPS, CACHE, CONFIG, ROLES, ROLESMAPPING, INTERNALUSERS, SYSTEMINFO, PERMISSIONSINFO и LICENSE. См. раздел Контроль доступа для API.
-
plugins.security.restapi.password_validation_regex (Статическая): Указывает регулярное выражение для задания критериев для пароля при входе. Для получения дополнительной информации см. раздел Настройки пароля.
-
plugins.security.restapi.password_validation_error_message (Статическая): Указывает сообщение об ошибке, которое отображается, когда пароль не проходит проверку. Эта настройка используется вместе с plugins.security.restapi.password_validation_regex
.
-
plugins.security.restapi.password_min_length (Статическая): Устанавливает минимальное количество символов для длины пароля при использовании оценщика силы пароля на основе баллов. По умолчанию — 8. Это также является минимальным значением. Для получения дополнительной информации см. раздел Настройки пароля.
-
plugins.security.restapi.password_score_based_validation_strength (Статическая): Устанавливает порог для определения, является ли пароль сильным или слабым. Допустимые значения: fair, good, strong и very_strong. Эта настройка используется вместе с plugins.security.restapi.password_min_length
.
-
plugins.security.unsupported.restapi.allow_securityconfig_modification (Статическая): Включает использование методов PUT и PATCH для API конфигурации.
Расширенные настройки
Плагин безопасности поддерживает следующие расширенные настройки:
-
plugins.security.authcz.impersonation_dn (Статическая): Включает подмену на уровне транспортного слоя. Это позволяет DN выдавать себя за других пользователей. См. раздел Подмена пользователей.
-
plugins.security.authcz.rest_impersonation_user (Статическая): Включает подмену на уровне REST. Это позволяет пользователям выдавать себя за других пользователей. См. раздел Подмена пользователей.
-
plugins.security.allow_default_init_securityindex (Статическая): При установке в true OpenSearch Security автоматически инициализирует индекс конфигурации с файлами из директории /config
, если индекс не существует.
Это будет использовать известные стандартные пароли. Используйте только в частной сети/окружении.
-
plugins.security.allow_unsafe_democertificates (Статическая): При установке в true OpenSearch запускается с демонстрационными сертификатами. Эти сертификаты выданы только для демонстрационных целей.
Эти сертификаты хорошо известны и, следовательно, небезопасны для использования в производственной среде. Используйте только в частной сети/окружении.
-
plugins.security.system_indices.permission.enabled (Статическая): Включает функцию разрешений для системных индексов. При установке в true функция включена, и пользователи с разрешением на изменение ролей могут создавать роли, которые включают разрешения, предоставляющие доступ к системным индексам. При установке в false разрешение отключено, и только администраторы с административным сертификатом могут вносить изменения в системные индексы. По умолчанию разрешение установлено в false в новом кластере.
Настройки уровня эксперта
Настройки уровня эксперта должны настраиваться и развертываться только администратором, который полностью понимает данную функцию. Неправильное понимание функции может привести к рискам безопасности, неправильной работе плагина безопасности или потере данных.
Плагин безопасности поддерживает следующие настройки уровня эксперта:
-
plugins.security.config_index_name (Статическая): Имя индекса, в котором .opendistro_security хранит свою конфигурацию.
-
plugins.security.cert.oid (Статическая): Определяет идентификатор объекта (OID) сертификатов узлов сервера.
-
plugins.security.cert.intercluster_request_evaluator_class (Статическая): Указывает реализацию org.opensearch.security.transport.InterClusterRequestEvaluator
, которая используется для оценки межкластерных запросов. Экземпляры org.opensearch.security.transport.InterClusterRequestEvaluator
должны реализовывать конструктор с одним аргументом, принимающим объект org.opensearch.common.settings.Settings
.
-
plugins.security.enable_snapshot_restore_privilege (Статическая): При установке в false эта настройка отключает восстановление снимков для обычных пользователей. В этом случае принимаются только запросы на восстановление снимков, подписанные административным TLS-сертификатом. При установке в true (по умолчанию) обычные пользователи могут восстанавливать снимки, если у них есть привилегии cluster:admin/snapshot/restore
, indices:admin/create
и indices:data/write/index
.
Снимок можно восстановить только в том случае, если он не содержит глобального состояния и не восстанавливает индекс .opendistro_security.
-
plugins.security.check_snapshot_restore_write_privileges (Статическая): При установке в false дополнительные проверки индекса пропускаются. При установке по умолчанию в true попытки восстановить снимки оцениваются на наличие привилегий indices:admin/create
и indices:data/write/index
.
-
plugins.security.cache.ttl_minutes (Статическая): Определяет, как долго кэш аутентификации будет действителен. Кэш аутентификации помогает ускорить аутентификацию, временно храня объекты пользователей, возвращаемые из бэкенда, чтобы плагин безопасности не требовал повторных запросов к ним. Установите значение в минутах. По умолчанию — 60. Отключите кэширование, установив значение в 0.
-
plugins.security.disabled (Статическая): Отключает OpenSearch Security.
Отключение этого плагина может подвергнуть вашу конфигурацию (включая пароли) публичному доступу.
-
plugins.security.protected_indices.enabled (Статическая): Если установлено в true, включает защищенные индексы. Защищенные индексы более безопасны, чем обычные индексы. Эти индексы требуют роли для доступа, как и любой другой традиционный индекс, и требуют дополнительной роли для видимости. Эта настройка используется вместе с настройками plugins.security.protected_indices.roles
и plugins.security.protected_indices.indices
.
-
plugins.security.protected_indices.roles (Статическая): Указывает список ролей, к которым пользователь должен быть сопоставлен для доступа к защищенным индексам.
-
plugins.security.protected_indices.indices (Статическая): Указывает список индексов, которые следует пометить как защищенные. Эти индексы будут видны только пользователям, сопоставленным с ролями, указанными в plugins.security.protected_indices.roles
. После выполнения этого требования пользователю все равно потребуется быть сопоставленным с традиционной ролью, используемой для предоставления разрешения на доступ к индексу.
-
plugins.security.system_indices.enabled (Статическая): Если установлено в true, включает системные индексы. Системные индексы аналогичны индексу безопасности, за исключением того, что их содержимое не зашифровано. Индексы, настроенные как системные индексы, могут быть доступны либо супер-администратором, либо пользователем с ролью, включающей разрешение на системный индекс. Для получения дополнительной информации о системных индексах см. раздел Системные индексы.
-
plugins.security.system_indices.indices (Статическая): Список индексов, которые будут использоваться как системные индексы. Эта настройка контролируется настройкой plugins.security.system_indices.enabled
.
-
plugins.security.allow_default_init_securityindex (Статическая): При установке в true устанавливает плагин безопасности в его стандартные настройки безопасности, если попытка создать индекс безопасности завершается неудачей при запуске OpenSearch. Стандартные настройки безопасности хранятся в YAML-файлах, находящихся в директории opensearch-project/security/config
. По умолчанию — false.
-
plugins.security.cert.intercluster_request_evaluator_class (Статическая): Класс, который будет использоваться для оценки межкластерной связи.
-
plugins.security.enable_snapshot_restore_privilege (Статическая): Включает предоставление привилегии восстановления снимков. Необязательно. По умолчанию — true.
-
plugins.security.check_snapshot_restore_write_privileges (Статическая): Обеспечивает оценку привилегий записи при создании снимков. По умолчанию — true.
Если вы измените любое из следующих свойств хеширования паролей, вам необходимо повторно хешировать все внутренние пароли для обеспечения совместимости и безопасности.
-
plugins.security.password.hashing.algorithm (Статическая): Указывает алгоритм хеширования паролей, который следует использовать. Поддерживаются следующие значения:
- BCrypt (По умолчанию)
- PBKDF2
- Argon2
-
plugins.security.password.hashing.bcrypt.rounds (Статическая): Указывает количество раундов, используемых для хеширования паролей с помощью BCrypt. Допустимые значения находятся в диапазоне от 4 до 31, включая. По умолчанию — 12.
-
plugins.security.password.hashing.bcrypt.minor (Статическая): Указывает минорную версию алгоритма BCrypt, используемую для хеширования паролей. Поддерживаются следующие значения:
-
plugins.security.password.hashing.pbkdf2.function (Статическая): Указывает псевдослучайную функцию, применяемую к паролю. Поддерживаются следующие значения:
- SHA1
- SHA224
- SHA256 (По умолчанию)
- SHA384
- SHA512
-
plugins.security.password.hashing.pbkdf2.iterations (Статическая): Указывает количество раз, которое псевдослучайная функция применяется к паролю. По умолчанию — 600,000.
-
plugins.security.password.hashing.pbkdf2.length (Статическая): Указывает желаемую длину окончательного производного ключа. По умолчанию — 256.
-
plugins.security.password.hashing.argon2.iterations (Статическая): Указывает количество проходов по памяти, которые выполняет алгоритм. Увеличение этого значения увеличивает время вычислений на ЦП и улучшает устойчивость к атакам грубой силы. По умолчанию — 3.
-
plugins.security.password.hashing.argon2.memory (Статическая): Указывает количество памяти (в кибибайтах), используемой во время хеширования. По умолчанию — 65536 (64 МиБ).
-
plugins.security.password.hashing.argon2.parallelism (Статическая): Указывает количество параллельных потоков, используемых для вычислений. По умолчанию — 1.
-
plugins.security.password.hashing.argon2.length (Статическая): Указывает длину (в байтах) результирующего хеш-выхода. По умолчанию — 32.
-
plugins.security.password.hashing.argon2.type (Статическая): Указывает, какой вариант Argon2 использовать. Поддерживаются следующие значения:
- Argon2i
- Argon2d
- Argon2id (по умолчанию)
-
plugins.security.password.hashing.argon2.version (Статическая): Указывает, какую версию Argon2 использовать. Поддерживаются следующие значения:
Настройки журнала аудита
Плагин безопасности поддерживает следующие настройки журнала аудита:
-
plugins.security.audit.enable_rest (Динамическая): Включает или отключает ведение журнала REST-запросов. По умолчанию установлено в true (включено).
-
plugins.security.audit.enable_transport (Динамическая): Включает или отключает ведение журнала запросов на уровне транспорта. По умолчанию установлено в false (выключено).
-
plugins.security.audit.resolve_bulk_requests (Динамическая): Включает или отключает ведение журнала пакетных запросов. При включении все подзапросы в пакетных запросах также записываются в журнал. По умолчанию установлено в false (выключено).
-
plugins.security.audit.config.disabled_categories (Динамическая): Отключает указанные категории событий.
-
plugins.security.audit.ignore_requests (Динамическая): Исключает указанные запросы из ведения журнала. Поддерживает подстановочные знаки и регулярные выражения, содержащие действия или пути REST-запросов.
-
plugins.security.audit.threadpool.size (Статическая): Определяет количество потоков в пуле потоков, используемом для ведения журнала событий. По умолчанию установлено в 10. Установка этого значения в 0 отключает пул потоков, что означает, что плагин ведет журнал событий синхронно.
-
plugins.security.audit.threadpool.max_queue_len (Статическая): Устанавливает максимальную длину очереди на поток. По умолчанию установлено в 100000.
-
plugins.security.audit.ignore_users (Динамическая): Массив пользователей. Запросы аудита от пользователей в списке не будут записываться в журнал.
-
plugins.security.audit.type (Статическая): Назначение событий журнала аудита. Допустимые значения: internal_opensearch, external_opensearch, debug и webhook.
-
plugins.security.audit.config.http_endpoints (Статическая): Список конечных точек для localhost.
-
plugins.security.audit.config.index (Статическая): Индекс журнала аудита. По умолчанию установлен auditlog6. Индекс может быть статическим или индексом, который включает дату, чтобы он вращался ежедневно, например, “‘auditlog6-‘YYYY.MM.dd”. В любом случае убедитесь, что индекс защищен должным образом.
-
plugins.security.audit.config.type (Статическая): Укажите тип журнала аудита как auditlog.
-
plugins.security.audit.config.username (Статическая): Имя пользователя для конфигурации журнала аудита.
-
plugins.security.audit.config.password (Статическая): Пароль для конфигурации журнала аудита.
-
plugins.security.audit.config.enable_ssl (Статическая): Включает или отключает SSL для ведения журнала аудита.
-
plugins.security.audit.config.verify_hostnames (Статическая): Включает или отключает проверку имени хоста для SSL/TLS сертификатов. По умолчанию установлено в true (включено).
-
plugins.security.audit.config.enable_ssl_client_auth (Статическая): Включает или отключает аутентификацию клиента SSL/TLS. По умолчанию установлено в false (выключено).
-
plugins.security.audit.config.cert_alias (Статическая): Псевдоним для сертификата, используемого для доступа к журналу аудита.
-
plugins.security.audit.config.pemkey_filepath (Статическая): Относительный путь к файлу ключа Privacy Enhanced Mail (PEM), используемого для ведения журнала аудита.
-
plugins.security.audit.config.pemkey_content (Статическая): Содержимое PEM-ключа, закодированное в base64, используемого для ведения журнала аудита. Это альтернатива …config.pemkey_filepath.
-
plugins.security.audit.config.pemkey_password (Статическая): Пароль для частного ключа в формате PEM, используемого клиентом.
-
plugins.security.audit.config.pemcert_filepath (Статическая): Относительный путь к файлу PEM-сертификата, используемого для ведения журнала аудита.
-
plugins.security.audit.config.pemcert_content (Статическая): Содержимое PEM-сертификата, закодированное в base64, используемого для ведения журнала аудита. Это альтернатива указанию пути к файлу с помощью …config.pemcert_filepath.
-
plugins.security.audit.config.pemtrustedcas_filepath (Статическая): Относительный путь к файлу доверенного корневого центра сертификации.
-
plugins.security.audit.config.pemtrustedcas_content (Статическая): Содержимое корневого центра сертификации, закодированное в base64. Это альтернатива …config.pemtrustedcas_filepath.
-
plugins.security.audit.config.webhook.url (Статическая): URL вебхука.
-
plugins.security.audit.config.webhook.format (Статическая): Формат, используемый для вебхука. Допустимые значения: URL_PARAMETER_GET, URL_PARAMETER_POST, TEXT, JSON и SLACK.
-
plugins.security.audit.config.webhook.ssl.verify (Статическая): Включает или отключает проверку любых SSL/TLS сертификатов, отправленных с любым запросом вебхука. По умолчанию установлено в true (включено).
-
plugins.security.audit.config.webhook.ssl.pemtrustedcas_filepath (Статическая): Относительный путь к файлу доверенного центра сертификации, против которого проверяются запросы вебхука.
-
plugins.security.audit.config.webhook.ssl.pemtrustedcas_content (Статическая): Содержимое центра сертификации, используемого для проверки запросов вебхука, закодированное в base64. Это альтернатива …config.pemtrustedcas_filepath.
-
plugins.security.audit.config.log4j.logger_name (Статическая): Пользовательское имя для логгера Log4j.
-
plugins.security.audit.config.log4j.level (Статическая): Устанавливает уровень журнала по умолчанию для логгера Log4j. Допустимые значения: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE и ALL. По умолчанию установлено в INFO.
-
opendistro_security.audit.config.disabled_rest_categories (Динамическая): Список категорий REST, которые будут игнорироваться логгером. Допустимые значения: AUTHENTICATED и GRANTED_PRIVILEGES.
-
opendistro_security.audit.config.disabled_transport_categories (Динамическая): Список категорий на транспортном уровне, которые будут игнорироваться логгером. Допустимые значения: AUTHENTICATED и GRANTED_PRIVILEGES.
Настройки проверки имени хоста и DNS
Плагин безопасности поддерживает следующие настройки проверки имени хоста и DNS:
-
plugins.security.ssl.transport.enforce_hostname_verification (Статическая): Указывает, следует ли проверять имена хостов на транспортном уровне. Необязательно. По умолчанию установлено в true.
-
plugins.security.ssl.transport.resolve_hostname (Статическая): Указывает, следует ли разрешать имена хостов через DNS на транспортном уровне. Необязательно. По умолчанию установлено в true. Работает только если включена проверка имени хоста.
Для получения дополнительной информации см. раздел Проверка имени хоста и разрешение DNS.
Настройки аутентификации клиента
Плагин безопасности поддерживает следующую настройку аутентификации клиента:
- plugins.security.ssl.http.clientauth_mode (Статическая): Режим аутентификации клиента TLS, который следует использовать. Допустимые значения: OPTIONAL (по умолчанию), REQUIRE и NONE. Необязательно.
Для получения дополнительной информации см. раздел Аутентификация клиента.
Настройки включенных шифров и протоколов
Плагин безопасности поддерживает следующие настройки включенных шифров и протоколов. Каждая настройка должна быть выражена в массиве:
-
plugins.security.ssl.http.enabled_ciphers (Статическая): Включенные шифры TLS для REST-уровня. Поддерживается только формат Java.
-
plugins.security.ssl.http.enabled_protocols (Статическая): Включенные протоколы TLS для REST-уровня. Поддерживается только формат Java.
-
plugins.security.ssl.transport.enabled_ciphers (Статическая): Включенные шифры TLS для транспортного уровня. Поддерживается только формат Java.
-
plugins.security.ssl.transport.enabled_protocols (Статическая): Включенные протоколы TLS для транспортного уровня. Поддерживается только формат Java.
Для получения дополнительной информации см. раздел Включенные шифры и протоколы.
Файлы хранилища ключей и доверенных сертификатов — настройки TLS на транспортном уровне
Плагин безопасности поддерживает следующие настройки хранилища ключей и доверенных сертификатов для транспортного уровня TLS:
-
plugins.security.ssl.transport.keystore_type (Статическая): Тип файла хранилища ключей. Необязательно. Допустимые значения: JKS или PKCS12/PFX. По умолчанию установлено в JKS.
-
plugins.security.ssl.transport.keystore_filepath (Статическая): Путь к файлу хранилища ключей, который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.transport.keystore_alias (Статическая): Имя псевдонима хранилища ключей. Необязательно. По умолчанию используется первый псевдоним.
-
plugins.security.ssl.transport.keystore_password (Статическая): Пароль для хранилища ключей. По умолчанию установлено в changeit.
-
plugins.security.ssl.transport.truststore_type (Статическая): Тип файла доверенного хранилища. Необязательно. Допустимые значения: JKS или PKCS12/PFX. По умолчанию установлено в JKS.
-
plugins.security.ssl.transport.truststore_filepath (Статическая): Путь к файлу доверенного хранилища, который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.transport.truststore_alias (Статическая): Имя псевдонима доверенного хранилища. Необязательно. По умолчанию используются все сертификаты.
-
plugins.security.ssl.transport.truststore_password (Статическая): Пароль для доверенного хранилища. По умолчанию установлено в changeit.
Для получения дополнительной информации о файлах хранилища ключей и доверенных сертификатов см. раздел TLS на транспортном уровне.
Файлы хранилища ключей и доверенных сертификатов — настройки TLS на уровне REST
Плагин безопасности поддерживает следующие настройки хранилища ключей и доверенных сертификатов для уровня REST TLS:
-
plugins.security.ssl.http.enabled (Статическая): Указывает, следует ли включить TLS на уровне REST. Если включено, разрешен только HTTPS. Необязательно. По умолчанию установлено в false.
-
plugins.security.ssl.http.keystore_type (Статическая): Тип файла хранилища ключей. Необязательно. Допустимые значения: JKS или PKCS12/PFX. По умолчанию установлено в JKS.
-
plugins.security.ssl.http.keystore_filepath (Статическая): Путь к файлу хранилища ключей, который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.http.keystore_alias (Статическая): Имя псевдонима хранилища ключей. Необязательно. По умолчанию используется первый псевдоним.
-
plugins.security.ssl.http.keystore_password (Статическая): Пароль для хранилища ключей. По умолчанию установлено в changeit.
-
plugins.security.ssl.http.truststore_type (Статическая): Тип файла доверенного хранилища. Необязательно. Допустимые значения: JKS или PKCS12/PFX. По умолчанию установлено в JKS.
-
plugins.security.ssl.http.truststore_filepath (Статическая): Путь к файлу доверенного хранилища, который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.http.truststore_alias (Статическая): Имя псевдонима доверенного хранилища. Необязательно. По умолчанию используются все сертификаты.
-
plugins.security.ssl.http.truststore_password (Статическая): Пароль для доверенного хранилища. По умолчанию установлено в changeit.
Для получения дополнительной информации см. раздел TLS на уровне REST.
X.509 PEM-сертификаты и ключи PKCS #8 — настройки TLS на транспортном уровне
Плагин безопасности поддерживает следующие настройки TLS на транспортном уровне, связанные с X.509 PEM-сертификатами и ключами PKCS #8:
-
plugins.security.ssl.transport.pemkey_filepath (Статическая): Путь к файлу ключа сертификата (PKCS #8), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.transport.pemkey_password (Статическая): Пароль для ключа. Укажите эту настройку, если у ключа есть пароль. Необязательно.
-
plugins.security.ssl.transport.pemcert_filepath (Статическая): Путь к цепочке сертификатов узла X.509 (формат PEM), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.transport.pemtrustedcas_filepath (Статическая): Путь к корневым центрам сертификации (формат PEM), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
Для получения дополнительной информации см. раздел TLS на транспортном уровне.
X.509 PEM-сертификаты и ключи PKCS #8 — настройки TLS на уровне REST
Плагин безопасности поддерживает следующие настройки TLS на уровне REST, связанные с X.509 PEM-сертификатами и ключами PKCS #8:
-
plugins.security.ssl.http.enabled (Статическая): Указывает, следует ли включить TLS на уровне REST. Если включено, разрешен только HTTPS. Необязательно. По умолчанию установлено в false.
-
plugins.security.ssl.http.pemkey_filepath (Статическая): Путь к файлу ключа сертификата (PKCS #8), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.http.pemkey_password (Статическая): Пароль для ключа. Укажите эту настройку, если у ключа есть пароль. Необязательно.
-
plugins.security.ssl.http.pemcert_filepath (Статическая): Путь к цепочке сертификатов узла X.509 (формат PEM), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
-
plugins.security.ssl.http.pemtrustedcas_filepath (Статическая): Путь к корневым центрам сертификации (формат PEM), который должен находиться в каталоге конфигурации и указываться с использованием относительного пути. Обязательно.
Для получения дополнительной информации см. раздел TLS на уровне REST.
Настройки безопасности на транспортном уровне
Плагин безопасности поддерживает следующие настройки безопасности на транспортном уровне:
-
plugins.security.ssl.transport.enabled (Статическая): Указывает, следует ли включить TLS на уровне REST.
-
plugins.security.ssl.transport.client.pemkey_password (Статическая): Пароль для частного ключа в формате PEM, используемого клиентом на транспортном уровне.
-
plugins.security.ssl.transport.keystore_keypassword (Статическая): Пароль для ключа внутри хранилища ключей.
-
plugins.security.ssl.transport.server.keystore_keypassword (Статическая): Пароль для ключа внутри хранилища ключей сервера.
-
plugins.security.ssl.transport.server.keystore_alias (Статическая): Имя псевдонима для хранилища ключей сервера.
-
plugins.security.ssl.transport.client.keystore_alias (Статическая): Имя псевдонима для хранилища ключей клиента.
-
plugins.security.ssl.transport.server.truststore_alias (Статическая): Имя псевдонима для доверенного хранилища сервера.
-
plugins.security.ssl.transport.client.truststore_alias (Статическая): Имя псевдонима для доверенного хранилища клиента.
-
plugins.security.ssl.client.external_context_id (Статическая): Предоставляет клиенту на транспортном уровне идентификатор для использования внешнего SSL-контекста.
-
plugins.security.ssl.transport.principal_extractor_class (Статическая): Указывает класс, реализующий извлечение, чтобы использовать пользовательскую часть сертификата в качестве основного.
-
plugins.security.ssl.http.crl.file_path (Статическая): Путь к файлу списка отозванных сертификатов (CRL).
-
plugins.security.ssl.http.crl.validate (Статическая): Включает проверку списка отозванных сертификатов (CRL). По умолчанию установлено в false (выключено).
-
plugins.security.ssl.http.crl.prefer_crlfile_over_ocsp (Статическая): Указывает, следует ли предпочитать запись сертификата CRL перед записью протокола статуса сертификата в режиме онлайн (OCSP), если сертификат содержит обе записи. Необязательно. По умолчанию установлено в false.
-
plugins.security.ssl.http.crl.check_only_end_entities (Статическая): Если установлено в true, проверяются только конечные сертификаты. По умолчанию установлено в true.
-
plugins.security.ssl.http.crl.disable_ocsp (Статическая): Отключает OCSP. По умолчанию установлено в false (OCSP включен).
-
plugins.security.ssl.http.crl.disable_crldp (Статическая): Отключает конечные точки CRL в сертификатах. По умолчанию установлено в false (конечные точки CRL включены).
-
plugins.security.ssl.allow_client_initiated_renegotiation (Статическая): Включает или отключает повторнуюNegotiation, инициированную клиентом. По умолчанию установлено в false (повторнаяNegotiation, инициированная клиентом, не разрешена).
Примеры настроек плагина безопасности
# Common configuration settings
plugins.security.nodes_dn:
- "CN=*.example.com, OU=SSL, O=Test, L=Test, C=DE"
- "CN=node.other.com, OU=SSL, O=Test, L=Test, C=DE"
- "CN=node.example.com, OU=SSL\\, Inc., L=Test, C=DE" # escape additional comma with `\\`
plugins.security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test, C=de
plugins.security.roles_mapping_resolution: MAPPING_ONLY
plugins.security.ssl.transport.pemcert_filepath: esnode.pem
plugins.security.ssl.transport.pemkey_filepath: esnode-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: esnode.pem
plugins.security.ssl.http.pemkey_filepath: esnode-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_unsafe_democertificates: true
plugins.security.allow_default_init_securityindex: true
plugins.security.nodes_dn_dynamic_config_enabled: false
plugins.security.cert.intercluster_request_evaluator_class: # need example value for this.
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.cache.ttl_minutes: 60
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opendistro-notifications-*", ".opendistro-notebooks", ".opendistro-asynchronous-search-response*"]
node.max_local_storage_nodes: 3
plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}'
plugins.security.restapi.password_validation_error_message: "Password must be minimum 8 characters long and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character."
plugins.security.allow_default_init_securityindex: true
plugins.security.cache.ttl_minutes: 60
#
# REST Management API configuration settings
plugins.security.restapi.roles_enabled: ["all_access","xyz_role"]
plugins.security.restapi.endpoints_disabled.all_access.ACTIONGROUPS: ["PUT","POST","DELETE"] # Alternative example: plugins.security.restapi.endpoints_disabled.xyz_role.LICENSE: ["DELETE"] #
# Audit log configuration settings
plugins.security.audit.enable_rest: true
plugins.security.audit.enable_transport: false
plugins.security.audit.resolve_bulk_requests: false
plugins.security.audit.config.disabled_categories: ["AUTHENTICATED","GRANTED_PRIVILEGES"]
plugins.security.audit.ignore_requests: ["indices:data/read/*","*_bulk"]
plugins.security.audit.threadpool.size: 10
plugins.security.audit.threadpool.max_queue_len: 100000
plugins.security.audit.ignore_users: ['kibanaserver','some*user','/also.*regex possible/']
plugins.security.audit.type: internal_opensearch
#
# external_opensearch settings
plugins.security.audit.config.http_endpoints: ['localhost:9200','localhost:9201','localhost:9202']
plugins.security.audit.config.index: "'auditlog6-'2023.06.15"
plugins.security.audit.config.type: auditlog
plugins.security.audit.config.username: auditloguser
plugins.security.audit.config.password: auditlogpassword
plugins.security.audit.config.enable_ssl: false
plugins.security.audit.config.verify_hostnames: false
plugins.security.audit.config.enable_ssl_client_auth: false
plugins.security.audit.config.cert_alias: mycert
plugins.security.audit.config.pemkey_filepath: key.pem
plugins.security.audit.config.pemkey_content: <...pem base 64 content>
plugins.security.audit.config.pemkey_password: secret
plugins.security.audit.config.pemcert_filepath: cert.pem
plugins.security.audit.config.pemcert_content: <...pem base 64 content>
plugins.security.audit.config.pemtrustedcas_filepath: ca.pem
plugins.security.audit.config.pemtrustedcas_content: <...pem base 64 content>
#
# Webhook settings
plugins.security.audit.config.webhook.url: "http://mywebhook/endpoint"
plugins.security.audit.config.webhook.format: JSON
plugins.security.audit.config.webhook.ssl.verify: false
plugins.security.audit.config.webhook.ssl.pemtrustedcas_filepath: ca.pem
plugins.security.audit.config.webhook.ssl.pemtrustedcas_content: <...pem base 64 content>
#
# log4j settings
plugins.security.audit.config.log4j.logger_name: auditlogger
plugins.security.audit.config.log4j.level: INFO
#
# Advanced configuration settings
plugins.security.authcz.impersonation_dn:
"CN=spock,OU=client,O=client,L=Test,C=DE":
- worf
"cn=webuser,ou=IT,ou=IT,dc=company,dc=com":
- user2
- user1
plugins.security.authcz.rest_impersonation_user:
"picard":
- worf
"john":
- steve
- martin
plugins.security.allow_default_init_securityindex: false
plugins.security.allow_unsafe_democertificates: false
plugins.security.cache.ttl_minutes: 60
plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}'
plugins.security.restapi.password_validation_error_message: "A password must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one digit, and one special character."
plugins.security.restapi.password_min_length: 8
plugins.security.restapi.password_score_based_validation_strength: very_strong
#
# Advanced SSL settings - use only if you understand SSL ins and outs
plugins.security.ssl.transport.client.pemkey_password: superSecurePassword1
plugins.security.ssl.transport.keystore_keypassword: superSecurePassword2
plugins.security.ssl.transport.server.keystore_keypassword: superSecurePassword3
plugins.security.ssl.http.keystore_keypassword: superSecurePassword4
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl.transport.enabled: true
plugins.security.ssl.transport.server.keystore_alias: my_alias
plugins.security.ssl.transport.client.keystore_alias: my_other_alias
plugins.security.ssl.transport.server.truststore_alias: trustore_alias_1
plugins.security.ssl.transport.client.truststore_alias: trustore_alias_2
plugins.security.ssl.client.external_context_id: my_context_id
plugins.security.ssl.transport.principal_extractor_class: org.opensearch.security.ssl.ExampleExtractor
plugins.security.ssl.http.crl.file_path: ssl/crl/revoked.crl
plugins.security.ssl.http.crl.validate: true
plugins.security.ssl.http.crl.prefer_crlfile_over_ocsp: true
plugins.security.ssl.http.crl.check_only_end_entitites: false
plugins.security.ssl.http.crl.disable_ocsp: true
plugins.security.ssl.http.crl.disable_crldp: true
plugins.security.ssl.allow_client_initiated_renegotiation: true
#
# Expert settings - use only if you understand their use completely: accidental values can potentially cause security risks or failures to OpenSearch Security.
plugins.security.config_index_name: .opendistro_security
plugins.security.cert.oid: '1.2.3.4.5.5'
plugins.security.cert.intercluster_request_evaluator_class: org.opensearch.security.transport.DefaultInterClusterRequestEvaluator
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.cache.ttl_minutes: 60
plugins.security.disabled: false
plugins.security.protected_indices.enabled: true
plugins.security.protected_indices.roles: ['all_access']
plugins.security.protected_indices.indices: []
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: ['.opendistro-alerting-config', '.opendistro-ism-*', '.opendistro-reports-*', '.opensearch-notifications-*', '.opensearch-notebooks', '.opensearch-observability', '.opendistro-asynchronous-search-response*', '.replication-metadata-store']
3.6 - Настройки предохранителей
Предохранители предотвращают возникновение ошибки Java OutOfMemoryError в OpenSearch.
Родительский предохранитель указывает общее доступное количество памяти для всех дочерних предохранителей. Дочерние предохранители указывают общее доступное количество памяти для себя.
Для получения дополнительной информации о статических и динамических настройках см. раздел Конфигурация OpenSearch.
Настройки родительского предохранителя
OpenSearch поддерживает следующие настройки родительского предохранителя:
-
indices.breaker.total.use_real_memory (Статическая, логическая): Если установлено в true, родительский предохранитель учитывает фактическое использование памяти. В противном случае родительский предохранитель учитывает количество памяти, зарезервированной дочерними предохранителями. По умолчанию установлено в true.
-
indices.breaker.total.limit (Динамическая, процент): Указывает начальный лимит памяти для родительского предохранителя. Если indices.breaker.total.use_real_memory установлено в true, по умолчанию составляет 95% кучи JVM. Если indices.breaker.total.use_real_memory установлено в false, по умолчанию составляет 70% кучи JVM.
Настройки предохранителя данных полей
Предохранитель данных полей ограничивает объем памяти кучи, необходимый для загрузки поля в кэш данных полей. OpenSearch поддерживает следующие настройки предохранителя данных полей:
-
indices.breaker.fielddata.limit (Динамическая, процент): Указывает лимит памяти для предохранителя данных полей. По умолчанию составляет 40% кучи JVM.
-
indices.breaker.fielddata.overhead (Динамическая, дробное число): Константа, на которую умножаются оценки данных полей для определения окончательной оценки. По умолчанию составляет 1.03.
Настройки предохранителя запросов
Предохранитель запросов ограничивает объем памяти, необходимый для построения структур данных, необходимых для запроса (например, при вычислении агрегатов). OpenSearch поддерживает следующие настройки предохранителя запросов:
-
indices.breaker.request.limit (Динамическая, процент): Указывает лимит памяти для предохранителя запросов. По умолчанию составляет 60% кучи JVM.
-
indices.breaker.request.overhead (Динамическая, дробное число): Константа, на которую умножаются оценки запросов для определения окончательной оценки. По умолчанию составляет 1.
Настройки предохранителя текущих запросов
Предохранитель текущих запросов ограничивает использование памяти для всех текущих входящих запросов на транспортном и HTTP-уровне. Использование памяти для запроса основано на длине содержимого запроса и включает память, необходимую для необработанного запроса и структурированного объекта, представляющего запрос. OpenSearch поддерживает следующие настройки предохранителя текущих запросов:
-
network.breaker.inflight_requests.limit (Динамическая, процент): Указывает лимит памяти для предохранителя текущих запросов. По умолчанию составляет 100% кучи JVM (таким образом, лимит использования памяти для текущего запроса определяется лимитом памяти родительского предохранителя).
-
network.breaker.inflight_requests.overhead (Динамическая, дробное число): Константа, на которую умножаются оценки текущих запросов для определения окончательной оценки. По умолчанию составляет 2.
Настройки предохранителя компиляции скриптов
Предохранитель компиляции скриптов ограничивает количество компиляций встроенных скриптов в течение временного интервала. OpenSearch поддерживает следующую настройку предохранителя компиляции скриптов:
- script.max_compilations_rate (Динамическая, ставка): Максимальное количество уникальных динамических скриптов, скомпилированных в течение временного интервала для данного контекста. По умолчанию составляет 150 каждые 5 минут (150/5m).
Настройки предохранителя регулярных выражений
Предохранитель регулярных выражений включает или отключает регулярные выражения и ограничивает их сложность. OpenSearch поддерживает следующие настройки предохранителя регулярных выражений:
-
script.painless.regex.enabled (Статическая, строка): Включает регулярные выражения в скриптах Painless. Допустимые значения:
- limited: Включает регулярные выражения и ограничивает их сложность с помощью настройки script.painless.regex.limit-factor.
- true: Включает регулярные выражения. Отключает предохранитель регулярных выражений и не ограничивает сложность регулярных выражений.
- false: Отключает регулярные выражения. Если скрипт Painless содержит регулярное выражение, возвращает ошибку.
По умолчанию установлено в limited.
-
script.painless.regex.limit-factor (Статическая, целое число): Применяется только если script.painless.regex.enabled установлено в limited. Ограничивает количество символов, которые может содержать регулярное выражение в скрипте Painless. Лимит символов рассчитывается путем умножения количества символов во входных данных скрипта на script.painless.regex.limit-factor. По умолчанию составляет 6 (таким образом, если входные данные содержат 5 символов, максимальное количество символов в регулярном выражении составляет 5 · 6 = 30).
3.7 - Настройка кластера
Следующие настройки относятся к кластеру OpenSearch.
Чтобы узнать больше о статических и динамических настройках, смотрите раздел Настройка OpenSearch.
Настройки маршрутизации и распределения на уровне кластера
OpenSearch поддерживает следующие настройки маршрутизации на уровне кластера и распределения шардов:
cluster.routing.allocation.enable (Динамическая, строка)
Включает или отключает распределение для определенных типов шардов.
Допустимые значения:
- all – Разрешает распределение шардов для всех типов шардов.
- primaries – Разрешает распределение шардов только для первичных шардов.
- new_primaries – Разрешает распределение шардов только для первичных шардов новых индексов.
- none – Распределение шардов не разрешено для любых индексов.
По умолчанию установлено значение all.
cluster.routing.allocation.node_concurrent_incoming_recoveries (Динамическая, целое число)
Настраивает, сколько параллельных входящих восстановлений шардов разрешено на узле. По умолчанию установлено значение 2.
cluster.routing.allocation.node_concurrent_outgoing_recoveries (Динамическая, целое число)
Настраивает, сколько параллельных исходящих восстановлений шардов разрешено на узле. По умолчанию установлено значение 2.
cluster.routing.allocation.node_concurrent_recoveries (Динамическая, строка)
Используется для установки значений cluster.routing.allocation.node_concurrent_incoming_recoveries
и cluster.routing.allocation.node_concurrent_outgoing_recoveries
на одно и то же значение.
cluster.routing.allocation.node_initial_primaries_recoveries (Динамическая, целое число)
Устанавливает количество восстановлений для нераспределенных первичных шардов после перезапуска узла. По умолчанию установлено значение 4.
cluster.routing.allocation.same_shard.host (Динамическая, логическое)
При установке в true предотвращает распределение нескольких копий шарда на разные узлы на одном хосте. По умолчанию установлено значение false.
cluster.routing.rebalance.enable (Динамическая, строка)
Включает или отключает перераспределение для определенных типов шардов.
Допустимые значения:
- all – Разрешает балансировку шардов для всех типов шардов.
- primaries – Разрешает балансировку шардов только для первичных шардов.
- replicas – Разрешает балансировку шардов только для реплик.
- none – Балансировка шардов не разрешена для любых индексов.
По умолчанию установлено значение all.
cluster.routing.allocation.allow_rebalance (Динамическая, строка)
Указывает, когда разрешено перераспределение шардов.
Допустимые значения:
- always – Всегда разрешать перераспределение.
- indices_primaries_active – Разрешать перераспределение только когда все первичные шары в кластере распределены.
- indices_all_active – Разрешать перераспределение только когда все шары в кластере распределены.
По умолчанию установлено значение indices_all_active.
cluster.routing.allocation.cluster_concurrent_rebalance (Динамическая, целое число)
Позволяет контролировать, сколько параллельных перераспределений шардов разрешено в кластере. По умолчанию установлено значение 2.
cluster.routing.allocation.balance.shard (Динамическая, число с плавающей точкой)
Определяет весовой коэффициент для общего количества шардов, распределенных на узел. По умолчанию установлено значение 0.45.
cluster.routing.allocation.balance.index (Динамическая, число с плавающей точкой)
Определяет весовой коэффициент для количества шардов на индекс, распределенных на узел. По умолчанию установлено значение 0.55.
cluster.routing.allocation.balance.threshold (Динамическая, число с плавающей точкой)
Минимальное значение оптимизации операций, которые должны быть выполнены. По умолчанию установлено значение 1.0.
cluster.routing.allocation.balance.prefer_primary (Динамическая, логическое)
При установке в true OpenSearch пытается равномерно распределить первичные шары между узлами кластера. Включение этой настройки не всегда гарантирует равное количество первичных шардов на каждом узле, особенно в случае сбоя. Изменение этой настройки на false после установки в true не вызывает перераспределение первичных шардов. По умолчанию установлено значение false.
cluster.routing.allocation.rebalance.primary.enable (Динамическая, логическое)
При установке в true OpenSearch пытается перераспределить первичные шары между узлами кластера. При включении кластер пытается поддерживать количество первичных шардов на каждом узле, с максимальным буфером, определенным настройкой cluster.routing.allocation.rebalance.primary.buffer
. Изменение этой настройки на false после установки в true не вызывает перераспределение первичных шардов. По умолчанию установлено значение false.
cluster.routing.allocation.rebalance.primary.buffer (Динамическая, число с плавающей точкой)
Определяет максимальный допустимый буфер первичных шардов между узлами, когда включена настройка cluster.routing.allocation.rebalance.primary.enable
. По умолчанию установлено значение 0.1.
cluster.routing.allocation.disk.threshold_enabled (Динамическая, логическое)
При установке в false отключает решение о распределении по диску. Это также удалит любые существующие блокировки индекса index.blocks.read_only_allow_delete
, когда отключено. По умолчанию установлено значение true.
Настройки водяных знаков дискового пространства
cluster.routing.allocation.disk.watermark.low (Динамическая, строка)
Контролирует низкий водяной знак для использования дискового пространства. При установке в процентном соотношении OpenSearch не будет распределять шары на узлы с указанным процентом использования диска. Это также можно указать в виде дробного значения, например, 0.85. Наконец, это можно установить в байтовом значении, например, 400mb. Эта настройка не влияет на первичные шары новых индексов, но предотвратит распределение их реплик. По умолчанию установлено значение 85%.
cluster.routing.allocation.disk.watermark.high (Динамическая, строка)
Контролирует высокий водяной знак. OpenSearch попытается переместить шары с узла, использование диска на котором превышает установленный процент. Это также можно указать в виде дробного значения, например, 0.85. Наконец, это можно установить в байтовом значении, например, 400mb. Эта настройка влияет на распределение всех шардов. По умолчанию установлено значение 90%.
cluster.routing.allocation.disk.watermark.flood_stage (Динамическая, строка)
Контролирует водяной знак на уровне затопления. Это последний шаг для предотвращения исчерпания дискового пространства на узлах. OpenSearch применяет блокировку индекса только для чтения (index.blocks.read_only_allow_delete
) ко всем индексам, на которых есть один или несколько шардов, распределенных на узле, и хотя бы один диск превышает уровень затопления. Блокировка индекса снимается, как только использование диска падает ниже высокого водяного знака. Это также можно указать в виде дробного значения, например, 0.85. Наконец, это можно установить в байтовом значении, например, 400mb. По умолчанию установлено значение 95%.
cluster.info.update.interval (Динамическая, единица времени)
Устанавливает, как часто OpenSearch должен проверять использование диска для каждого узла в кластере. По умолчанию установлено значение 30s.
Настройки распределения шардов по атрибутам
cluster.routing.allocation.include. (Динамическая, перечисление)
Распределяет шары на узел, атрибут которого содержит хотя бы одно из включенных значений, разделенных запятыми.
cluster.routing.allocation.require. (Динамическая, перечисление)
Распределяет шары только на узел, атрибут которого содержит все включенные значения, разделенные запятыми.
cluster.routing.allocation.exclude. (Динамическая, перечисление)
Не распределяет шары на узел, атрибут которого содержит любое из включенных значений, разделенных запятыми. Настройки распределения кластера поддерживают следующие встроенные атрибуты.
Допустимые значения:
- _name – Совпадение узлов по имени узла.
- _host_ip – Совпадение узлов по IP-адресу хоста.
- _publish_ip – Совпадение узлов по публикуемому IP-адресу.
- _ip – Совпадение по _host_ip или _publish_ip.
- _host – Совпадение узлов по имени хоста.
- _id – Совпадение узлов по идентификатору узла.
- _tier – Совпадение узлов по роли уровня данных.
Настройки перемещения шардов
cluster.routing.allocation.shard_movement_strategy (Динамическая, перечисление)
Определяет порядок, в котором шары перемещаются с исходящих узлов на входящие.
Эта настройка поддерживает следующие стратегии:
- PRIMARY_FIRST – Первичные шары перемещаются первыми, перед репликами. Эта приоритизация может помочь предотвратить переход состояния здоровья кластера в красный, если узлы, на которые перемещаются шары, выйдут из строя в процессе.
- REPLICA_FIRST – Репликационные шары перемещаются первыми, перед первичными. Эта приоритизация может помочь предотвратить переход состояния здоровья кластера в красный при выполнении перемещения шардов в кластере OpenSearch с смешанными версиями и включенной репликацией сегментов. В этой ситуации первичные шары, перемещенные на узлы OpenSearch более новой версии, могут попытаться скопировать файлы сегментов на репликационные шары более старой версии OpenSearch, что приведет к сбою шардов. Перемещение репликационных шардов первыми может помочь избежать этого в кластерах с несколькими версиями.
- NO_PREFERENCE – Поведение по умолчанию, при котором порядок перемещения шардов не имеет значения.
cluster.routing.search_replica.strict (Динамическая, логическое)
Контролирует, как маршрутизируются поисковые запросы, когда для индекса существуют репликационные шары, например, когда index.number_of_search_replicas
больше 0. Эта настройка применяется только в случае, если для индекса настроены поисковые реплики. При установке в true все поисковые запросы для таких индексов маршрутизируются только на репликационные шары. Если репликационные шары не назначены, запросы завершаются неудачей. При установке в false, если репликационные шары не назначены, запросы возвращаются к любому доступному шару. По умолчанию установлено значение true.
cluster.allocator.gateway.batch_size (Динамическая, целое число)
Ограничивает количество шардов, отправляемых на узлы данных в одной партии для получения метаданных любых нераспределенных шардов. По умолчанию установлено значение 2000.
cluster.allocator.existing_shards_allocator.batch_enabled (Статическая, логическая)
Включает пакетное распределение нераспределенных шардов, которые уже существуют на диске, вместо распределения одного шара за раз. Это снижает нагрузку на память и транспорт, получая метаданные любых нераспределенных шардов в пакетном вызове. По умолчанию установлено значение false.
cluster.routing.allocation.total_shards_per_node (Динамическая, целое число)
Максимальное общее количество первичных и репликационных шардов, которые могут быть распределены на один узел. По умолчанию установлено значение -1 (без ограничений). Помогает равномерно распределять шары по узлам, ограничивая общее количество шардов на узел. Используйте с осторожностью, так как шары могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
cluster.routing.allocation.total_primary_shards_per_node (Динамическая, целое число)
Максимальное количество первичных шардов, которые могут быть распределены на один узел. Эта настройка применима только для кластеров с удаленной поддержкой. По умолчанию установлено значение -1 (без ограничений). Помогает равномерно распределять первичные шары по узлам, ограничивая количество первичных шардов на узел. Используйте с осторожностью, так как первичные шары могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
Настройки шардов, блокировок и задач на уровне кластера
OpenSearch поддерживает следующие настройки шардов, блокировок и задач на уровне кластера:
action.search.shard_count.limit (Целое число)
Ограничивает максимальное количество шардов, которые могут быть задействованы во время поиска. Запросы, превышающие этот лимит, будут отклонены.
cluster.blocks.read_only (Логическое)
Устанавливает весь кластер в режим только для чтения. По умолчанию установлено значение false.
cluster.blocks.read_only_allow_delete (Логическое)
Похоже на cluster.blocks.read_only
, но позволяет удалять индексы.
cluster.max_shards_per_node (Целое число)
Ограничивает общее количество первичных и репликационных шардов для кластера. Лимит рассчитывается следующим образом: cluster.max_shards_per_node
умножается на количество не замороженных узлов данных. Шары для закрытых индексов не учитываются в этом лимите. По умолчанию установлено значение 1000.
cluster.persistent_tasks.allocation.enable (Строка)
Включает или отключает распределение для постоянных задач.
Допустимые значения:
- all – Разрешает назначение постоянных задач на узлы.
- none – Распределение для постоянных задач не разрешено. Это не влияет на уже работающие постоянные задачи.
По умолчанию установлено значение all.
cluster.persistent_tasks.allocation.recheck_interval (Единица времени)
Менеджер кластера автоматически проверяет, нужно ли назначать постоянные задачи, когда состояние кластера изменяется значительным образом. Существуют и другие факторы, такие как использование памяти, которые повлияют на то, будут ли постоянные задачи назначены на узлы, но не вызывают изменения состояния кластера. Эта настройка определяет, как часто выполняются проверки назначения в ответ на эти факторы. По умолчанию установлено значение 30 секунд, при этом минимальное значение составляет 10 секунд.
Настройки медленных логов на уровне кластера
Для получения дополнительной информации смотрите раздел Медленные логи запросов поиска.
cluster.search.request.slowlog.threshold.warn (Единица времени)
Устанавливает порог WARN для медленных логов на уровне запросов. По умолчанию установлено значение -1.
cluster.search.request.slowlog.threshold.info (Единица времени)
Устанавливает порог INFO для медленных логов на уровне запросов. По умолчанию установлено значение -1.
cluster.search.request.slowlog.threshold.debug (Единица времени)
Устанавливает порог DEBUG для медленных логов на уровне запросов. По умолчанию установлено значение -1.
cluster.search.request.slowlog.threshold.trace (Единица времени)
Устанавливает порог TRACE для медленных логов на уровне запросов. По умолчанию установлено значение -1.
cluster.search.request.slowlog.level (Строка)
Устанавливает минимальный уровень медленного лога для записи: WARN, INFO, DEBUG и TRACE. По умолчанию установлено значение TRACE.
Настройки индекса на уровне кластера
Для получения информации о настройках индекса на уровне индекса смотрите раздел Настройки индекса на уровне кластера.
Настройки координации на уровне кластера
OpenSearch поддерживает следующие настройки координации на уровне кластера. Все настройки в этом списке являются динамическими:
cluster.fault_detection.leader_check.timeout (Единица времени)
Количество времени, в течение которого узел ждет ответа от избранного менеджера кластера во время проверки лидера, прежде чем считать проверку неудачной. Допустимые значения от 1ms до 60s, включая. По умолчанию установлено значение 10s. Изменение этой настройки на значение, отличное от значения по умолчанию, может привести к нестабильности кластера.
cluster.fault_detection.follower_check.timeout (Единица времени)
Количество времени, в течение которого избранный менеджер кластера ждет ответа во время проверки последователя, прежде чем считать проверку неудачной. Допустимые значения от 1ms до 60s, включая. По умолчанию установлено значение 10s. Изменение этой настройки на значение, отличное от значения по умолчанию, может привести к нестабильности кластера.
cluster.fault_detection.follower_check.interval (Единица времени)
Количество времени, в течение которого избранный менеджер кластера ждет между отправкой проверок последователей другим узлам в кластере. Допустимые значения 100ms и выше. По умолчанию установлено значение 1000ms. Изменение этой настройки на значение, отличное от значения по умолчанию, может привести к нестабильности кластера.
cluster.follower_lag.timeout (Единица времени)
Количество времени, в течение которого избранный менеджер кластера ждет получения подтверждений обновлений состояния кластера от отстающих узлов. По умолчанию установлено значение 90s. Если узел не успешно применяет обновление состояния кластера в течение этого времени, он считается неудавшимся и удаляется из кластера.
cluster.publish.timeout (Единица времени)
Количество времени, в течение которого менеджер кластера ждет, пока каждое обновление состояния кластера будет полностью опубликовано на всех узлах, если только discovery.type
не установлен на single-node. По умолчанию установлено значение 30s.
Настройки пределов ответов CAT на уровне кластера
OpenSearch поддерживает следующие настройки пределов ответов CAT API на уровне кластера, все из которых являются динамическими:
cat.indices.response.limit.number_of_indices (Целое число)
Устанавливает предел на количество индексов, возвращаемых API CAT Indices. Значение по умолчанию -1 (без ограничений). Если количество индексов в ответе превышает этот предел, API возвращает ошибку 429. Чтобы избежать этого, вы можете указать фильтр по шаблону индекса в вашем запросе (например, _cat/indices/<index-pattern>
).
cat.shards.response.limit.number_of_shards (Целое число)
Устанавливает предел на количество шардов, возвращаемых API CAT Shards. Значение по умолчанию -1 (без ограничений). Если количество шардов в ответе превышает этот предел, API возвращает ошибку 429. Чтобы избежать этого, вы можете указать фильтр по шаблону индекса в вашем запросе (например, _cat/shards/<index-pattern>
).
cat.segments.response.limit.number_of_indices (Целое число)
Устанавливает предел на количество индексов, возвращаемых API CAT Segments. Значение по умолчанию -1 (без ограничений). Если количество индексов в ответе превышает этот предел, API возвращает ошибку 429. Чтобы избежать этого, вы можете указать фильтр по шаблону индекса в вашем запросе (например, _cat/segments/<index-pattern>
).
3.8 - Настройка индекса
Настройки индекса могут быть двух типов: настройки уровня кластера, которые влияют на все индексы в кластере, и настройки уровня индекса, которые влияют на отдельные индексы.
Чтобы узнать больше о статических и динамических настройках, смотрите Конфигурирование OpenSearch.
Настройки индекса уровня кластера
Существует два типа настроек кластера:
- Статические настройки индекса уровня кластера — это настройки, которые нельзя обновить, пока кластер работает. Чтобы обновить статическую настройку, необходимо остановить кластер, обновить настройку, а затем перезапустить кластер.
- Динамические настройки индекса уровня кластера — это настройки, которые можно обновлять в любое время.
Статические настройки индекса уровня кластера
OpenSearch поддерживает следующие статические настройки индекса уровня кластера:
-
indices.cache.cleanup_interval
(Единица времени): Запланирует периодическую фоновую задачу, которая очищает истекшие записи из кэша с указанным интервалом. По умолчанию 1m (1 минута). Для получения дополнительной информации смотрите Кэш запросов индекса.
-
indices.requests.cache.size
(Строка): Размер кэша в процентах от размера кучи (например, чтобы использовать 1% кучи, укажите 1%). По умолчанию 1%. Для получения дополнительной информации смотрите Кэш запросов индекса.
Динамические настройки индекса уровня кластера
OpenSearch поддерживает следующие динамические настройки индекса уровня кластера:
-
action.auto_create_index
(Булевый): Автоматически создает индекс, если индекс еще не существует. Также применяет любые конфигурации шаблонов индексов. По умолчанию true.
-
indices.recovery.max_concurrent_file_chunks
(Целое число): Количество частей файлов, отправляемых параллельно для каждой операции восстановления. По умолчанию 2.
-
indices.recovery.max_concurrent_operations
(Целое число): Количество операций, отправляемых параллельно для каждого восстановления. По умолчанию 1.
-
indices.recovery.max_concurrent_remote_store_streams
(Целое число): Количество потоков к удаленному репозиторию, которые могут быть открыты параллельно при восстановлении индекса из удаленного хранилища. По умолчанию 20.
-
indices.replication.max_bytes_per_sec
(Строка): Ограничивает общий входящий и исходящий трафик репликации для каждого узла. Если значение не указано в конфигурации, используется настройка indices.recovery.max_bytes_per_sec
, по умолчанию равная 40 МБ. Если вы установите значение трафика репликации меньше или равным 0 МБ, ограничение скорости будет отключено, что приведет к передаче данных репликации с максимальной возможной скоростью.
-
indices.fielddata.cache.size
(Строка): Максимальный размер кэша данных полей. Может быть указан как абсолютное значение (например, 8 ГБ) или процент от кучи узла (например, 50%). Это значение статическое, поэтому его необходимо указать в файле opensearch.yml
. Если вы не укажете эту настройку, максимальный размер будет неограниченным. Это значение должно быть меньше, чем indices.breaker.fielddata.limit
. Для получения дополнительной информации смотрите Систему защиты от переполнения кэша данных полей.
-
indices.query.bool.max_clause_count
(Целое число): Определяет максимальное произведение полей и терминов, которые могут быть запрошены одновременно. До версии OpenSearch 2.16 для применения этой статической настройки требовалась перезагрузка кластера. Теперь она динамическая, существующие пулы потоков поиска могут использовать старое статическое значение, что может привести к исключениям TooManyClauses. Новые пулы потоков используют обновленное значение. По умолчанию 1024.
-
cluster.remote_store.index.path.type
(Строка): Стратегия пути для данных, хранящихся в удаленном хранилище. Эта настройка эффективна только для кластеров с включенным удаленным хранилищем. Эта настройка поддерживает следующие значения:
fixed
: Хранит данные в структуре пути <repository_base_path>/<index_uuid>/<shard_id>/
.
hashed_prefix
: Хранит данные в структуре пути hash(<shard-data-identifier>)/<repository_base_path>/<index_uuid>/<shard_id>/
.
hashed_infix
: Хранит данные в структуре пути <repository_base_path>/hash(<shard-data-identifier>)/<index_uuid>/<shard_id>/
. shard-data-identifier
характеризуется index_uuid
, shard_id
, типом данных (translog, segments) и типом данных (data, metadata, lock_files). По умолчанию fixed
.
-
cluster.remote_store.index.path.hash_algorithm
(Строка): Хеш-функция, используемая для получения хеш-значения, когда cluster.remote_store.index.path.type
установлено на hashed_prefix
или hashed_infix
. Эта настройка эффективна только для кластеров с включенным удаленным хранилищем. Эта настройка поддерживает следующие значения:
fnv_1a_base64
: Использует хеш-функцию FNV1a и генерирует безопасное для URL 20-битное хеш-значение в формате base64.
fnv_1a_composite_1
: Использует хеш-функцию FNV1a и генерирует пользовательское закодированное хеш-значение, которое хорошо масштабируется с большинством опций удаленного хранилища. Функция FNV1a генерирует 64-битное значение. Пользовательское кодирование использует 6 старших бит для создания безопасного для URL символа base64 и следующие 14 бит для создания двоичной строки. По умолчанию fnv_1a_composite_1
.
-
cluster.remote_store.translog.transfer_timeout
(Единица времени): Управляет значением таймаута при загрузке файлов translog и контрольных точек во время синхронизации с удаленным хранилищем. Эта настройка применяется только для кластеров с включенным удаленным хранилищем. По умолчанию 30 секунд.
-
cluster.remote_store.index.segment_metadata.retention.max_count
(Целое число): Управляет минимальным количеством файлов метаданных, которые необходимо сохранить в репозитории сегментов на удаленном хранилище. Значение ниже 1 отключает удаление устаревших файлов метаданных сегментов. По умолчанию 10.
-
cluster.remote_store.segment.transfer_timeout
(Единица времени): Управляет максимальным временем ожидания обновления всех новых сегментов после обновления в удаленное хранилище. Если загрузка не завершится в течение указанного времени, будет выброшено исключение SegmentUploadFailedException. По умолчанию 30 минут. Минимальное ограничение составляет 10 минут.
-
cluster.remote_store.translog.path.prefix
(Строка): Управляет фиксированным префиксом пути для данных translog на кластере с включенным удаленным хранилищем. Эта настройка применяется только в том случае, если настройка cluster.remote_store.index.path.type
установлена на HASHED_PREFIX
или HASHED_INFIX
. По умолчанию пустая строка, “”.
-
cluster.remote_store.segments.path.prefix
(Строка): Управляет фиксированным префиксом пути для данных сегментов на кластере с включенным удаленным хранилищем. Эта настройка применяется только в том случае, если настройка cluster.remote_store.index.path.type
установлена на HASHED_PREFIX
или HASHED_INFIX
. По умолчанию пустая строка, “”.
-
cluster.snapshot.shard.path.prefix
(Строка): Управляет фиксированным префиксом пути для блобов уровня сегмента снимка. Эта настройка применяется только в том случае, если настройка repository.shard_path_type
установлена на HASHED_PREFIX
или HASHED_INFIX
. По умолчанию пустая строка, “”.
-
cluster.default_number_of_replicas
(Целое число): Управляет значением по умолчанию для количества реплик индексов в кластере. Настройка уровня индекса index.number_of_replicas
по умолчанию принимает это значение, если не настроена. По умолчанию 1.
-
cluster.thread_pool.<fixed-threadpool>.size
(Целое число): Управляет размерами как фиксированных, так и изменяемых очередей пулов потоков. Переопределяет значения по умолчанию, указанные в opensearch.yml
.
-
cluster.thread_pool.<scaling-threadpool>.max
(Целое число): Устанавливает максимальный размер пула потоков с изменяемым размером. Переопределяет значение по умолчанию, указанное в opensearch.yml
.
-
cluster.thread_pool.<scaling-threadpool>.core
(Целое число): Указывает базовый размер пула потоков с изменяемым размером. Переопределяет значение по умолчанию, указанное в opensearch.yml
.
Прежде чем настраивать параметры пула потоков динамически, обратите внимание, что это настройки для экспертов, которые могут потенциально дестабилизировать ваш кластер. Изменение настроек пула потоков применяет один и тот же размер пула потоков ко всем узлам, поэтому это не рекомендуется для кластеров с различным оборудованием для одних и тех же ролей. Аналогично, избегайте настройки пулов потоков, которые используются как узлами данных, так и узлами управления кластером. После внесения этих изменений рекомендуется следить за вашим кластером, чтобы убедиться, что он остается стабильным и работает как ожидается.
Настройки индекса уровня индекса
Вы можете указать настройки индекса при создании индекса. Существует два типа настроек индекса:
-
Статические настройки индекса уровня индекса — это настройки, которые нельзя обновить, пока индекс открыт. Чтобы обновить статическую настройку, необходимо закрыть индекс, обновить настройку, а затем снова открыть индекс.
-
Динамические настройки индекса уровня индекса — это настройки, которые можно обновлять в любое время.
Указание настройки при создании индекса
При создании индекса вы можете указать его статические или динамические настройки следующим образом:
PUT /testindex
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 2
}
}
Статические настройки индекса уровня индекса
OpenSearch поддерживает следующие статические настройки индекса уровня индекса:
-
index.number_of_shards
(Целое число): Количество первичных шардов в индексе. По умолчанию 1.
-
index.number_of_routing_shards
(Целое число): Количество шардов маршрутизации, используемых для разделения индекса.
-
index.shard.check_on_startup
(Булевый): Указывает, следует ли проверять шардов индекса на наличие повреждений. Доступные опции:
false
(не проверять на повреждения),
checksum
(проверять на физические повреждения),
true
(проверять как на физические, так и на логические повреждения).
По умолчанию false
.
-
index.codec
(Строка): Определяет, как сжимаются и хранятся на диске сохраненные поля индекса. Эта настройка влияет на размер шардов индекса и производительность операций индексации.
Допустимые значения:
default
best_compression
zstd
(OpenSearch 2.9 и позже)
zstd_no_dict
(OpenSearch 2.9 и позже)
qat_lz4
(OpenSearch 2.14 и позже, на поддерживаемых системах)
qat_deflate
(OpenSearch 2.14 и позже, на поддерживаемых системах)
Для zstd
, zstd_no_dict
, qat_lz4
и qat_deflate
вы можете указать уровень сжатия в настройке index.codec.compression_level
. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчанию default
.
-
index.codec.compression_level
(Целое число): Настройка уровня сжатия обеспечивает компромисс между коэффициентом сжатия и скоростью. Более высокий уровень сжатия приводит к более высокому коэффициенту сжатия (меньший размер хранения), но замедляет скорость сжатия и распаковки, что приводит к увеличению задержек при индексации и поиске. Эта настройка может быть указана только если index.codec
установлен на zstd
и zstd_no_dict
в OpenSearch 2.9 и позже или qat_lz4
и qat_deflate
в OpenSearch 2.14 и позже. Допустимые значения — целые числа в диапазоне [1, 6]. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчанию 3.
-
index.codec.qatmode
(Строка): Режим аппаратного ускорения, используемый для кодеков сжатия qat_lz4
и qat_deflate
. Допустимые значения: auto
и hardware
. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчанию auto
.
-
index.routing_partition_size
(Целое число): Количество шардов, к которым может быть направлено значение пользовательской маршрутизации. Маршрутизация помогает несбалансированному кластеру, перемещая значения к подмножеству шардов, а не к одному шару. Чтобы включить маршрутизацию, установите это значение больше 1, но меньше index.number_of_shards
. По умолчанию 1.
-
index.soft_deletes.retention_lease.period
(Единица времени): Максимальное время хранения истории операций шара. По умолчанию 12 часов.
-
index.load_fixed_bitset_filters_eagerly
(Булевый): Указывает, должен ли OpenSearch предварительно загружать кэшированные фильтры. Доступные опции: true
и false
. По умолчанию true
.
-
index.hidden
(Булевый): Указывает, должен ли индекс быть скрытым. Скрытые индексы не возвращаются в результате запросов, содержащих подстановочные знаки. Доступные опции: true
и false
. По умолчанию false
.
-
index.merge.policy
(Строка): Эта настройка управляет политикой слияния для сегментов Lucene. Доступные опции: tiered
и log_byte_size
. По умолчанию tiered
, но для временных данных, таких как журналы событий, рекомендуется использовать политику слияния log_byte_size
, которая может улучшить производительность запросов при выполнении диапазонных запросов по полю @timestamp
. Рекомендуется не изменять политику слияния существующего индекса. Вместо этого настройте эту опцию при создании нового индекса.
-
index.merge_on_flush.enabled
(Булевый): Эта настройка управляет функцией слияния при обновлении Apache Lucene, которая направлена на уменьшение количества сегментов путем выполнения слияний при обновлении (или, в терминах OpenSearch, при сбросе). По умолчанию true
.
-
index.merge_on_flush.max_full_flush_merge_wait_time
(Единица времени): Эта настройка устанавливает время ожидания для слияний, когда index.merge_on_flush.enabled
включен. По умолчанию 10 секунд.
-
index.merge_on_flush.policy
(Строка): Эта настройка управляет тем, какая политика слияния должна использоваться, когда index.merge_on_flush.enabled
включен. По умолчанию default
.
-
index.check_pending_flush.enabled
(Булевый): Эта настройка управляет параметром checkPendingFlushOnUpdate
индексации Apache Lucene, который указывает, должен ли поток индексации проверять наличие ожидающих сбросов при обновлении, чтобы сбросить буферы индексации на диск. По умолчанию true
.
-
index.use_compound_file
(Булевый): Эта настройка управляет параметрами useCompoundFile
индексации Apache Lucene, которые указывают, будут ли новые файлы сегментов упакованы в составной файл. По умолчанию true
.
-
index.append_only.enabled
(Булевый): Установите значение true
, чтобы предотвратить любые обновления документов в индексе. По умолчанию false
.
Обновление статической настройки индекса
Вы можете обновить статическую настройку индекса только для закрытого индекса. Следующий пример демонстрирует обновление настройки кодека индекса.
Сначала закройте индекс:
Затем обновите настройки, отправив запрос к конечной точке _settings
:
PUT /testindex/_settings
{
"index": {
"codec": "zstd_no_dict",
"codec.compression_level": 3
}
}
Наконец, снова откройте индекс, чтобы включить операции чтения и записи:
Для получения дополнительной информации об обновлении настроек, включая поддерживаемые параметры запроса, смотрите Обновление настроек.
Динамические настройки индекса уровня индекса
OpenSearch поддерживает следующие динамические настройки индекса уровня индекса:
-
index.number_of_replicas
(Целое число): Количество реплик, которые должен иметь каждый первичный шард. Например, если у вас 4 первичных шарда и вы установите index.number_of_replicas
на 3, индекс будет иметь 12 реплик. Если не установлено, по умолчанию используется значение cluster.default_number_of_replicas
(по умолчанию 1).
-
index.number_of_search_replicas
(Целое число): Количество поисковых реплик, которые должен иметь каждый первичный шард. Например, если у вас 4 первичных шарда и вы установите index.number_of_search_replicas
на 3, индекс будет иметь 12 поисковых реплик. По умолчанию 0.
-
index.auto_expand_replicas
(Строка): Указывает, должен ли кластер автоматически добавлять реплики на основе количества узлов данных. Укажите нижнюю и верхнюю границы (например, 0–9) или all
для верхней границы. Например, если у вас 5 узлов данных и вы установите index.auto_expand_replicas
на 0–3, кластер не добавит еще одну реплику. Однако, если вы установите это значение на 0-all и добавите 2 узла, всего 7, кластер расширится до 6 реплик. По умолчанию отключено.
-
index.auto_expand_search_replicas
(Строка): Управляет тем, автоматически ли кластер регулирует количество поисковых реплик на основе количества доступных узлов поиска. Укажите значение в виде диапазона с нижней и верхней границей, например, 0-3 или 0-all. Если вы не укажете значение, эта функция отключена.
Например, если у вас 5 узлов данных и вы установите index.auto_expand_search_replicas
на 0-3, индекс может иметь до 3 поисковых реплик, и кластер не добавит еще одну поисковую реплику. Однако, если вы установите index.auto_expand_search_replicas
на 0-all и добавите 2 узла, всего 7, кластер расширится до 7 поисковых реплик. Эта настройка по умолчанию отключена.
-
index.search.idle.after
(Единица времени): Время, в течение которого шард должен ждать запроса поиска или получения, прежде чем перейти в состояние ожидания. По умолчанию 30 секунд.
-
index.search.default_pipeline
(Строка): Имя поискового конвейера, который используется, если при поиске индекса не установлен явный конвейер. Если установлен конвейер по умолчанию и он не существует, запросы к индексу завершатся неудачей. Используйте имя конвейера _none
, чтобы указать отсутствие конвейера поиска по умолчанию. Для получения дополнительной информации смотрите Конвейер поиска по умолчанию.
-
index.refresh_interval
(Единица времени): Как часто индекс должен обновляться, что публикует его последние изменения и делает их доступными для поиска. Может быть установлено на -1 для отключения обновления. По умолчанию 1 секунда.
-
index.max_result_window
(Целое число): Максимальное значение from + size
для запросов к индексу. from
— это начальный индекс для поиска, а size
— количество результатов для возврата. По умолчанию 10000.
-
index.max_inner_result_window
(Целое число): Максимальное значение from + size
, которое указывает количество возвращаемых вложенных результатов поиска и наиболее релевантных документов, агрегированных во время запроса. from
— это начальный индекс для поиска, а size
— количество верхних результатов для возврата. По умолчанию 100.
-
index.max_rescore_window
(Целое число): Максимальное значение window_size
для запросов пересчета к индексу. Запросы пересчета изменяют порядок документов индекса и возвращают новый балл, который может быть более точным. По умолчанию такое же, как index.max_inner_result_window
, или 10000 по умолчанию.
-
index.max_docvalue_fields_search
(Целое число): Максимальное количество docvalue_fields
, разрешенных в запросе. По умолчанию 100.
-
index.max_script_fields
(Целое число): Максимальное количество script_fields
, разрешенных в запросе. По умолчанию 32.
-
index.max_ngram_diff
(Целое число): Максимальная разница между значениями min_gram
и max_gram
для NGramTokenizer
и NGramTokenFilter
. По умолчанию 1.
-
index.max_shingle_diff
(Целое число): Максимальная разница между max_shingle_size
и min_shingle_size
, которая подается в фильтр токенов shingle
. По умолчанию 3.
-
index.max_refresh_listeners
(Целое число): Максимальное количество слушателей обновления, которые может иметь каждый шард.
-
index.analyze.max_token_count
(Целое число): Максимальное количество токенов, которые могут быть возвращены из операции API _analyze
. По умолчанию 10000.
-
index.highlight.max_analyzed_offset
(Целое число): Количество символов, которые может анализировать запрос на выделение. По умолчанию 1000000.
-
index.max_terms_count
(Целое число): Максимальное количество терминов, которые может принять запрос терминов. По умолчанию 65536.
-
index.max_regex_length
(Целое число): Максимальная длина символов регулярного выражения, которое может быть в запросе regexp
. По умолчанию 1000.
-
index.query.default_field
(Список): Поле или список полей, которые OpenSearch использует в запросах, если поле не указано в параметрах.
-
index.query.max_nested_depth
(Целое число): Максимальное количество уровней вложенности для вложенных запросов. По умолчанию 20. Минимум 1 (один вложенный запрос).
-
index.requests.cache.enable
(Булевый): Включает или отключает кэш запросов индекса. По умолчанию true
. Для получения дополнительной информации смотрите Кэш запросов индекса.
-
index.routing.allocation.enable
(Строка): Указывает параметры для распределения шардов индекса. Доступные опции:
all
(разрешить распределение для всех шардов),
primaries
(разрешить распределение только для первичных шардов),
new_primaries
(разрешить распределение только для новых первичных шардов),
none
(не разрешать распределение).
По умолчанию all
.
-
index.routing.rebalance.enable
(Строка): Включает перераспределение шардов для индекса. Доступные опции:
all
(разрешить перераспределение для всех шардов),
primaries
(разрешить перераспределение только для первичных шардов),
replicas
(разрешить перераспределение только для реплик),
none
(не разрешать перераспределение).
По умолчанию all
.
-
index.gc_deletes
(Единица времени): Время хранения номера версии удаленного документа. По умолчанию 60 секунд.
-
index.default_pipeline
(Строка): Конвейер узла обработки по умолчанию для индекса. Если установлен конвейер по умолчанию и он не существует, запросы к индексу завершатся неудачей. Имя конвейера _none
указывает на то, что у индекса нет конвейера обработки.
-
index.final_pipeline
(Строка): Конечный конвейер узла обработки для индекса. Если установлен конечный конвейер и он не существует, запросы к индексу завершатся неудачей. Имя конвейера _none
указывает на то, что у индекса нет конвейера обработки.
-
index.optimize_doc_id_lookup.fuzzy_set.enabled
(Булевый): Эта настройка управляет тем, следует ли включать fuzzy_set
для оптимизации поиска идентификаторов документов в индексах или запросах, используя дополнительную структуру данных, в данном случае структуру данных Bloom filter. Включение этой настройки улучшает производительность операций upsert
и поиска, которые зависят от идентификаторов документов, создавая новую структуру данных (Bloom filter). Bloom filter позволяет обрабатывать отрицательные случаи (то есть идентификаторы, отсутствующие в существующем индексе) с помощью более быстрых обращений вне кучи. Обратите внимание, что создание Bloom filter требует дополнительного использования кучи во время индексации. По умолчанию false
.
-
index.optimize_doc_id_lookup.fuzzy_set.false_positive_probability
(Число с плавающей точкой)
Устанавливает вероятность ложного срабатывания для базового fuzzy_set
(то есть, фильтра Блума). Более низкая вероятность ложного срабатывания обеспечивает более высокую пропускную способность для операций upsert
и get
, но приводит к увеличению использования памяти и хранилища. Допустимые значения находятся в диапазоне от 0.01 до 0.50. По умолчанию установлено значение 0.20.
index.routing.allocation.total_shards_per_node
(Целое число)
Максимальное общее количество первичных и репликационных шардов из одного индекса, которые могут быть распределены на один узел. По умолчанию установлено значение -1 (без ограничений). Помогает контролировать распределение шардов по узлам для каждого индекса, ограничивая количество шардов на узел. Используйте с осторожностью, так как шары из этого индекса могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
index.routing.allocation.total_primary_shards_per_node
(Целое число)
Максимальное количество первичных шардов из одного индекса, которые могут быть распределены на один узел. Эта настройка применима только для кластеров с удаленной поддержкой. По умолчанию установлено значение -1 (без ограничений). Помогает контролировать распределение первичных шардов по узлам для каждого индекса, ограничивая количество первичных шардов на узел. Используйте с осторожностью, так как первичные шары из этого индекса могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
Обновление динамической настройки индекса
Вы можете обновить динамическую настройку индекса в любое время через API. Например, чтобы обновить интервал обновления, используйте следующий запрос:
PUT /testindex/_settings
{
"index": {
"refresh_interval": "2s"
}
}
Для получения дополнительной информации об обновлении настроек, включая поддерживаемые параметры запроса, смотрите раздел Обновление настроек.
3.9 - Настройки поиска
OpenSearch поддерживает следующие настройки поиска
-
search.max_buckets (Динамическое, целое число): Максимальное количество агрегатных бакетов, разрешенных в одном ответе. По умолчанию 65535.
-
search.phase_took_enabled (Динамическое, логическое): Включает возврат значений времени на уровне фаз в ответах на поиск. По умолчанию false.
-
search.allow_expensive_queries (Динамическое, логическое): Разрешает или запрещает дорогостоящие запросы. Для получения дополнительной информации см. Дорогостоящие запросы.
-
search.default_allow_partial_results (Динамическое, логическое): Настройка на уровне кластера, которая позволяет возвращать частичные результаты поиска, если запрос превышает время ожидания или если шард не отвечает. Если запрос на поиск содержит параметр allow_partial_search_results
, этот параметр имеет приоритет над данной настройкой. По умолчанию true.
-
search.cancel_after_time_interval (Динамическое, единица времени): Настройка на уровне кластера, которая устанавливает значение по умолчанию для таймаута всех запросов на поиск на уровне координирующего узла. После достижения указанного времени запрос останавливается, и все связанные задачи отменяются. По умолчанию -1 (без таймаута).
-
search.default_search_timeout (Динамическое, единица времени): Настройка на уровне кластера, которая указывает максимальное время, в течение которого запрос на поиск может выполняться, прежде чем он будет отменен на уровне шарда. Если интервал таймаута указан в запросе на поиск, этот интервал имеет приоритет над настроенной настройкой. По умолчанию -1.
-
search.default_keep_alive (Динамическое, единица времени): Указывает значение по умолчанию для поддержания активности для запросов с прокруткой и точкой во времени (PIT). Поскольку запрос может попадать на шард несколько раз (например, во время фаз запроса и извлечения), OpenSearch открывает контекст запроса, который существует на протяжении всего времени запроса, чтобы обеспечить согласованность состояния шарда для каждого отдельного запроса к шард. В стандартном поиске, как только фаза извлечения завершается, контекст запроса закрывается. Для запроса с прокруткой или PIT OpenSearch сохраняет контекст запроса открытым до явного закрытия (или до достижения времени поддержания активности). Фоновый поток периодически проверяет все открытые контексты прокрутки и PIT и удаляет те, которые превысили свой таймаут поддержания активности. Настройка search.keep_alive_interval
указывает, как часто контексты проверяются на истечение срока. Настройка search.default_keep_alive
является значением по умолчанию для истечения срока. Запрос с прокруткой или PIT может явно указать время поддержания активности, которое имеет приоритет над этой настройкой. По умолчанию 5m.
-
search.keep_alive_interval (Статическое, единица времени): Определяет интервал, с которым OpenSearch проверяет контексты запросов, которые превысили свой лимит поддержания активности. По умолчанию 1m.
-
search.max_keep_alive (Динамическое, единица времени): Указывает максимальное значение поддержания активности. Настройка max_keep_alive
используется в качестве меры безопасности по отношению к другим настройкам поддержания активности (например, default_keep_alive
) и настройкам поддержания активности на уровне запроса (для контекстов прокрутки и PIT). Если запрос превышает значение max_keep_alive
в любом из случаев, операция завершится неудачей. По умолчанию 24h.
-
search.low_level_cancellation (Динамическое, логическое): Включает механизм низкоуровневой отмены запросов. Классический механизм таймаута Lucene проверяет время только во время сбора результатов поиска. Однако дорогостоящий запрос, такой как запрос с подстановочными знаками или префиксами, может занять много времени для расширения перед началом сбора результатов. В этом случае запрос может выполняться в течение времени, превышающего значение таймаута. Механизм низкоуровневой отмены решает эту проблему, устанавливая таймаут не только во время сбора результатов поиска, но и во время фазы расширения запроса или перед выполнением любой операции Lucene. По умолчанию true.
-
search.max_open_scroll_context (Динамическое, целое число): Настройка на уровне узла, которая указывает максимальное количество открытых контекстов прокрутки для узла. По умолчанию 500.
-
search.request_stats_enabled (Динамическое, логическое): Включает сбор статистики времени фаз на уровне узла с точки зрения координирующего узла. Статистика на уровне запроса отслеживает, сколько времени (всего) запросы на поиск проводят в каждой из различных фаз поиска. Вы можете получить эти счетчики, используя API статистики узлов. По умолчанию false.
-
search.highlight.term_vector_multi_value (Статическое, логическое): Указывает на необходимость выделять фрагменты по значениям многозначного поля. По умолчанию true.
-
search.max_aggregation_rewrite_filters (Динамическое, целое число): Определяет максимальное количество фильтров переписывания, разрешенных во время агрегации. Установите это значение в 0, чтобы отключить оптимизацию переписывания фильтров для агрегаций. Это экспериментальная функция и может измениться или быть удалена в будущих версиях.
-
search.dynamic_pruning.cardinality_aggregation.max_allowed_cardinality (Динамическое, целое число): Определяет порог для применения динамической обрезки в агрегации по кардинальности. Если кардинальность поля превышает этот порог, агрегация возвращается к методу по умолчанию. Это экспериментальная функция и может измениться или быть удалена в будущих версиях.
-
search.keyword_index_or_doc_values_enabled (Динамическое, логическое): Определяет, использовать ли индекс или значения документа при выполнении запросов multi_term
на полях ключевых слов. Значение по умолчанию - false.
Настройки точки во времени (PIT)
Для получения информации о настройках PIT см. Настройки PIT.
Чтобы узнать больше о статических и динамических настройках, см. Настройка OpenSearch.
3.10 - Настройки плагинов
Следующие настройки относятся к плагинам OpenSearch.
Настройки плагина оповещений
Для получения информации о настройках оповещений см. Настройки оповещений.
Настройки плагина обнаружения аномалий
Для получения информации о настройках обнаружения аномалий см. Настройки обнаружения аномалий.
Настройки плагина асинхронного поиска
Для получения информации о настройках асинхронного поиска см. Настройки асинхронного поиска.
Настройки плагина репликации между кластерами
Для получения информации о настройках репликации между кластерами см. Настройки репликации.
Настройки плагина Flow Framework
Для получения информации о настройках автоматического рабочего процесса см. Настройки рабочего процесса.
Настройки плагина геопространственных данных
Для получения информации о настройках процессора IP2Geo плагина геопространственных данных см. Настройки кластера.
Настройки плагина управления индексами
Для получения информации о настройках управления состоянием индекса (ISM) см. Настройки ISM.
Настройки сворачивания индексов
Для получения информации о настройках сворачивания индексов см. Настройки сворачивания индексов.
Настройки плагина планировщика задач
Для получения информации о настройках плагина планировщика задач см. Настройки кластера планировщика задач.
Настройки плагина k-NN
Для получения информации о настройках k-NN см. Настройки k-NN.
Настройки плагина ML Commons
Для получения информации о настройках машинного обучения см. Настройки кластера ML Commons.
Настройки плагина нейронного поиска
Плагин Security Analytics поддерживает следующие настройки:
- plugins.neural_search.hybrid_search_disabled (Динамическое, логическое): Отключает гибридный поиск. По умолчанию false.
Настройки плагина уведомлений
Плагин уведомлений поддерживает следующие настройки. Все настройки в этом списке являются динамическими:
-
opensearch.notifications.core.allowed_config_types (Список): Разрешенные типы конфигурации плагина уведомлений. Используйте API GET /_plugins/_notifications/features
, чтобы получить значение этой настройки. Типы конфигурации включают slack, chime, microsoft_teams, webhook, email, sns, ses_account, smtp_account и email_group.
-
opensearch.notifications.core.email.minimum_header_length (Целое число): Минимальная длина заголовка электронной почты. Используется для проверки общей длины сообщения электронной почты. По умолчанию 160.
-
opensearch.notifications.core.email.size_limit (Целое число): Лимит размера электронной почты. Используется для проверки общей длины сообщения электронной почты. По умолчанию 10000000.
-
opensearch.notifications.core.http.connection_timeout (Целое число): Таймаут подключения внутреннего HTTP-клиента. Клиент используется для каналов уведомлений на основе вебхуков. По умолчанию 5000.
-
opensearch.notifications.core.http.host_deny_list (Список): Список запрещенных хостов. HTTP-клиент не отправляет уведомления на URL вебхуков из этого списка.
-
opensearch.notifications.core.http.max_connection_per_route (Целое число): Максимальное количество HTTP-соединений на маршрут внутреннего HTTP-клиента. Клиент используется для каналов уведомлений на основе вебхуков. По умолчанию 20.
-
opensearch.notifications.core.http.max_connections (Целое число): Максимальное количество HTTP-соединений внутреннего HTTP-клиента. Клиент используется для каналов уведомлений на основе вебхуков. По умолчанию 60.
-
opensearch.notifications.core.http.socket_timeout (Целое число): Конфигурация таймаута сокета внутреннего HTTP-клиента. Клиент используется для каналов уведомлений на основе вебхуков. По умолчанию 50000.
-
opensearch.notifications.core.tooltip_support (Логическое): Включает поддержку подсказок для плагина уведомлений. Используйте API GET /_plugins/_notifications/features
, чтобы получить значение этой настройки. По умолчанию true.
-
opensearch.notifications.general.filter_by_backend_roles (Логическое): Включает фильтрацию по ролям бэкенда (контроль доступа на основе ролей для каналов уведомлений). По умолчанию false.
Настройки плагина Query Insights
Для получения информации о настройках плагина Query Insights см. Функции и настройки Query Insights.
Настройки плагина безопасности
Для получения информации о настройках плагина безопасности см. Настройки безопасности.
Настройки плагина Security Analytics
Для получения информации о настройках аналитики безопасности см. Настройки Security Analytics.
Настройки плагина SQL
Для получения информации о настройках, связанных с SQL и PPL, см. Настройки SQL.
3.11 - Экспериментальные флаги функций
Релизы OpenSearch могут содержать экспериментальные функции, которые вы можете включать или отключать по мере необходимости. Существует несколько способов включения флагов функций в зависимости от типа установки.
Включение в opensearch.yml
Если вы запускаете кластер OpenSearch и хотите включить флаги функций в конфигурационном файле, добавьте следующую строку в opensearch.yml
:
opensearch.experimental.feature.<feature_name>.enabled: true
Включение в контейнерах Docker
Если вы используете Docker, добавьте следующую строку в docker-compose.yml
в разделе opensearch-node > environment
:
OPENSEARCH_JAVA_OPTS="-Dopensearch.experimental.feature.<feature_name>.enabled=true"
Включение в установке tarball
Чтобы включить флаги функций в установке tarball, укажите новый параметр JVM либо в config/jvm.options
, либо в OPENSEARCH_JAVA_OPTS
.
Вариант 1: Изменение jvm.options
Добавьте следующие строки в config/jvm.options
перед запуском процесса OpenSearch, чтобы включить функцию и ее зависимости:
-Dopensearch.experimental.feature.<feature_name>.enabled=true
Затем запустите OpenSearch:
Вариант 2: Включение с помощью переменной окружения
В качестве альтернативы прямому изменению config/jvm.options
, вы можете определить свойства, используя переменную окружения. Это можно сделать с помощью одной команды при запуске OpenSearch или определив переменную с помощью export
.
Чтобы добавить флаги функций в строке при запуске OpenSearch, выполните следующую команду:
OPENSEARCH_JAVA_OPTS="-Dopensearch.experimental.feature.<feature_name>.enabled=true" ./opensearch-3.1.0/bin/opensearch
Если вы хотите определить переменную окружения отдельно перед запуском OpenSearch, выполните следующие команды:
export OPENSEARCH_JAVA_OPTS="-Dopensearch.experimental.feature.<feature_name>.enabled=true"
./bin/opensearch
Включение для разработки OpenSearch
Чтобы включить флаги функций для разработки, вы должны добавить правильные свойства в run.gradle
перед сборкой OpenSearch. См. Руководство для разработчиков для получения информации о том, как использовать Gradle для сборки OpenSearch.
Добавьте следующие свойства в run.gradle
, чтобы включить функцию:
testClusters {
runTask {
testDistribution = 'archive'
if (numZones > 1) numberOfZones = numZones
if (numNodes > 1) numberOfNodes = numNodes
systemProperty 'opensearch.experimental.feature.<feature_name>.enabled', 'true'
}
}
3.12 - Logs
Логи OpenSearch содержат ценную информацию для мониторинга операций кластера и устранения неполадок. Местоположение логов зависит от типа установки:
- В Docker OpenSearch записывает большинство логов в консоль и сохраняет оставшиеся в
opensearch/logs/
. Установка tarball также использует opensearch/logs/
.
- В большинстве установок на Linux OpenSearch записывает логи в
/var/log/opensearch/
.
Логи доступны в формате .log (обычный текст) и .json. Права доступа к логам OpenSearch по умолчанию составляют -rw-r--r--
, что означает, что любой пользователь на узле может их читать. Вы можете изменить это поведение для каждого типа логов в log4j2.properties
, используя опцию filePermissions
. Например, вы можете добавить appender.rolling.filePermissions = rw-r-----
, чтобы изменить права доступа для JSON-сервера логов. Для получения подробной информации см. документацию Log4j 2.
Логи приложений
Для своих логов приложений OpenSearch использует Apache Log4j 2 и его встроенные уровни логирования (от наименее до наиболее серьезных). В следующей таблице описаны настройки логирования.
Настройка |
Тип данных |
Описание |
logger.org.opensearch.discovery |
Строка |
Логгеры принимают встроенные уровни логирования Log4j2: OFF, FATAL, ERROR, WARN, INFO, DEBUG и TRACE. По умолчанию INFO. |
Вместо изменения уровня логирования по умолчанию (logger.level
), вы можете изменить уровень логирования для отдельных модулей OpenSearch:
PUT /_cluster/settings
{
"persistent" : {
"logger.org.opensearch.index.reindex" : "DEBUG"
}
}
Самый простой способ идентифицировать модули — не по логам, которые сокращают путь (например, o.o.i.r), а по исходному коду OpenSearch.
После этого изменения OpenSearch будет генерировать гораздо более подробные логи во время операций повторной индексации:
[2019-10-18T16:52:51,184][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: starting
[2019-10-18T16:52:51,186][DEBUG][o.o.i.r.TransportReindexAction] [node1] executing initial scroll against [some-index]
[2019-10-18T16:52:51,291][DEBUG][o.o.i.r.TransportReindexAction] [node1] scroll returned [3] documents with a scroll id of [DXF1Z==]
[2019-10-18T16:52:51,292][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: got scroll response with [3] hits
[2019-10-18T16:52:51,294][DEBUG][o.o.i.r.WorkerBulkByScrollTaskState] [node1] [1626]: preparing bulk request for [0s]
[2019-10-18T16:52:51,297][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: preparing bulk request
[2019-10-18T16:52:51,299][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: sending [3] entry, [222b] bulk request
[2019-10-18T16:52:51,310][INFO ][o.e.c.m.MetaDataMappingService] [node1] [some-new-index/R-j3adc6QTmEAEb-eAie9g] create_mapping [_doc]
[2019-10-18T16:52:51,383][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: got scroll response with [0] hits
[2019-10-18T16:52:51,384][DEBUG][o.o.i.r.WorkerBulkByScrollTaskState] [node1] [1626]: preparing bulk request for [0s]
[2019-10-18T16:52:51,385][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: preparing bulk request
[2019-10-18T16:52:51,386][DEBUG][o.o.i.r.TransportReindexAction] [node1] [1626]: finishing without any catastrophic failures
[2019-10-18T16:52:51,395][DEBUG][o.o.i.r.TransportReindexAction] [node1] Freed [1] contexts
Уровни DEBUG и TRACE являются чрезвычайно подробными. Если вы включаете один из них для устранения проблемы, отключите его после завершения.
Существуют и другие способы изменения уровней логирования:
- Добавление строк в
opensearch.yml
logger.org.opensearch.index.reindex: debug
Изменение opensearch.yml
имеет смысл, если вы хотите повторно использовать свою конфигурацию логирования для нескольких кластеров или отлаживать проблемы запуска с одним узлом.
- Изменение
log4j2.properties
# Определите новый логгер с уникальным ID для повторной индексации
logger.reindex.name = org.opensearch.index.reindex
# Установите уровень логирования для этого ID
logger.reindex.level = debug
Этот подход является чрезвычайно гибким, но требует знакомства с синтаксисом файла свойств Log4j 2. В общем, другие варианты предлагают более простую конфигурацию.
Если вы изучите файл log4j2.properties
по умолчанию в каталоге конфигурации, вы увидите несколько специфичных для OpenSearch переменных:
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n
appender.rolling_old.fileName = ${sys:opensearch.logs.base_path}${sys:file.separator}${sys:opensearch.logs.cluster_name}.log
${sys:opensearch.logs.base_path}
— это каталог для логов (например, /var/log/opensearch/
).
${sys:opensearch.logs.cluster_name}
— это имя кластера.
${sys:opensearch.logs.node_name}
— это имя узла.
[%node_name]
— это имя узла.
Медленные логи запросов поиска
Новая функция в версии 2.12, OpenSearch предлагает медленные логи на уровне запросов для поиска. Эти логи основываются на пороговых значениях, чтобы определить, что квалифицируется как “медленно”. Все запросы, которые превышают порог, записываются в логи.
Медленные логи запросов поиска включаются динамически через API настроек кластера. В отличие от медленных логов шардов, пороги медленных логов запросов поиска настраиваются для общего времени выполнения запроса. По умолчанию логи отключены (все пороги установлены на -1).
PUT /_cluster/settings
{
"persistent" : {
"cluster.search.request.slowlog.level" : "TRACE",
"cluster.search.request.slowlog.threshold.warn": "10s",
"cluster.search.request.slowlog.threshold.info": "5s",
"cluster.search.request.slowlog.threshold.debug": "2s",
"cluster.search.request.slowlog.threshold.trace": "10ms"
}
}
Строка из opensearch_index_search_slowlog.log
может выглядеть следующим образом:
[2023-10-30T15:47:42,630][TRACE][c.s.r.slowlog] [runTask-0] took[80.8ms], took_millis[80], phase_took_millis[{expand=0, query=39, fetch=22}], total_hits[4 hits], search_type[QUERY_THEN_FETCH], shards[{total: 10, successful: 10, skipped: 0, failed: 0}], source[{"query":{"match_all":{"boost":1.0}}}], id[]
Медленные логи запросов поиска могут занимать значительное место на диске и влиять на производительность, если вы установите низкие пороговые значения. Рассмотрите возможность временного включения их для устранения неполадок или настройки производительности. Чтобы отключить медленные логи запросов поиска, верните все пороги к -1.
Медленные логи шардов
OpenSearch имеет два типа медленных логов шардов, которые помогают выявлять проблемы с производительностью: медленный лог поиска и медленный лог индексации.
Эти логи основываются на пороговых значениях, чтобы определить, что квалифицируется как “медленный” поиск или “медленная” операция индексации. Например, вы можете решить, что запрос считается медленным, если его выполнение занимает более 15 секунд. В отличие от логов приложений, которые настраиваются для модулей, медленные логи настраиваются для индексов. По умолчанию оба лога отключены (все пороги установлены на -1).
В отличие от медленных логов запросов поиска, пороги медленных логов шардов настраиваются для времени выполнения отдельных шардов.
GET <some-index>/_settings?include_defaults=true
{
"indexing": {
"slowlog": {
"reformat": "true",
"threshold": {
"index": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
}
},
"source": "1000",
"level": "TRACE"
}
},
"search": {
"slowlog": {
"level": "TRACE",
"threshold": {
"fetch": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
},
"query": {
"warn": "-1",
"trace": "-1",
"debug": "-1",
"info": "-1"
}
}
}
}
}
Чтобы включить эти логи, увеличьте один или несколько порогов:
PUT <some-index>/_settings
{
"indexing": {
"slowlog": {
"threshold": {
"index": {
"warn": "15s",
"trace": "750ms",
"debug": "3s",
"info": "10s"
}
},
"source": "500",
"level": "INFO"
}
}
}
Пример настройки медленных логов индексации
В этом примере OpenSearch записывает операции индексации, которые занимают 15 секунд или дольше, на уровне WARN, а операции, которые занимают от 10 до 14.x секунд, на уровне INFO. Если вы установите порог в 0 секунд, OpenSearch будет записывать все операции, что может быть полезно для проверки, действительно ли медленные логи включены.
- reformat указывает, следует ли записывать поле _source документа в одной строке (true) или позволить ему занимать несколько строк (false).
- source — это количество символов поля _source документа, которые нужно записать.
- level — это минимальный уровень логирования, который следует включить.
Строка из opensearch_index_indexing_slowlog.log
может выглядеть следующим образом:
node1 | [2019-10-24T19:48:51,012][WARN][i.i.s.index] [node1] [some-index/i86iF5kyTyy-PS8zrdDeAA] took[3.4ms], took_millis[3], type[_doc], id[1], routing[], source[{"title":"Your Name", "Director":"Makoto Shinkai"}]
Медленные логи шардов могут занимать значительное место на диске и влиять на производительность, если вы установите низкие пороговые значения. Рассмотрите возможность временного включения их для устранения неполадок или настройки производительности. Чтобы отключить медленные логи шардов, верните все пороги к -1.
Журналы задач
OpenSearch может записывать время ЦП и использование памяти для N самых затратных по памяти поисковых задач, когда включены потребители ресурсов задач. По умолчанию потребители ресурсов задач будут записывать 10 самых затратных поисковых задач с интервалом в 60 секунд. Эти значения можно настроить в файле opensearch.yml
.
Запись задач включается динамически через API настроек кластера:
PUT _cluster/settings
{
"persistent" : {
"task_resource_consumers.enabled" : "true"
}
}
Включение потребителей ресурсов задач может повлиять на задержку поиска.
После включения журналы будут записываться в файлы logs/opensearch_task_detailslog.json
и logs/opensearch_task_detailslog.log
.
Чтобы настроить интервал записи и количество записываемых поисковых задач, добавьте следующие строки в opensearch.yml
:
# Количество затратных поисковых задач для записи
cluster.task.consumers.top_n.size: 100
# Интервал записи
cluster.task.consumers.top_n.frequency: 30s
Журналы устаревания
Журналы устаревания фиксируют, когда клиенты делают устаревшие вызовы API к вашему кластеру. Эти журналы могут помочь вам выявить и исправить проблемы до обновления до новой основной версии. По умолчанию OpenSearch записывает устаревшие вызовы API на уровне WARN, что хорошо подходит для почти всех случаев использования. При необходимости настройте logger.deprecation.level
, используя _cluster/settings
, opensearch.yml
или log4j2.properties
.
4 - Сравнение ОС
Совместимость OpenSearch и OpenSearch Dashboards
Совместимость OpenSearch и OpenSearch Dashboards
OpenSearch и OpenSearch Dashboards совместимы с Red Hat Enterprise Linux (RHEL) и дистрибутивами Linux на базе Debian, которые используют systemd, такими как Amazon Linux и Ubuntu Long-Term Support (LTS). Хотя OpenSearch и OpenSearch Dashboards должны работать на большинстве дистрибутивов Linux, мы тестируем только подмножество из них.
Поддерживаемые операционные системы
Следующая таблица перечисляет версии операционных систем, которые мы в настоящее время тестируем:
ОС |
Версия |
Rocky Linux |
8 |
Alma Linux |
8 |
Amazon Linux |
2/2023 |
Ubuntu |
24.04 |
Windows Server |
2019 |
Журнал изменений
Следующая таблица перечисляет изменения, внесенные в совместимость операционных систем.
Дата |
Проблема |
PR |
Подробности |
2025-02-06 |
opensearch-build Issue 5270 |
PR 9165 |
Удаление Ubuntu 20.04 |
2024-07-23 |
opensearch-build Issue 4379 |
PR 7821 |
Удаление CentOS7 |
2024-03-08 |
opensearch-build Issue 4573 |
PR 6637 |
Удаление CentOS8, добавление Almalinux8/Rockylinux8 и удаление Ubuntu 16.04/18.04, так как мы в настоящее время тестируем только на 20.04 |
2023-06-06 |
documentation-website Issue 4217 |
PR 4218 |
Создание матрицы поддержки |
5 - Настройка OpenSearch Dashboards
OpenSearch Dashboards использует файл конфигурации opensearch_dashboards.yml
OpenSearch Dashboards использует файл конфигурации opensearch_dashboards.yml
для чтения настроек при запуске кластера. Вы можете найти opensearch_dashboards.yml
по следующему пути: /usr/share/opensearch-dashboards/config/opensearch_dashboards.yml
(Docker) или /etc/opensearch-dashboards/opensearch_dashboards.yml
(большинство дистрибутивов Linux) на каждом узле.
Для получения информации о настройках OpenSearch Dashboards ознакомьтесь с образцом файла opensearch_dashboards.yml
.
6 - Upgrading OpenSearch
OpenSearch использует семантическое версионирование, что означает, что разрушающие изменения вводятся только между основными версиями.
Проект OpenSearch регулярно выпускает обновления, которые включают новые функции, улучшения и исправления ошибок. OpenSearch использует семантическое версионирование, что означает, что разрушающие изменения вводятся только между основными версиями. Чтобы узнать о предстоящих функциях и исправлениях, ознакомьтесь с дорожной картой проекта OpenSearch на GitHub. Чтобы просмотреть список предыдущих релизов или узнать больше о том, как OpenSearch использует версионирование, смотрите раздел “График релизов и политика обслуживания”.
Мы понимаем, что пользователи заинтересованы в обновлении OpenSearch, чтобы воспользоваться последними функциями, и мы будем продолжать расширять эти документы по обновлению и миграции, чтобы охватить дополнительные темы, такие как обновление OpenSearch Dashboards и сохранение пользовательских конфигураций, например, для плагинов.
Если вы хотите, чтобы был добавлен конкретный процесс или хотите внести свой вклад, создайте задачу на GitHub. Ознакомьтесь с Руководством для участников, чтобы узнать, как вы можете помочь.
Учет рабочих процессов
Потратьте время на планирование процесса перед внесением каких-либо изменений в ваш кластер. Например, рассмотрите следующие вопросы:
- Сколько времени займет процесс обновления?
- Если ваш кластер используется в производственной среде, насколько критично время простоя?
- У вас есть инфраструктура для развертывания нового кластера в тестовой или разработческой среде перед его переводом в эксплуатацию, или вам нужно обновить производственные узлы напрямую?
Ответы на такие вопросы помогут вам определить, какой путь обновления будет наиболее подходящим для вашей среды.
Минимально вы должны:
- Ознакомиться с разрушающими изменениями.
- Ознакомиться с матрицами совместимости инструментов OpenSearch.
- Ознакомиться с совместимостью плагинов.
- Создать резервные копии файлов конфигурации.
- Создать снимок.
Остановить любую несущественную индексацию перед началом процедуры обновления, чтобы устранить ненужные требования к ресурсам кластера во время выполнения обновления.
Ознакомление с разрушающими изменениями
Важно определить, как новая версия OpenSearch будет интегрироваться с вашей средой. Ознакомьтесь с разделом “Разрушающие изменения” перед началом любых процедур обновления, чтобы определить, нужно ли вам вносить изменения в ваш рабочий процесс. Например, компоненты, находящиеся выше или ниже по потоку, могут потребовать модификации для совместимости с изменением API (см. мета-проблему #2589).
Ознакомление с матрицами совместимости инструментов OpenSearch
Если ваш кластер OpenSearch взаимодействует с другими службами в вашей среде, такими как Logstash или Beats, вам следует проверить матрицы совместимости инструментов OpenSearch, чтобы определить, нужно ли обновлять другие компоненты.
Ознакомление с совместимостью плагинов
Проверьте плагины, которые вы используете, чтобы определить их совместимость с целевой версией OpenSearch. Официальные плагины проекта OpenSearch можно найти в репозитории проекта OpenSearch на GitHub. Если вы используете сторонние плагины, вам следует ознакомиться с документацией для этих плагинов, чтобы определить, совместимы ли они.
Перейдите в раздел “Доступные плагины”, чтобы увидеть справочную таблицу, которая подчеркивает совместимость версий для встроенных плагинов OpenSearch.
Основные, второстепенные и патч-версии плагинов должны соответствовать основным, второстепенным и патч-версиям OpenSearch для обеспечения совместимости. Например, версии плагинов 2.3.0.x работают только с OpenSearch 2.3.0.
Резервное копирование файлов конфигурации
Снизьте риск потери данных, создав резервные копии любых важных файлов перед началом обновления. Обычно эти файлы будут находиться в одной из двух директорий:
opensearch/config
opensearch-dashboards/config
Некоторые примеры включают opensearch.yml
, opensearch_dashboards.yml
, файлы конфигурации плагинов и сертификаты TLS. Как только вы определите, какие файлы хотите сохранить, скопируйте их на удаленное хранилище для безопасности.
Если вы используете функции безопасности, обязательно ознакомьтесь с разделом “Предостережение” для получения информации о резервном копировании и восстановлении ваших настроек безопасности.
Создание снимка
Рекомендуется создать резервную копию состояния вашего кластера и индексов с помощью снимков. Снимки, сделанные перед обновлением, могут быть использованы в качестве точек восстановления, если вам нужно будет откатить кластер к его оригинальной версии.
Вы можете дополнительно снизить риск потери данных, храня ваши снимки на внешнем хранилище, таком как смонтированная файловая система сети (NFS) или облачное хранилище, как указано в следующей таблице.
Местоположение репозитория снимков |
Требуемый плагин OpenSearch |
Amazon Simple Storage Service (Amazon S3) |
repository-s3 |
Google Cloud Storage (GCS) |
repository-gcs |
Apache Hadoop Distributed File System (HDFS) |
repository-hdfs |
Microsoft Azure Blob Storage |
repository-azure |
Методы обновления
Выберите подходящий метод для обновления вашего кластера до новой версии OpenSearch в зависимости от ваших требований:
- Постепенное обновление (rolling upgrade) обновляет узлы по одному без остановки кластера.
- Обновление с перезапуском кластера (cluster restart upgrade) обновляет службы, пока кластер остановлен.
Обновления, охватывающие более одной основной версии OpenSearch, потребуют дополнительных усилий из-за необходимости повторной индексации. Для получения дополнительной информации обратитесь к API повторной индексации. См. таблицу совместимости индексов, включенную позже в этом руководстве, для помощи в планировании миграции данных.
Постепенное обновление
Постепенное обновление — отличный вариант, если вы хотите сохранить работоспособность вашего кластера на протяжении всего процесса. Данные могут продолжать поступать, анализироваться и запрашиваться, пока узлы поочередно останавливаются, обновляются и перезапускаются. Вариация постепенного обновления, называемая “замена узла” (node replacement), следует точно такому же процессу, за исключением того, что хосты и контейнеры не повторно используются для нового узла. Вы можете выполнить замену узла, если также обновляете базовые хосты.
Узлы OpenSearch не могут присоединиться к кластеру, если менеджер кластера работает на более новой версии OpenSearch, чем узел, запрашивающий членство. Чтобы избежать этой проблемы, обновляйте узлы, имеющие право на управление кластером, последними.
Смотрите раздел “Постепенное обновление” для получения дополнительной информации о процессе.
Обновление с перезапуском кластера
Администраторы OpenSearch могут выбрать выполнение обновления с перезапуском кластера по нескольким причинам, например, если администратор не хочет проводить обслуживание работающего кластера или если кластер мигрируется в другую среду.
В отличие от постепенного обновления, при котором только один узел отключен в любой момент времени, обновление с перезапуском кластера требует остановки OpenSearch и OpenSearch Dashboards на всех узлах кластера перед продолжением. После остановки узлов устанавливается новая версия OpenSearch. Затем OpenSearch запускается, и кластер загружается на новую версию.
Совместимость
Узлы OpenSearch совместимы с другими узлами OpenSearch, работающими на любой другой минорной версии в рамках одного основного релиза. Например, версия 1.1.0 совместима с 1.3.7, поскольку они являются частью одной основной версии (1.x). Кроме того, узлы OpenSearch и индексы обратно совместимы с предыдущей основной версией. Это означает, что, например, индекс, созданный узлом OpenSearch, работающим на любой версии 1.x, может быть восстановлен из снимка в кластер OpenSearch, работающий на любой версии 2.x.
Узлы OpenSearch 1.x совместимы с узлами, работающими на Elasticsearch 7.x, но продолжительность работы смешанной версии не должна превышать период обновления кластера.
Совместимость индексов определяется версией Apache Lucene, которая создала индекс. Если индекс был создан кластером OpenSearch, работающим на версии 1.0.0, то этот индекс может использоваться любым другим кластером OpenSearch, работающим до последнего релиза 1.x или 2.x. См. таблицу совместимости индексов для версий Lucene, работающих в OpenSearch 1.0.0 и более поздних версиях, а также в Elasticsearch 6.8 и более поздних версиях.
Если ваш путь обновления охватывает более одной основной версии и вы хотите сохранить существующие индексы, вы можете использовать API повторной индексации (Reindex API), чтобы сделать ваши индексы совместимыми с целевой версией OpenSearch перед обновлением. Например, если ваш кластер в настоящее время работает на Elasticsearch 6.8 и вы хотите обновиться до OpenSearch 2.x, вам сначала нужно обновиться до OpenSearch 1.x, заново создать ваши индексы с помощью API повторной индексации и, наконец, обновиться до 2.x. Одной из альтернатив повторной индексации является повторное извлечение данных из источника, например, воспроизведение потока данных или извлечение данных из базы данных.
Справочная таблица совместимости индексов
Если вы планируете сохранить старые индексы после обновления версии OpenSearch, вам может потребоваться повторная индексация или повторное извлечение данных. Обратитесь к следующей таблице для версий Lucene в недавних релизах OpenSearch и Elasticsearch.
Версия Lucene |
Версия OpenSearch |
Версия Elasticsearch |
9.10.0 |
2.14.0 |
|
2.13.0 |
|
8.13 |
9.9.2 |
2.12.0 |
— |
9.7.0 |
2.11.1 |
|
2.9.0 |
8.9.0 |
|
9.6.0 |
2.8.0 |
8.8.0 |
9.5.0 |
2.7.0 |
|
2.6.0 |
8.7.0 |
|
9.4.2 |
2.5.0 |
|
2.4.1 |
8.6 |
|
9.4.1 |
2.4.0 |
— |
9.4.0 |
— |
8.5 |
9.3.0 |
2.3.0 |
|
2.2.x |
8.4 |
|
9.2.0 |
2.1.0 |
8.3 |
9.1.0 |
2.0.x |
8.2 |
9.0.0 |
— |
8.1 |
8.0 |
|
|
8.11.1 |
— |
7.17 |
8.10.1 |
1.3.x |
|
1.2.x |
7.16 |
|
8.9.0 |
1.1.0 |
7.15 |
7.14 |
|
|
8.8.2 |
1.0.0 |
7.13 |
8.8.0 |
— |
7.12 |
8.7.0 |
— |
7.11 |
7.10 |
|
|
8.6.2 |
— |
7.9 |
8.5.1 |
— |
7.8 |
7.7 |
|
|
8.4.0 |
— |
7.6 |
8.3.0 |
— |
7.5 |
8.2.0 |
— |
7.4 |
8.1.0 |
— |
7.3 |
8.0.0 |
— |
7.2 |
7.1 |
|
|
7.7.3 |
— |
6.8 |
Тире (—) указывает на то, что нет версии продукта, содержащей указанную версию Apache Lucene.
6.1 - Приложение по обновлениям
Используйте приложение по обновлениям, чтобы найти дополнительную вспомогательную документацию, такую как лабораторные работы, которые включают примеры API-запросов и конфигурационных файлов для дополнения соответствующей документации по процессам.
Конкретные процедуры, изложенные в разделе приложения, могут быть использованы различными способами:
- Новые пользователи OpenSearch могут использовать шаги и примеры ресурсов, которые мы предоставляем, чтобы узнать о конфигурации и использовании OpenSearch и OpenSearch Dashboards.
- Системные администраторы, работающие с кластерами OpenSearch, могут использовать предоставленные примеры для симуляции обслуживания кластера в тестовой среде перед применением любых изменений к рабочей нагрузке в производственной среде.
Если вы хотите запросить конкретную тему, пожалуйста, оставьте комментарий по вопросу #2830 в проекте OpenSearch на GitHub.
Конкретные команды, включенные в это приложение, служат примерами взаимодействия с API OpenSearch и основным хостом, чтобы продемонстрировать шаги, описанные в связанных документах по процессу обновления. Цель состоит не в том, чтобы быть чрезмерно предписывающим, а в том, чтобы добавить контекст для пользователей, которые новы в OpenSearch и хотят увидеть практические примеры.
6.2 - Постепенное обновление
Постепенные обновления, иногда называемые обновлениями замены узлов, могут выполняться на работающих кластерах с практически нулевым временем простоя.
Постепенные обновления, иногда называемые “обновлениями замены узлов”, могут выполняться на работающих кластерах с практически нулевым временем простоя. Узлы поочередно останавливаются и обновляются на месте. В качестве альтернативы узлы могут быть остановлены и заменены, один за другим, хостами, работающими на новой версии. В процессе вы можете продолжать индексировать и запрашивать данные в вашем кластере.
Этот документ служит общим обзором процедуры постепенного обновления, не зависящим от платформы. Для конкретных примеров команд, скриптов и файлов конфигурации смотрите Приложение.
Подготовка к обновлению
Ознакомьтесь с разделом “Обновление OpenSearch” для получения рекомендаций по резервному копированию ваших файлов конфигурации и созданию снимка состояния кластера и индексов перед внесением каких-либо изменений в ваш кластер OpenSearch.
Важно: Узлы OpenSearch не могут быть понижены. Если вам нужно отменить обновление, вам потребуется выполнить новую установку OpenSearch и восстановить кластер из снимка. Сделайте снимок и сохраните его в удаленном репозитории перед началом процедуры обновления.
Выполнение обновления
- Проверьте состояние вашего кластера OpenSearch перед началом. Вам следует решить любые проблемы с индексами или распределением шардов перед обновлением, чтобы гарантировать сохранность ваших данных. Статус “green” указывает на то, что все первичные и реплика-шарды распределены. См. раздел “Состояние кластера” для получения дополнительной информации. Следующая команда запрашивает конечную точку API _cluster/health:
GET "/_cluster/health?pretty"
Ответ должен выглядеть примерно так:
{
"cluster_name": "opensearch-dev-cluster",
"status": "green",
"timed_out": false,
"number_of_nodes": 4,
"number_of_data_nodes": 4,
"active_primary_shards": 1,
"active_shards": 4,
"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
}
- Отключите репликацию шардов, чтобы предотвратить создание реплик шардов, пока узлы отключаются. Это остановит перемещение сегментов индекса Lucene на узлах в вашем кластере. Вы можете отключить репликацию шардов, запросив конечную точку API _cluster/settings:
PUT "/_cluster/settings?pretty"
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
Ответ должен выглядеть примерно так:
{
"acknowledged": true,
"persistent": {
"cluster": {
"routing": {
"allocation": {
"enable": "primaries"
}
}
}
},
"transient": {}
}
- Выполните операцию сброса на кластере, чтобы зафиксировать записи журнала транзакций в индексе Lucene:
Ответ должен выглядеть примерно так:
{
"_shards": {
"total": 4,
"successful": 4,
"failed": 0
}
}
-
Ознакомьтесь с вашим кластером и определите первый узел для обновления. Узлы, имеющие право на управление кластером, должны обновляться последними, поскольку узлы OpenSearch могут присоединиться к кластеру с управляющими узлами, работающими на более старой версии, но не могут присоединиться к кластеру, в котором все управляющие узлы работают на более новой версии.
-
Запросите конечную точку _cat/nodes
, чтобы определить, какой узел был повышен до управляющего узла кластера. Следующая команда включает дополнительные параметры запроса, которые запрашивают только имя, версию, роль узла и заголовки master. Обратите внимание, что версии OpenSearch 1.x используют термин “master”, который был устаревшим и заменен на “cluster_manager” в OpenSearch 2.x и более поздних версиях.
GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t
Ответ должен выглядеть примерно так:
name version node.role master
os-node-01 7.10.2 dimr -
os-node-04 7.10.2 dimr -
os-node-03 7.10.2 dimr -
os-node-02 7.10.2 dimr *
-
Остановите узел, который вы обновляете. Не удаляйте объем, связанный с контейнером, когда вы удаляете контейнер. Новый контейнер OpenSearch будет использовать существующий объем. Удаление объема приведет к потере данных.
-
Подтвердите, что связанный узел был исключен из кластера, запросив конечную точку API _cat/nodes
:
GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t
Ответ должен выглядеть примерно так:
name version node.role master
os-node-02 7.10.2 dimr *
os-node-04 7.10.2 dimr -
os-node-03 7.10.2 dimr -
Узел os-node-01
больше не отображается, потому что контейнер был остановлен и удален.
-
Разверните новый контейнер, работающий на желаемой версии OpenSearch и подключенный к тому же объему, что и удаленный контейнер.
-
Запросите конечную точку _cat/nodes
после того, как OpenSearch запустится на новом узле, чтобы подтвердить, что он присоединился к кластеру:
GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t
Ответ должен выглядеть примерно так:
name version node.role master
os-node-02 7.10.2 dimr *
os-node-04 7.10.2 dimr -
os-node-01 7.10.2 dimr -
os-node-03 7.10.2 dimr -
В примере вывода новый узел OpenSearch сообщает о работающей версии 7.10.2 в кластер. Это результат compatibility.override_main_response_version
, который используется при подключении к кластеру с устаревшими клиентами, проверяющими версию. Вы можете вручную подтвердить версию узла, вызвав конечную точку API /_nodes
, как в следующей команде. Замените <nodeName>
на имя вашего узла. См. раздел “API узлов”, чтобы узнать больше.
GET "/_nodes/<nodeName>?pretty=true" | jq -r '.nodes | .[] | "\(.name) v\(.version)"'
Подтвердите, что ответ выглядит примерно так:
- Включите репликацию шардов снова:
PUT "/_cluster/settings?pretty"
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
Ответ должен выглядеть примерно так:
{
"acknowledged": true,
"persistent": {
"cluster": {
"routing": {
"allocation": {
"enable": "all"
}
}
}
},
"transient": {}
}
- Подтвердите, что кластер здоров:
GET "/_cluster/health?pretty"
Ответ должен выглядеть примерно так:
{
"cluster_name": "opensearch-dev-cluster",
"status": "green",
"timed_out": false,
"number_of_nodes": 4,
"number_of_data_nodes": 4,
"discovered_master": true,
"active_primary_shards": 1,
"active_shards": 4,
"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
}
- Повторите шаги 2–11 для каждого узла в вашем кластере. Не забудьте обновить узел управляющего кластера последним. После замены последнего узла запросите конечную точку
_cat/nodes
, чтобы подтвердить, что все узлы присоединились к кластеру. Кластер теперь загружен на новую версию OpenSearch. Вы можете проверить версию кластера, запросив конечную точку API _cat/nodes
:
GET "/_cat/nodes?v&h=name,version,node.role,master" | column -t
Ответ должен выглядеть примерно так:
name version node.role master
os-node-04 1.3.7 dimr -
os-node-02 1.3.7 dimr *
os-node-01 1.3.7 dimr -
os-node-03 1.3.7 dimr -
Обновление завершено, и вы можете начать пользоваться последними функциями и исправлениями!
Пошаговая перезагрузка
Пошаговая перезагрузка следует той же пошаговой процедуре, что и пошаговое обновление, за исключением обновления самих узлов. Во время пошаговой перезагрузки узлы перезагружаются по одному — обычно для применения изменений конфигурации, обновления сертификатов или выполнения системного обслуживания — без нарушения доступности кластера.
Чтобы выполнить пошаговую перезагрузку, следуйте шагам, описанным в разделе “Пошаговое обновление”, исключая шаги, связанные с обновлением бинарного файла OpenSearch или образа контейнера:
-
Проверьте состояние кластера
Убедитесь, что статус кластера зеленый и все шардов назначены.
(Шаг 1 пошагового обновления)
-
Отключите перераспределение шардов
Предотвратите попытки OpenSearch перераспределить шардов, пока узлы находятся в оффлайне.
(Шаг 2 пошагового обновления)
-
Сбросьте журналы транзакций
Зафиксируйте недавние операции в Lucene, чтобы сократить время восстановления.
(Шаг 3 пошагового обновления)
-
Просмотрите и определите следующий узел для перезагрузки
Убедитесь, что вы перезагрузите текущий узел-менеджер кластера последним.
(Шаг 4 пошагового обновления)
-
Проверьте, какой узел является текущим менеджером кластера
Используйте API _cat/nodes, чтобы определить, какой узел является текущим активным менеджером кластера.
(Шаг 5 пошагового обновления)
-
Остановите узел
Корректно завершите работу узла. Не удаляйте связанный объем данных.
(Шаг 6 пошагового обновления)
-
Подтвердите, что узел покинул кластер
Используйте _cat/nodes, чтобы убедиться, что он больше не указан в списке.
(Шаг 7 пошагового обновления)
-
Перезагрузите узел
Запустите тот же узел (тот же бинарный файл/версия/конфигурация) и дайте ему повторно присоединиться к кластеру.
(Шаг 8 пошагового обновления — без обновления бинарного файла)
-
Проверьте, что перезагруженный узел повторно присоединился
Проверьте _cat/nodes, чтобы подтвердить, что узел присутствует и работает корректно.
(Шаг 9 пошагового обновления)
-
Включите перераспределение шардов
Восстановите полную возможность перемещения шардов.
(Шаг 10 пошагового обновления)
-
Подтвердите, что состояние кластера зеленое
Проверьте стабильность перед перезагрузкой следующего узла.
(Шаг 11 пошагового обновления)
-
Повторите процесс для всех остальных узлов
Перезагрузите каждый узел по одному. Если узел подходит для роли менеджера кластера, перезагрузите его последним.
(Шаг 12 пошагового обновления — снова без шага обновления)
Сохраняя кворум и перезагружая узлы последовательно, пошаговые перезагрузки обеспечивают нулевое время простоя и полную непрерывность данных.
6.3 - Лаборатория последовательного обновления
Вы можете следовать этим шагам на своем совместимом хосте, чтобы воссоздать то же состояние кластера, которое использовался в проекте OpenSearch для тестирования пошаговых обновлений.
Это упражнение полезно, если вы хотите протестировать процесс обновления в среде разработки.
Шаги, использованные в этой лаборатории, были проверены на произвольно выбранном экземпляре Amazon Elastic Compute Cloud (Amazon EC2) t2.large с использованием ядра Amazon Linux 2 версии Linux 5.10.162-141.675.amzn2.x86_64 и Docker версии 20.10.17, сборка 100c701. Экземпляр был предоставлен с прикрепленным корневым томом Amazon EBS объемом 20 GiB gp2. Эти спецификации включены для информационных целей и не представляют собой аппаратные требования для OpenSearch или OpenSearch Dashboards.
Ссылки в этой процедуре на путь $HOME на хост-машине представлены символом тильда (“~”), чтобы сделать инструкции более переносимыми. Если вы предпочитаете указывать абсолютный путь, измените пути томов, определенные в upgrade-demo-cluster.sh
, и используемые в соответствующих командах в этом документе, чтобы отразить вашу среду.
Настройка окружения
Следуя шагам в этом документе, вы определите несколько ресурсов Docker, включая контейнеры, тома и выделенную сеть Docker, с помощью предоставленного нами скрипта. Вы можете очистить свою среду с помощью следующей команды, если хотите перезапустить процесс:
docker container stop $(docker container ls -aqf name=os-); \
docker container rm $(docker container ls -aqf name=os-); \
docker volume rm -f $(docker volume ls -q | egrep 'data-0|repo-0'); \
docker network rm opensearch-dev-net
Эта команда удаляет контейнеры с именами, соответствующими регулярному выражению os-, тома данных, соответствующие data-0 и repo-0*, а также сеть Docker с именем opensearch-dev-net. Если у вас есть другие ресурсы Docker, работающие на вашем хосте, вам следует просмотреть и изменить команду, чтобы избежать случайного удаления других ресурсов. Эта команда не отменяет изменения конфигурации хоста, такие как поведение обмена памяти.
После выбора хоста вы можете начать лабораторию:
-
Установите соответствующую версию Docker Engine для вашего дистрибутива Linux и архитектуры системы.
-
Настройте важные системные параметры на вашем хосте:
- Отключите обмен и пейджинг памяти на хосте для повышения производительности:
- Увеличьте количество доступных для OpenSearch карт памяти. Откройте файл конфигурации sysctl для редактирования. Эта команда использует текстовый редактор vim, но вы можете использовать любой доступный текстовый редактор:
sudo vim /etc/sysctl.conf
- Добавьте следующую строку в
/etc/sysctl.conf
:
- Сохраните и выйдите. Если вы используете текстовые редакторы vi или vim, сохраните и выйдите, переключившись в командный режим и введя
:wq!
или ZZ
.
- Примените изменение конфигурации:
-
Создайте новую директорию с именем deploy
в вашем домашнем каталоге, затем перейдите в нее. Вы будете использовать ~/deploy
для путей в скрипте развертывания, конфигурационных файлах и TLS-сертификатах:
mkdir ~/deploy && cd ~/deploy
-
Скачайте upgrade-demo-cluster.sh
из репозитория документации проекта OpenSearch:
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/upgrade-demo-cluster.sh
-
Запустите скрипт без каких-либо изменений, чтобы развернуть четыре контейнера, работающих с OpenSearch, и один контейнер, работающий с OpenSearch Dashboards, с пользовательскими самоподписанными TLS-сертификатами и заранее определенным набором внутренних пользователей:
sh upgrade-demo-cluster.sh
- Проверьте, что контейнеры были успешно запущены:
Пример ответа
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e5218c8397d opensearchproject/opensearch-dashboards:1.3.7 "./opensearch-dashbo…" 24 seconds ago Up 22 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp os-dashboards-01
cb5188308b21 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 25 seconds ago Up 24 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9204->9200/tcp, :::9204->9200/tcp, 0.0.0.0:9604->9600/tcp, :::9604->9600/tcp os-node-04
71b682aa6671 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 26 seconds ago Up 25 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9203->9200/tcp, :::9203->9200/tcp, 0.0.0.0:9603->9600/tcp, :::9603->9600/tcp os-node-03
f894054a9378 opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 27 seconds ago Up 26 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9202->9200/tcp, :::9202->9200/tcp, 0.0.0.0:9602->9600/tcp, :::9602->9600/tcp os-node-02
2e9c91c959cd opensearchproject/opensearch:1.3.7 "./opensearch-docker…" 28 seconds ago Up 27 seconds 9300/tcp, 9650/tcp, 0.0.0.0:9201->9200/tcp, :::9201->9200/tcp, 0.0.0.0:9601->9600/tcp, :::9601->9600/tcp os-node-01
- Время, необходимое OpenSearch для инициализации кластера, варьируется в зависимости от производительности хоста. Вы можете следить за журналами контейнеров, чтобы увидеть, что делает OpenSearch в процессе загрузки:
- Введите следующую команду, чтобы отобразить журналы для контейнера os-node-01 в терминальном окне:
docker logs -f os-node-01
- Вы увидите запись в журнале, похожую на следующий пример, когда узел будет готов:
Пример
[INFO ][o.o.s.c.ConfigurationRepository] [os-node-01] Node 'os-node-01' initialized
- Нажмите
Ctrl+C
, чтобы остановить просмотр журналов контейнера и вернуться к командной строке.
- Используйте cURL для запроса к OpenSearch REST API. В следующей команде os-node-01 запрашивается, отправляя запрос на порт 9201 хоста, который сопоставлен с портом 9200 на контейнере:
curl -s "https://localhost:9201" -ku admin:<custom-admin-password>
Пример ответа
{
"name" : "os-node-01",
"cluster_name" : "opensearch-dev-cluster",
"cluster_uuid" : "g1MMknuDRuuD9IaaNt56KA",
"version" : {
"distribution" : "opensearch",
"number" : "1.3.7",
"build_type" : "tar",
"build_hash" : "db18a0d5a08b669fb900c00d81462e221f4438ee",
"build_date" : "2022-12-07T22:59:20.186520Z",
"build_snapshot" : false,
"lucene_version" : "8.10.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "The OpenSearch Project: https://opensearch.org/"
}
Совет: Используйте опцию -s
с curl
, чтобы скрыть индикатор прогресса и сообщения об ошибках.
Добавление данных и настройка безопасности OpenSearch
Теперь, когда кластер OpenSearch работает, пришло время добавить данные и настроить некоторые параметры безопасности OpenSearch. Данные, которые вы добавите, и настройки, которые вы сконфигурируете, будут проверены снова после завершения обновления версии.
Этот раздел можно разбить на две части:
- Индексация данных с помощью REST API
- Добавление данных с использованием OpenSearch Dashboards
Индексация данных с помощью REST API
- Скачайте файл с образцом сопоставления полей:
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce-field_mappings.json
- Затем скачайте объемные данные, которые вы будете загружать в этот индекс:
wget https://raw.githubusercontent.com/opensearch-project/documentation-website/main/assets/examples/ecommerce.ndjson
- Используйте API создания индекса, чтобы создать индекс, используя сопоставления, определенные в
ecommerce-field_mappings.json
:
curl -H "Content-Type: application/json" \
-X PUT "https://localhost:9201/ecommerce?pretty" \
--data-binary "@ecommerce-field_mappings.json" \
-ku admin:<custom-admin-password>
Пример ответа
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "ecommerce"
}
- Используйте Bulk API, чтобы добавить данные в новый индекс
ecommerce
из ecommerce.ndjson
:
curl -H "Content-Type: application/x-ndjson" \
-X PUT "https://localhost:9201/ecommerce/_bulk?pretty" \
--data-binary "@ecommerce.ndjson" \
-ku admin:<custom-admin-password>
Пример ответа (усеченный)
{
"took": 123,
"errors": false,
"items": [
{
"index": {
"_index": "ecommerce",
"_id": "1",
"_version": 1,
"result": "created",
"status": 201,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
},
...
]
}
5. Запрос поиска также может подтвердить, что данные были успешно проиндексированы. Следующий запрос возвращает количество документов, в которых ключевое слово `customer_first_name` равно `Sonya`:
```bash
curl -H 'Content-Type: application/json' \
-X GET "https://localhost:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \
-d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \
-ku admin:<custom-admin-password>
Пример ответа
{
"hits" : {
"total" : {
"value" : 106,
"relation" : "eq"
}
}
}
Добавление данных с использованием OpenSearch Dashboards
-
Откройте веб-браузер и перейдите на порт 5601 вашего Docker-хоста (например, https://HOST_ADDRESS:5601). Если OpenSearch Dashboards работает и у вас есть сетевой доступ к хосту из вашего клиентского браузера, вы будете перенаправлены на страницу входа.
- Если веб-браузер выдает ошибку из-за того, что TLS-сертификаты самоподписанные, вам может потребоваться обойти проверки сертификатов в вашем браузере. Обратитесь к документации браузера для получения информации о том, как обойти проверки сертификатов. Общее имя (CN) для каждого сертификата генерируется в соответствии с именами контейнеров и узлов для внутрикластерной связи, поэтому подключение к хосту из браузера все равно приведет к предупреждению “недействительное CN”.
-
Введите имя пользователя по умолчанию (admin) и пароль (admin).
-
На главной странице OpenSearch Dashboards выберите Добавить образцы данных.
-
В разделе Образцы веб-журналов выберите Добавить данные.
- (Необязательно) Выберите Просмотреть данные, чтобы просмотреть [Логи] панель веб-трафика.
-
Выберите кнопку меню, чтобы открыть панель навигации, затем перейдите в Безопасность > Внутренние пользователи.
-
Выберите Создать внутреннего пользователя.
-
Укажите имя пользователя и пароль.
-
В поле Роль в бэкенде введите admin
.
-
Выберите Создать.
Резервное копирование важных файлов
Всегда создавайте резервные копии перед внесением изменений в ваш кластер, особенно если кластер работает в производственной среде.
В этом разделе вы будете:
- Регистрировать репозиторий снимков.
- Создавать снимок.
- Резервировать настройки безопасности.
Регистрация репозитория снимков
Зарегистрируйте репозиторий, используя том, который был смонтирован с помощью upgrade-demo-cluster.sh
:
curl -H 'Content-Type: application/json' \
-X PUT "https://localhost:9201/_snapshot/snapshot-repo?pretty" \
-d '{"type":"fs","settings":{"location":"/usr/share/opensearch/snapshots"}}' \
-ku admin:<custom-admin-password>
Пример ответа
{
"acknowledged" : true
}
Необязательно: Выполните дополнительную проверку, чтобы убедиться, что репозиторий был успешно создан:
curl -H 'Content-Type: application/json' \
-X POST "https://localhost:9201/_snapshot/snapshot-repo/_verify?timeout=0s&master_timeout=50s&pretty" \
-ku admin:<custom-admin-password>
Пример ответа
{
"nodes" : {
"UODBXfAlRnueJ67grDxqgw" : {
"name" : "os-node-03"
},
"14I_OyBQQXio8nmk0xsVcQ" : {
"name" : "os-node-04"
},
"tQp3knPRRUqHvFNKpuD2vQ" : {
"name" : "os-node-02"
},
"rPe8D6ssRgO5twIP00wbCQ" : {
"name" : "os-node-01"
}
}
}
Создание снимка
Снимки — это резервные копии индексов и состояния кластера. См. раздел Снимки, чтобы узнать больше.
Создайте снимок, который включает все индексы и состояние кластера:
curl -H 'Content-Type: application/json' \
-X PUT "https://localhost:9201/_snapshot/snapshot-repo/cluster-snapshot-v137?wait_for_completion=true&pretty" \
-ku admin:<custom-admin-password>
Пример ответа
{
"snapshot" : {
"snapshot" : "cluster-snapshot-v137",
"uuid" : "-IYB8QNPShGOTnTtMjBjNg",
"version_id" : 135248527,
"version" : "1.3.7",
"indices" : [
"opensearch_dashboards_sample_data_logs",
".opendistro_security",
"security-auditlog-2023.02.27",
".kibana_1",
".kibana_92668751_admin_1",
"ecommerce",
"security-auditlog-2023.03.06",
"security-auditlog-2023.02.28",
"security-auditlog-2023.03.07"
],
"data_streams" : [ ],
"include_global_state" : true,
"state" : "SUCCESS",
"start_time" : "2023-03-07T18:33:00.656Z",
"start_time_in_millis" : 1678213980656,
"end_time" : "2023-03-07T18:33:01.471Z",
"end_time_in_millis" : 1678213981471,
"duration_in_millis" : 815,
"failures" : [ ],
"shards" : {
"total" : 9,
"failed" : 0,
"successful" : 9
}
}
}
Резервное копирование настроек безопасности
Администраторы кластера могут изменять настройки безопасности OpenSearch, используя любой из следующих методов:
- Изменение YAML-файлов и запуск
securityadmin.sh
- Выполнение REST API запросов с использованием сертификата администратора
- Внесение изменений с помощью OpenSearch Dashboards
Независимо от выбранного метода, OpenSearch Security записывает вашу конфигурацию в специальный системный индекс, называемый .opendistro_security
. Этот системный индекс сохраняется в процессе обновления и также сохраняется в созданном вами снимке. Однако восстановление системных индексов требует повышенного доступа, предоставленного сертификатом администратора. Чтобы узнать больше, смотрите разделы Системные индексы и Настройка TLS-сертификатов.
Вы также можете экспортировать настройки безопасности OpenSearch в виде YAML-файлов, запустив securityadmin.sh
с опцией -backup
на любом из ваших узлов OpenSearch. Эти YAML-файлы могут быть использованы для повторной инициализации индекса .opendistro_security
с вашей существующей конфигурацией. Следующие шаги помогут вам сгенерировать эти резервные файлы и скопировать их на ваш хост для хранения:
-
Откройте интерактивную сессию псевдо-TTY с os-node-01
:
docker exec -it os-node-01 bash
-
Создайте директорию с именем backups
и перейдите в нее:
mkdir /usr/share/opensearch/backups && cd /usr/share/opensearch/backups
-
Используйте securityadmin.sh
, чтобы создать резервные копии ваших настроек безопасности OpenSearch в /usr/share/opensearch/backups/
:
/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
-backup /usr/share/opensearch/backups \
-icl \
-nhnv \
-cacert /usr/share/opensearch/config/root-ca.pem \
-cert /usr/share/opensearch/config/admin.pem \
-key /usr/share/opensearch/config/admin-key.pem
Пример ответа
Security Admin v7
Will connect to localhost:9300 ... done
Connected as CN=A,OU=DOCS,O=OPENSEARCH,L=PORTLAND,ST=OREGON,C=US
OpenSearch Version: 1.3.7
OpenSearch Security Version: 1.3.7.0
Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
Clustername: opensearch-dev-cluster
Clusterstate: GREEN
Number of nodes: 4
Number of data nodes: 4
.opendistro_security index already exists, so we do not need to create one.
Will retrieve '/config' into /usr/share/opensearch/backups/config.yml
SUCC: Configuration for 'config' stored in /usr/share/opensearch/backups/config.yml
Will retrieve '/roles' into /usr/share/opensearch/backups/roles.yml
SUCC: Configuration for 'roles' stored in /usr/share/opensearch/backups/roles.yml
Will retrieve '/rolesmapping' into /usr/share/opensearch/backups/roles_mapping.yml
SUCC: Configuration for 'rolesmapping' stored in /usr/share/opensearch/backups/roles_mapping.yml
Will retrieve '/internalusers' into /usr/share/opensearch/backups/internal_users.yml
SUCC: Configuration for 'internalusers' stored in /usr/share/opensearch/backups/internal_users.yml
Will retrieve '/actiongroups' into /usr/share/opensearch/backups/action_groups.yml
SUCC: Configuration for 'actiongroups' stored in /usr/share/opensearch/backups/action_groups.yml
Will retrieve '/tenants' into /usr/share/opensearch/backups/tenants.yml
SUCC: Configuration for 'tenants' stored in /usr/share/opensearch/backups/tenants.yml
Will retrieve '/nodesdn' into /usr/share/opensearch/backups/nodes_dn.yml
SUCC: Configuration for 'nodesdn' stored in /usr/share/opensearch/backups/nodes_dn.yml
Will retrieve '/whitelist' into /usr/share/opensearch/backups/whitelist.yml
SUCC: Configuration for 'whitelist' stored in /usr/share/opensearch/backups/whitelist.yml
Will retrieve '/audit' into /usr/share/opensearch/backups/audit.yml
SUCC: Configuration for 'audit' stored in /usr/share/opensearch/backups/audit.yml
-
Необязательно: Создайте резервную директорию для TLS-сертификатов и сохраните копии сертификатов. Повторите это для каждого узла, если вы используете уникальные TLS-сертификаты: Создайте директорию для сертификатов и скопируйте сертификаты в нее:
mkdir /usr/share/opensearch/backups/certs && cp /usr/share/opensearch/config/*pem /usr/share/opensearch/backups/certs/
-
Завершите сессию псевдо-TTY:
-
Скопируйте файлы на ваш хост:
docker cp os-node-01:/usr/share/opensearch/backups ~/deploy/
Выполнение обновления
Теперь, когда кластер настроен и вы сделали резервные копии важных файлов и настроек, пришло время начать обновление версии.
Некоторые шаги, включенные в этот раздел, такие как отключение репликации шардов и сброс журнала транзакций, не повлияют на производительность вашего кластера. Эти шаги включены в качестве лучших практик и могут значительно улучшить производительность кластера в ситуациях, когда клиенты продолжают взаимодействовать с кластером OpenSearch на протяжении всего обновления, например, запрашивая существующие данные или индексируя документы.
- Отключите репликацию шардов, чтобы остановить перемещение сегментов индекса Lucene внутри вашего кластера:
curl -H 'Content-type: application/json' \
-X PUT "https://localhost:9201/_cluster/settings?pretty" \
-d'{"persistent":{"cluster.routing.allocation.enable":"primaries"}}' \
-ku admin:<custom-admin-password>
Пример ответа
{
"acknowledged" : true,
"persistent" : {
"cluster" : {
"routing" : {
"allocation" : {
"enable" : "primaries"
}
}
}
},
"transient" : { }
}
- Выполните операцию сброса на кластере, чтобы зафиксировать записи журнала транзакций в индексе Lucene:
curl -X POST "https://localhost:9201/_flush?pretty" -ku admin:<custom-admin-password>
Пример ответа
{
"_shards" : {
"total" : 20,
"successful" : 20,
"failed" : 0
}
}
- Вы можете обновлять узлы в любом порядке, так как все узлы в этом демонстрационном кластере являются подходящими менеджерами кластера. Следующая команда остановит и удалит контейнер
os-node-01
, не удаляя смонтированный том данных:
docker stop os-node-01 && docker container rm os-node-01
- Запустите новый контейнер с именем
os-node-01
с образом opensearchproject/opensearch:2.5.0
и используя те же смонтированные тома, что и у оригинального контейнера:
docker run -d \
-p 9201:9200 -p 9601:9600 \
-e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
--ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
-v data-01:/usr/share/opensearch/data \
-v repo-01:/usr/share/opensearch/snapshots \
-v ~/deploy/opensearch-01.yml:/usr/share/opensearch/config/opensearch.yml \
-v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
-v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
-v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
-v ~/deploy/os-node-01.pem:/usr/share/opensearch/config/os-node-01.pem \
-v ~/deploy/os-node-01-key.pem:/usr/share/opensearch/config/os-node-01-key.pem \
--network opensearch-dev-net \
--ip 172.20.0.11 \
--name os-node-01 \
opensearchproject/opensearch:2.5.0
Пример ответа
d26d0cb2e1e93e9c01bb00f19307525ef89c3c3e306d75913860e6542f729ea4
- Опционально: Запросите кластер, чтобы определить, какой узел выполняет функции менеджера кластера.
Вы можете выполнить эту команду в любое время в процессе, чтобы увидеть, когда будет избран новый менеджер кластера:
curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
-ku admin:<custom-admin-password> | column -t
Пример ответа
name version node.role master
os-node-01 2.5.0 dimr -
os-node-04 1.3.7 dimr *
os-node-02 1.3.7 dimr -
os-node-03 1.3.7 dimr -
- Опционально: Запросите кластер, чтобы увидеть, как изменяется распределение шардов по мере удаления и замены узлов.
Вы можете выполнить эту команду в любое время в процессе, чтобы увидеть, как изменяются статусы шардов:
curl -s "https://localhost:9201/_cat/shards" \
-ku admin:<custom-admin-password>
Пример ответа
security-auditlog-2023.03.06 0 p STARTED 53 214.5kb 172.20.0.13 os-node-03
security-auditlog-2023.03.06 0 r UNASSIGNED
.kibana_1 0 p STARTED 3 14.5kb 172.20.0.12 os-node-02
.kibana_1 0 r STARTED 3 14.5kb 172.20.0.13 os-node-03
ecommerce 0 p STARTED 4675 3.9mb 172.20.0.12 os-node-02
ecommerce 0 r STARTED 4675 3.9mb 172.20.0.14 os-node-04
security-auditlog-2023.03.07 0 p STARTED 37 175.7kb 172.20.0.14 os-node-04
security-auditlog-2023.03.07 0 r UNASSIGNED
.opendistro_security 0 p STARTED 10 67.9kb 172.20.0.12 os-node-02
.opendistro_security 0 r STARTED 10 67.9kb 172.20.0.13 os-node-03
.opendistro_security 0 r STARTED 10 64.5kb 172.20.0.14 os-node-04
.opendistro_security 0 r UNASSIGNED
security-auditlog-2023.02.27 0 p STARTED 4 80.5kb 172.20.0.12 os-node-02
security-auditlog-2023.02.27 0 r UNASSIGNED
security-auditlog-2023.02.28 0 p STARTED 6 104.1kb 172.20.0.14 os-node-04
security-auditlog-2023.02.28 0 r UNASSIGNED
opensearch_dashboards_sample_data_logs 0 p STARTED 14074 9.1mb 172.20.0.12 os-node-02
opensearch_dashboards_sample_data_logs 0 r STARTED 14074 8.9mb 172.20.0.13 os-node-03
.kibana_92668751_admin_1 0 r STARTED 33 37.3kb 172.20.0.13 os-node-03
.kibana_92668751_admin_1 0 p STARTED 33 37.3kb 172.20.0.14 os-node-04
- Остановите os-node-02:
docker stop os-node-02 && docker container rm os-node-02
- Запустите новый контейнер с именем os-node-02 с образом opensearchproject/opensearch:2.5.0 и используя те же смонтированные тома, что и у оригинального контейнера:
docker run -d \
-p 9202:9200 -p 9602:9600 \
-e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
--ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
-v data-02:/usr/share/opensearch/data \
-v repo-01:/usr/share/opensearch/snapshots \
-v ~/deploy/opensearch-02.yml:/usr/share/opensearch/config/opensearch.yml \
-v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
-v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
-v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
-v ~/deploy/os-node-02.pem:/usr/share/opensearch/config/os-node-02.pem \
-v ~/deploy/os-node-02-key.pem:/usr/share/opensearch/config/os-node-02-key.pem \
--network opensearch-dev-net \
--ip 172.20.0.12 \
--name os-node-02 \
opensearchproject/opensearch:2.5.0
Пример ответа
7b802865bd6eb420a106406a54fc388ed8e5e04f6cbd908c2a214ea5ce72ac00
- Остановите os-node-03:
docker stop os-node-03 && docker container rm os-node-03
- Запустите новый контейнер с именем os-node-03 с образом opensearchproject/opensearch:2.5.0 и используя те же смонтированные тома, что и у оригинального контейнера:
docker run -d \
-p 9203:9200 -p 9603:9600 \
-e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
--ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
-v data-03:/usr/share/opensearch/data \
-v repo-01:/usr/share/opensearch/snapshots \
-v ~/deploy/opensearch-03.yml:/usr/share/opensearch/config/opensearch.yml \
-v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
-v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
-v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
-v ~/deploy/os-node-03.pem:/usr/share/opensearch/config/os-node-03.pem \
-v ~/deploy/os-node-03-key.pem:/usr/share/opensearch/config/os-node-03-key.pem \
--network opensearch-dev-net \
--ip 172.20.0.13 \
--name os-node-03 \
opensearchproject/opensearch:2.5.0
Пример ответа
d7f11726841a89eb88ff57a8cbecab392399f661a5205f0c81b60a995fc6c99d
- Остановите os-node-04:
docker stop os-node-04 && docker container rm os-node-04
- Запустите новый контейнер с именем os-node-04 с образом opensearchproject/opensearch:2.5.0 и используя те же смонтированные тома, что и у оригинального контейнера:
docker run -d \
-p 9204:9200 -p 9604:9600 \
-e "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" \
--ulimit nofile=65536:65536 --ulimit memlock=-1:-1 \
-v data-04:/usr/share/opensearch/data \
-v repo-01:/usr/share/opensearch/snapshots \
-v ~/deploy/opensearch-04.yml:/usr/share/opensearch/config/opensearch.yml \
-v ~/deploy/root-ca.pem:/usr/share/opensearch/config/root-ca.pem \
-v ~/deploy/admin.pem:/usr/share/opensearch/config/admin.pem \
-v ~/deploy/admin-key.pem:/usr/share/opensearch/config/admin-key.pem \
-v ~/deploy/os-node-04.pem:/usr/share/opensearch/config/os-node-04.pem \
-v ~/deploy/os-node-04-key.pem:/usr/share/opensearch/config/os-node-04-key.pem \
--network opensearch-dev-net \
--ip 172.20.0.14 \
--name os-node-04 \
opensearchproject/opensearch:2.5.0
Пример ответа
26f8286ab11e6f8dcdf6a83c95f265172f9557578a1b292af84c6f5ef8738e1d
- Подтвердите, что ваш кластер работает на новой версии:
curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
-ku admin:<custom-admin-password> | column -t
Пример ответа
name version node.role master
os-node-01 2.5.0 dimr *
os-node-02 2.5.0 dimr -
os-node-04 2.5.0 dimr -
os-node-03 2.5.0 dimr -
- Последний компонент, который вы должны обновить, это узел OpenSearch Dashboards. Сначала остановите и удалите старый контейнер:
docker stop os-dashboards-01 && docker rm os-dashboards-01
- Создайте новый контейнер, работающий на целевой версии OpenSearch Dashboards:
docker run -d \
-p 5601:5601 --expose 5601 \
-v ~/deploy/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml \
-v ~/deploy/root-ca.pem:/usr/share/opensearch-dashboards/config/root-ca.pem \
-v ~/deploy/os-dashboards-01.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01.pem \
-v ~/deploy/os-dashboards-01-key.pem:/usr/share/opensearch-dashboards/config/os-dashboards-01-key.pem \
--network opensearch-dev-net \
--ip 172.20.0.10 \
--name os-dashboards-01 \
opensearchproject/opensearch-dashboards:2.5.0
Пример ответа
310de7a24cf599ca0b39b241db07fa8865592ebe15b6f5fda26ad19d8e1c1e09
- Убедитесь, что контейнер OpenSearch Dashboards запустился правильно. Команда, подобная следующей, может быть использована для подтверждения того, что запросы к
https://HOST_ADDRESS:5601
перенаправляются (HTTP статус код 302) на /app/login?
:
curl https://localhost:5601 -kI
Пример ответа
HTTP/1.1 302 Found
location: /app/login?
osd-name: opensearch-dashboards-dev
cache-control: private, no-cache, no-store, must-revalidate
set-cookie: security_authentication=; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly; Path=/
content-length: 0
Date: Wed, 08 Mar 2023 15:36:53 GMT
Connection: keep-alive
Keep-Alive: timeout=120
- Включите распределение реплик шардов:
curl -H 'Content-type: application/json' \
-X PUT "https://localhost:9201/_cluster/settings?pretty" \
-d'{"persistent":{"cluster.routing.allocation.enable":"all"}}' \
-ku admin:<custom-admin-password>
Пример ответа
{
"acknowledged" : true,
"persistent" : {
"cluster" : {
"routing" : {
"allocation" : {
"enable" : "all"
}
}
}
},
"transient" : { }
}
Проверка обновления
Вы успешно развернули защищенный кластер OpenSearch, проиндексировали данные, создали панель управления, заполненную образцами данных, создали нового внутреннего пользователя, сделали резервную копию важных файлов и обновили кластер с версии 1.3.7 до 2.5.0. Прежде чем продолжить исследовать и экспериментировать с OpenSearch и OpenSearch Dashboards, вам следует проверить результаты обновления.
Для этого кластера шаги по проверке после обновления могут включать в себя проверку следующего:
- Запущенная версия
- Здоровье и распределение шардов
- Согласованность данных
Проверка текущей запущенной версии ваших узлов OpenSearch:
curl -s "https://localhost:9201/_cat/nodes?v&h=name,version,node.role,master" \
-ku admin:<custom-admin-password> | column -t
Пример ответа
name version node.role master
os-node-01 2.5.0 dimr *
os-node-02 2.5.0 dimr -
os-node-04 2.5.0 dimr -
os-node-03 2.5.0 dimr -
Проверка текущей запущенной версии OpenSearch Dashboards:
Вариант 1: Проверьте версию OpenSearch Dashboards через веб-интерфейс.
- Откройте веб-браузер и перейдите на порт 5601 вашего Docker-хоста (например,
https://HOST_ADDRESS:5601
).
- Войдите с использованием имени пользователя по умолчанию (admin) и пароля по умолчанию (admin).
- Нажмите кнопку “Справка” в правом верхнем углу. Версия отображается в всплывающем окне.
- Снова нажмите кнопку “Справка”, чтобы закрыть всплывающее окно.
Вариант 2: Проверьте версию OpenSearch Dashboards, проверив файл manifest.yml.
- Из командной строки откройте интерактивную сессию псевдо-TTY с контейнером OpenSearch Dashboards:
docker exec -it os-dashboards-01 bash
- Проверьте файл manifest.yml на наличие версии:
Пример ответа
---
schema-version: '1.1'
build:
name: OpenSearch Dashboards
version: 2.5.0
Завершите сессию псевдо-TTY:
Проверка состояния кластера и распределения шардов
Запросите API-эндпоинт состояния кластера, чтобы увидеть информацию о здоровье вашего кластера. Вы должны увидеть статус “green”, что указывает на то, что все первичные и репликатные шарды распределены:
curl -s "https://localhost:9201/_cluster/health?pretty" -ku admin:<custom-admin-password>
Пример ответа
{
"cluster_name" : "opensearch-dev-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 4,
"number_of_data_nodes" : 4,
"discovered_master" : true,
"discovered_cluster_manager" : true,
"active_primary_shards" : 16,
"active_shards" : 36,
"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
}
Запросите API-эндпоинт CAT shards, чтобы увидеть, как шардов распределены после обновления кластера:
curl -s "https://localhost:9201/_cat/shards" -ku admin:<custom-admin-password>
Пример ответа
security-auditlog-2023.02.27 0 r STARTED 4 80.5kb 172.20.0.13 os-node-03
security-auditlog-2023.02.27 0 p STARTED 4 80.5kb 172.20.0.11 os-node-01
security-auditlog-2023.03.08 0 p STARTED 30 95.2kb 172.20.0.13 os-node-03
security-auditlog-2023.03.08 0 r STARTED 30 123.8kb 172.20.0.11 os-node-01
ecommerce 0 p STARTED 4675 3.9mb 172.20.0.12 os-node-02
ecommerce 0 r STARTED 4675 3.9mb 172.20.0.13 os-node-03
.kibana_1 0 p STARTED 3 5.9kb 172.20.0.12 os-node-02
.kibana_1 0 r STARTED 3 5.9kb 172.20.0.11 os-node-01
.kibana_92668751_admin_1 0 p STARTED 33 37.3kb 172.20.0.13 os-node-03
.kibana_92668751_admin_1 0 r STARTED 33 37.3kb 172.20.0.11 os-node-01
opensearch_dashboards_sample_data_logs 0 p STARTED 14074 9.1mb 172.20.0.12 os-node-02
opensearch_dashboards_sample_data_logs 0 r STARTED 14074 9.1mb 172.20.0.14 os-node-04
security-auditlog-2023.02.28 0 p STARTED 6 26.2kb 172.20.0.11 os-node-01
security-auditlog-2023.02.28 0 r STARTED 6 26.2kb 172.20.0.14 os-node-04
.opendistro-reports-definitions 0 p STARTED 0 208b 172.20.0.12 os-node-02
.opendistro-reports-definitions 0 r STARTED 0 208b 172.20.0.13 os-node-03
.opendistro-reports-definitions 0 r STARTED 0 208b 172.20.0.14 os-node-04
security-auditlog-2023.03.06 0 r STARTED 53 174.6kb 172.20.0.12 os-node-02
security-auditlog-2023.03.06 0 p STARTED 53 174.6kb 172.20.0.14 os-node-04
.kibana_101107607_newuser_1 0 r STARTED 1 5.1kb 172.20.0.13 os-node-03
.kibana_101107607_newuser_1 0 p STARTED 1 5.1kb 172.20.0.11 os-node-01
.opendistro_security 0 r STARTED 10 64.5kb 172.20.0.12 os-node-02
.opendistro_security 0 r STARTED 10 64.5kb 172.20.0.13 os-node-03
.opendistro_security 0 r STARTED 10 64.5kb 172.20.0.11 os-node-01
.opendistro_security 0 p STARTED 10 64.5kb 172.20.0.14 os-node-04
.kibana_-152937574_admintenant_1 0 r STARTED 1 5.1kb 172.20.0.12 os-node-02
.kibana_-152937574_admintenant_1 0 p STARTED 1 5.1kb 172.20.0.14 os-node-04
security-auditlog-2023.03.07 0 r STARTED 37 175.7kb 172.20.0.12 os-node-02
security-auditlog-2023.03.07 0 p STARTED 37 175.7kb 172.20.0.14 os-node-04
.kibana_92668751_admin_2 0 p STARTED 34 38.6kb 172.20.0.13 os-node-03
.kibana_92668751_admin_2 0 r STARTED 34 38.6kb 172.20.0.11 os-node-01
.kibana_2 0 p STARTED 3 6kb 172.20.0.13 os-node-03
.kibana_2 0 r STARTED 3 6kb 172.20.0.14 os-node-04
.opendistro-reports-instances 0 r STARTED 0 208b 172.20.0.12 os-node-02
.opendistro-reports-instances 0 r STARTED 0 208b 172.20.0.11 os-node-01
.opendistro-reports-instances 0 p STARTED 0 208b 172.20.0.14 os-node-04
Проверка согласованности данных
Вам нужно снова запросить индекс ecommerce, чтобы подтвердить, что образцы данных все еще присутствуют:
- Сравните ответ на этот запрос с ответом, который вы получили на последнем шаге индексации данных с помощью REST API:
curl -H 'Content-Type: application/json' \
-X GET "https://localhost:9201/ecommerce/_search?pretty=true&filter_path=hits.total" \
-d'{"query":{"match":{"customer_first_name":"Sonya"}}}' \
-ku admin:<custom-admin-password>
Пример ответа
{
"hits" : {
"total" : {
"value" : 106,
"relation" : "eq"
}
}
}
- Откройте веб-браузер и перейдите на порт 5601 вашего Docker-хоста (например,
https://HOST_ADDRESS:5601
).
- Введите имя пользователя по умолчанию (admin) и пароль (admin).
- На главной странице OpenSearch Dashboards выберите кнопку Меню в верхнем левом углу веб-интерфейса, чтобы открыть панель навигации.
- Выберите “Панель управления”.
- Выберите
[Logs] Web Traffic
, чтобы открыть панель управления, созданную при добавлении образцов данных ранее в процессе.
- Когда вы закончите просмотр панели управления, выберите кнопку Профиль. Выберите “Выйти”, чтобы войти как другой пользователь.
- Введите имя пользователя и пароль, которые вы создали перед обновлением, затем выберите “Войти”.
7 - Установка плагинов
OpenSearch включает в себя ряд плагинов, которые добавляют функции и возможности к основной платформе.
Доступные вам плагины зависят от того, как был установлен OpenSearch и какие плагины были добавлены или удалены впоследствии. Например, минимальная дистрибуция OpenSearch включает только основные функции, такие как индексация и поиск. Использование минимальной дистрибуции OpenSearch полезно, когда вы работаете в тестовой среде, имеете собственные плагины или планируете интегрировать OpenSearch с другими сервисами.
Стандартная дистрибуция OpenSearch включает гораздо больше плагинов, предлагающих значительно больше функциональности. Вы можете выбрать добавление дополнительных плагинов или удалить любые плагины, которые вам не нужны.
Для получения списка доступных плагинов смотрите Доступные плагины.
Для корректной работы плагина с OpenSearch он может запрашивать определенные разрешения в процессе установки. Ознакомьтесь с запрашиваемыми разрешениями и действуйте соответственно. Важно понимать функциональность плагина перед его установкой. При выборе плагина, предоставленного сообществом, убедитесь, что источник надежен и заслуживает доверия.
Управление плагинами
Для управления плагинами в OpenSearch вы можете использовать инструмент командной строки под названием opensearch-plugin
. Этот инструмент позволяет выполнять следующие действия:
- Список установленных плагинов.
- Установка плагинов.
- Удаление установленного плагина.
Вы можете вывести текст справки, передав -h
или --help
. В зависимости от конфигурации вашего хоста, вам также может потребоваться запускать команду с привилегиями sudo
.
Если вы запускаете OpenSearch в контейнере Docker, плагины должны быть установлены, удалены и настроены путем изменения образа Docker. Для получения дополнительной информации смотрите Работа с плагинами.
Список
Используйте list
, чтобы увидеть список плагинов, которые уже были установлены.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin list
ПРИМЕР
$ ./opensearch-plugin list
opensearch-alerting
opensearch-anomaly-detection
opensearch-asynchronous-search
opensearch-cross-cluster-replication
opensearch-geospatial
opensearch-index-management
opensearch-job-scheduler
opensearch-knn
opensearch-ml
opensearch-notifications
opensearch-notifications-core
opensearch-observability
opensearch-performance-analyzer
opensearch-reports-scheduler
opensearch-security
opensearch-sql
Список (с помощью CAT API)
Вы также можете перечислить установленные плагины, используя CAT API.
ИСПОЛЬЗОВАНИЕ
ПРИМЕР ОТВЕТА
opensearch-node1 opensearch-alerting 2.0.1.0
opensearch-node1 opensearch-anomaly-detection 2.0.1.0
opensearch-node1 opensearch-asynchronous-search 2.0.1.0
opensearch-node1 opensearch-cross-cluster-replication 2.0.1.0
opensearch-node1 opensearch-index-management 2.0.1.0
opensearch-node1 opensearch-job-scheduler 2.0.1.0
opensearch-node1 opensearch-knn 2.0.1.0
opensearch-node1 opensearch-ml 2.0.1.0
opensearch-node1 opensearch-notifications 2.0.1.0
opensearch-node1 opensearch-notifications-core 2.0.1.0
Установка
Существует три способа установки плагинов с помощью инструмента opensearch-plugin
:
- Установить плагин по имени.
- Установить плагин из zip-файла.
- Установить плагин, используя координаты Maven.
Установка плагина по имени
Вы можете установить плагины, которые еще не предустановлены в вашей установке, используя имя плагина. Для получения списка плагинов, которые могут не быть предустановленными, смотрите Дополнительные плагины.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin install <plugin-name>
ПРИМЕР
$ sudo ./opensearch-plugin install analysis-icu
-> Установка analysis-icu
-> Загрузка analysis-icu из opensearch
[=================================================] 100%
-> Установлен analysis-icu с именем папки analysis-icu
Установка плагина из zip-файла
Вы можете установить удаленные zip-файлы, заменив <zip-file>
на URL размещенного файла. Инструмент поддерживает загрузку только по протоколам HTTP/HTTPS. Для локальных zip-файлов замените <zip-file>
на file:
, за которым следует абсолютный или относительный путь к zip-файлу плагина, как показано во втором примере ниже.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin install <zip-file>
Пример
# Zip file is hosted on a remote server - in this case, Maven central repository.
$ sudo ./opensearch-plugin install https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-anomaly-detection/2.2.0.0/opensearch-anomaly-detection-2.2.0.0.zip
-> Installing https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-anomaly-detection/2.2.0.0/opensearch-anomaly-detection-2.2.0.0.zip
-> Downloading https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-anomaly-detection/2.2.0.0/opensearch-anomaly-detection-2.2.0.0.zip
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.misc
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] registerMBean
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] unregisterMBean
* javax.management.MBeanServerPermission createMBeanServer
* javax.management.MBeanTrustPermission register
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed opensearch-anomaly-detection with folder name opensearch-anomaly-detection
# Zip file in a local directory.
$ sudo ./opensearch-plugin install file:/home/user/opensearch-anomaly-detection-2.2.0.0.zip
-> Installing file:/home/user/opensearch-anomaly-detection-2.2.0.0.zip
-> Downloading file:/home/user/opensearch-anomaly-detection-2.2.0.0.zip
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.misc
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] registerMBean
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] unregisterMBean
* javax.management.MBeanServerPermission createMBeanServer
* javax.management.MBeanTrustPermission register
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed opensearch-anomaly-detection with folder name opensearch-anomaly-detection
Установка плагина, используя координаты Maven
Инструмент opensearch-plugin install
также позволяет вам указывать координаты Maven для доступных артефактов и версий, размещенных на Maven Central. Инструмент анализирует предоставленные вами координаты Maven и формирует URL. В результате хост должен иметь возможность напрямую подключаться к сайту Maven Central. Установка плагина завершится неудачей, если вы передадите координаты прокси-серверу или локальному репозиторию.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin install <groupId>:<artifactId>:<version>
ПРИМЕР
$ sudo ./opensearch-plugin install org.opensearch.plugin:opensearch-anomaly-detection:2.2.0.0
-> Installing org.opensearch.plugin:opensearch-anomaly-detection:2.2.0.0
-> Downloading org.opensearch.plugin:opensearch-anomaly-detection:2.2.0.0 from maven central
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.misc
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.SocketPermission * connect,resolve
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] registerMBean
* javax.management.MBeanPermission org.apache.commons.pool2.impl.GenericObjectPool#-[org.apache.commons.pool2:name=pool,type=GenericObjectPool] unregisterMBean
* javax.management.MBeanServerPermission createMBeanServer
* javax.management.MBeanTrustPermission register
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed opensearch-anomaly-detection with folder name opensearch-anomaly-detection
Перезапустите узел OpenSearch после установки плагина.
Установка нескольких плагинов
Несколько плагинов можно установить за одну команду.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin install <plugin-name> <plugin-name> ... <plugin-name>
ПРИМЕР
$ sudo ./opensearch-plugin install analysis-nori repository-s3
Удаление
Вы можете удалить плагин, который уже был установлен, с помощью опции remove
.
ИСПОЛЬЗОВАНИЕ
bin/opensearch-plugin remove <plugin-name>
ПРИМЕР
$ sudo ./opensearch-plugin remove opensearch-anomaly-detection
-> Удаление [opensearch-anomaly-detection]...
После удаления плагина перезапустите узел OpenSearch.
Пакетный режим
При установке плагина, который требует дополнительных привилегий, не включенных по умолчанию, плагин запросит у вас подтверждение необходимых привилегий. Чтобы предоставить все запрашиваемые привилегии, используйте пакетный режим, чтобы пропустить запрос на подтверждение.
Чтобы принудительно включить пакетный режим при установке плагинов, добавьте опцию -b
или --batch
:
bin/opensearch-plugin install --batch <plugin-name>
Доступные плагины
OpenSearch предоставляет несколько встроенных плагинов, которые доступны для немедленного использования со всеми дистрибуциями OpenSearch, за исключением минимальной дистрибуции. Дополнительные плагины доступны, но их необходимо установить отдельно, используя один из вариантов установки.
Встроенные плагины
Следующие плагины входят во все дистрибуции OpenSearch, за исключением минимальной дистрибуции. Если вы используете минимальную дистрибуцию, вы можете добавить эти плагины, используя один из методов установки.
Название плагина |
Репозиторий |
Самая ранняя доступная версия |
Alerting |
opensearch-alerting |
1.0.0 |
Anomaly Detection |
opensearch-anomaly-detection |
1.0.0 |
Asynchronous Search |
opensearch-asynchronous-search |
1.0.0 |
Cross Cluster Replication |
opensearch-cross-cluster-replication |
1.1.0 |
Custom Codecs |
opensearch-custom-codecs |
2.10.0 |
Flow Framework |
flow-framework |
2.12.0 |
Notebooks |
opensearch-notebooks |
1.0.0 до 1.1.0 |
Notifications |
notifications |
2.0.0 |
Reports Scheduler |
opensearch-reports-scheduler |
1.0.0 |
Geospatial |
opensearch-geospatial |
2.2.0 |
Index Management |
opensearch-index-management |
1.0.0 |
Job Scheduler |
opensearch-job-scheduler |
1.0.0 |
k-NN |
opensearch-knn |
1.0.0 |
Learning to Rank |
opensearch-ltr |
2.19.0 |
ML Commons |
opensearch-ml |
1.3.0 |
Skills |
opensearch-skills |
2.12.0 |
Neural Search |
neural-search |
2.4.0 |
Observability |
opensearch-observability |
1.2.0 |
Performance Analyzer |
opensearch-performance-analyzer |
1.0.0 |
Security |
opensearch-security |
1.0.0 |
Security Analytics |
opensearch-security-analytics |
2.4.0 |
SQL |
opensearch-sql |
1.0.0 |
Learning to Rank Base |
opensearch-learning-to-rank-base |
2.19.0 |
Remote Metadata SDK |
opensearch-remote-metadata-sdk |
2.19.0 |
Query Insights |
query-insights |
2.16.0 |
System Templates |
opensearch-system-templates |
2.17.0 |
User Behavior Insights |
ubi |
3.0.0 |
Search Relevance |
search-relevance |
3.1.0 |
Примечания:
- Dashboard Notebooks были объединены с плагином Observability с выходом OpenSearch 1.2.0.
- Performance Analyzer недоступен на Windows.
СКАЧИВАНИЕ ВСТРОЕННЫХ ПЛАГИНОВ ДЛЯ ОФЛАЙН-УСТАНОВКИ
Каждый встроенный плагин можно скачать и установить оффлайн из zip-файла.
URL для соответствующего плагина можно найти в файле manifest.yml
, который расположен в корневом каталоге извлеченного пакета.
Основные плагины
Основной (или нативный) плагин в OpenSearch — это плагин, который находится в репозитории основного движка OpenSearch. Эти плагины тесно интегрированы с движком OpenSearch, версионируются вместе с основными релизами и по умолчанию не включены в стандартную дистрибуцию OpenSearch.
СКАЧИВАНИЕ ОСНОВНЫХ ПЛАГИНОВ ДЛЯ ОФЛАЙН-УСТАНОВКИ
Каждый из основных плагинов в этом списке можно скачать и установить оффлайн из zip-файла, используя официальный шаблон URL репозитория плагинов:
https://artifacts.opensearch.org/releases/plugins/<plugin-name>/<version>/<plugin-name>-<version>.zip
Где <plugin-name>
соответствует имени встроенного плагина (например, analysis-icu
). <version>
должен соответствовать версии дистрибуции OpenSearch (например, 2.19.1
).
Например, используйте следующий URL для скачивания дистрибуции встроенного плагина analysis-icu
для версии OpenSearch 2.19.1
:
https://artifacts.opensearch.org/releases/plugins/analysis-icu/2.19.1/analysis-icu-2.19.1.zip
Дополнительные плагины
Существует множество других плагинов, доступных помимо тех, что предоставлены в стандартной дистрибуции. Эти дополнительные плагины были разработаны разработчиками OpenSearch или членами сообщества OpenSearch. Для получения списка дополнительных плагинов, которые вы можете установить, смотрите Дополнительные плагины.
Совместимость плагинов
Вы можете указать совместимость плагина с определенной версией OpenSearch в файле plugin-descriptor.properties
. Например, плагин с следующим свойством совместим только с OpenSearch 2.3.0:
В качестве альтернативы вы можете указать диапазон совместимых версий OpenSearch, установив свойство dependencies
в файле plugin-descriptor.properties
в одну из следующих нотаций:
dependencies={ opensearch: "2.3.0" }
: Плагин совместим только с версией OpenSearch 2.3.0.
dependencies={ opensearch: "=2.3.0" }
: Плагин совместим только с версией OpenSearch 2.3.0.
dependencies={ opensearch: "~2.3.0" }
: Плагин совместим со всеми версиями от 2.3.0 до следующей минорной версии, в данном примере — 2.4.0 (исключительно).
dependencies={ opensearch: "^2.3.0" }
: Плагин совместим со всеми версиями от 2.3.0 до следующей мажорной версии, в данном примере — 3.0.0 (исключительно).
Вы можете указать только одно из свойств opensearch.version
или dependencies
.
Связанные ссылки
7.1 - Дополнительные плагины
Существует множество других плагинов, доступных помимо тех, что предоставлены в стандартной дистрибуции OpenSearch.
Эти дополнительные плагины были разработаны разработчиками OpenSearch или членами сообщества OpenSearch. Хотя невозможно предоставить исчерпывающий список (поскольку многие плагины не поддерживаются в репозитории OpenSearch на GitHub), ниже приведены некоторые из плагинов, доступных в каталоге OpenSearch/plugins на GitHub, которые можно установить с помощью одного из вариантов установки, например, используя команду bin/opensearch-plugin install <plugin-name>
.
Название плагина |
Самая ранняя доступная версия |
analysis-icu |
1.0.0 |
analysis-kuromoji |
1.0.0 |
analysis-nori |
1.0.0 |
analysis-phonenumber |
2.18.0 |
analysis-phonetic |
1.0.0 |
analysis-smartcn |
1.0.0 |
analysis-stempel |
1.0.0 |
analysis-ukrainian |
1.0.0 |
discovery-azure-classic |
1.0.0 |
discovery-ec2 |
1.0.0 |
discovery-gce |
1.0.0 |
ingest-attachment |
1.0.0 |
ingestion-kafka |
3.0.0 |
ingestion-kinesis |
3.0.0 |
mapper-annotated-text |
1.0.0 |
mapper-murmur3 |
1.0.0 |
mapper-size |
1.0.0 |
query-insights |
2.12.0 |
repository-azure |
1.0.0 |
repository-gcs |
1.0.0 |
repository-hdfs |
1.0.0 |
repository-s3 |
1.0.0 |
store-smb |
1.0.0 |
transport-grpc |
3.0.0 |
7.2 - mapper-size
Плагин mapper-size позволяет использовать поле _size в индексах OpenSearch. Поле _size хранит размер каждого документа в байтах.
Установка плагина
Вы можете установить плагин mapper-size
, используя следующую команду:
./bin/opensearch-plugin install mapper-size
Примеры
После запуска кластера вы можете создать индекс с включенным отображением размера, индексировать документ и выполнять поиск по документам, как показано в следующих примерах.
Создание индекса с включенным отображением размера
curl -XPUT example-index -H "Content-Type: application/json" -d '{
"mappings": {
"_size": {
"enabled": true
},
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
}
}
}
}'
Индексация документа
curl -XPOST example-index/_doc -H "Content-Type: application/json" -d '{
"name": "John Doe",
"age": 30
}'
Запрос к индексу
curl -XGET example-index/_search -H "Content-Type: application/json" -d '{
"query": {
"match_all": {}
},
"stored_fields": ["_size", "_source"]
}'
Результаты запроса
В следующем примере поле _size
включено в результаты запроса и показывает размер индексированного документа в байтах:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "example_index",
"_id": "Pctw0I8BLto8I5f_NLKK",
"_score": 1.0,
"_size": 37,
"_source": {
"name": "John Doe",
"age": 30
}
}
]
}
}
7.3 - ingest-attachment
Плагин ingest-attachment позволяет OpenSearch извлекать содержимое и другую информацию из файлов с использованием библиотеки извлечения текста Apache Tika.
Поддерживаемые форматы документов включают PPT, PDF, RTF, ODF и многие другие (см. Поддерживаемые форматы документов Tika).
Входное поле должно быть закодировано в формате base64.
Установка плагина
Установите плагин ingest-attachment
, используя следующую команду:
./bin/opensearch-plugin install ingest-attachment
Опции процессора вложений
Название |
Обязательный |
Значение по умолчанию |
Описание |
field |
Да |
|
Имя поля, в котором будет храниться извлеченное содержимое. |
Пример использования плагина ingest-attachment
Следующие шаги покажут вам, как начать работу с плагином ingest-attachment
.
Шаг 1: Создайте индекс для хранения ваших вложений
Следующая команда создает индекс для хранения ваших вложений:
PUT /example-attachment-index
{
"mappings": {
"properties": {}
}
}
Шаг 2: Создайте конвейер
Следующая команда создает конвейер, содержащий процессор вложений:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data"
}
}
]
}
Шаг 3: Сохраните вложение
Преобразуйте вложение в строку base64, чтобы передать его как данные. В этом примере команда base64
преобразует файл lorem.rtf
:
В качестве альтернативы вы можете использовать Node.js для чтения файла в формате base64, как показано в следующих командах:
import * as fs from "node:fs/promises";
import path from "node:path";
const filePath = path.join(import.meta.dirname, "lorem.rtf");
const base64File = await fs.readFile(filePath, { encoding: "base64" });
console.log(base64File);
Файл .rtf
содержит следующий текст в формате base64:
Lorem ipsum dolor sit amet: e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=.
Теперь вы можете сохранить вложение, используя следующую команду:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}
Результаты запроса
После обработки вложения вы можете выполнять поиск по данным, используя поисковые запросы, как показано в следующем примере:
POST example-attachment-index/_search
{
"query": {
"match": {
"attachment.content": "ipsum"
}
}
}
OpenSearch ответит следующим образом:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.1724279,
"hits": [
{
"_index": "example-attachment-index",
"_id": "lorem_rtf",
"_score": 1.1724279,
"_source": {
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=",
"attachment": {
"content_type": "application/rtf",
"language": "pt",
"content": "Lorem ipsum dolor sit amet",
"content_length": 28
}
}
}
]
}
}
Извлеченная информация
Следующие поля могут быть извлечены с помощью плагина:
- content
- language
- date
- title
- author
- keywords
- content_type
- content_length
Чтобы извлечь только подмножество этих полей, определите их в свойствах процессора конвейера, как показано в следующем примере:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data",
"properties": ["content", "title", "author"]
}
}
]
}
Ограничение извлекаемого содержимого
Чтобы предотвратить извлечение слишком большого количества символов и перегрузку памяти узла, значение по умолчанию составляет 100_000. Вы можете изменить это значение, используя настройку indexed_chars
. Например, вы можете использовать -1 для неограниченного количества символов, но необходимо убедиться, что у вас достаточно памяти HEAP на узле OpenSearch для извлечения содержимого больших документов.
Вы также можете определить этот лимит для каждого документа, используя поле запроса indexed_chars_field
. Если документ содержит indexed_chars_field
, оно перезапишет настройку indexed_chars
, как показано в следующем примере:
PUT _ingest/pipeline/attachment
{
"description" : "Извлечение информации о вложениях",
"processors" : [
{
"attachment" : {
"field" : "data",
"indexed_chars" : 10,
"indexed_chars_field" : "max_chars"
}
}
]
}
С настроенным конвейером вложений вы можете извлечь 10 символов по умолчанию, не указывая max_chars
в запросе, как показано в следующем примере:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0="
}
В качестве альтернативы вы можете изменить max_chars
для каждого документа, чтобы извлечь до 15 символов, как показано в следующем примере:
PUT example-attachment-index/_doc/lorem_rtf?pipeline=attachment
{
"data": "e1xydGYxXGFuc2kNCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0DQpccGFyIH0=",
"max_chars": 15
}
8 - Управление плагинами OpenSearch Dashboards
OpenSearch Dashboards предоставляет инструмент командной строки под названием opensearch-dashboards-plugin для управления плагинами.
OpenSearch Dashboards предоставляет инструмент командной строки под названием opensearch-dashboards-plugin
для управления плагинами. Этот инструмент позволяет вам:
- Список установленных плагинов.
- Установить плагины.
- Удалить установленный плагин.
Совместимость плагинов
Основные, второстепенные и патч-версии плагинов должны соответствовать основным, второстепенным и патч-версиям OpenSearch для обеспечения совместимости. Например, версии плагинов 2.3.0.x работают только с OpenSearch 2.3.0.
Предварительные требования
- Совместимый кластер OpenSearch
- Соответствующие плагины OpenSearch, установленные на этом кластере
- Соответствующая версия OpenSearch Dashboards (например, OpenSearch Dashboards 2.3.0 работает с OpenSearch 2.3.0)
Доступные плагины
Следующая таблица перечисляет доступные плагины OpenSearch Dashboards.
Название плагина |
Репозиторий |
Самая ранняя доступная версия |
Alerting Dashboards |
alerting-dashboards-plugin |
1.0.0 |
Anomaly Detection Dashboards |
anomaly-detection-dashboards-plugin |
1.0.0 |
Custom Import Maps Dashboards |
dashboards-maps |
2.2.0 |
Search Relevance Dashboards |
dashboards-search-relevance |
2.4.0 |
Index Management Dashboards |
index-management-dashboards-plugin |
1.0.0 |
Notebooks Dashboards |
dashboards-notebooks |
1.0.0 |
Notifications Dashboards |
dashboards-notifications |
2.0.0 |
Observability Dashboards |
dashboards-observability |
2.0.0 |
Query Insights Dashboards |
query-insights-dashboards |
2.19.0 |
Query Workbench Dashboards |
query-workbench |
1.0.0 |
Reports Dashboards |
dashboards-reporting |
1.0.0 |
Security Analytics Dashboards |
security-analytics-dashboards-plugin |
2.4.0 |
Security Dashboards |
security-dashboards-plugin |
1.0.0 |
Вот переведенная документация на русский язык с сохранением оформления Markdown для Hugo Docsy:
Установка
Перейдите в домашний каталог OpenSearch Dashboards (например, /usr/share/opensearch-dashboards
) и выполните команду установки для каждого плагина.
Просмотр списка установленных плагинов
Чтобы просмотреть список установленных плагинов из командной строки, используйте следующую команду:
sudo bin/opensearch-dashboards-plugin list
Удаление плагинов
Чтобы удалить плагин, выполните команду:
sudo bin/opensearch-dashboards-plugin remove <plugin-name>
Затем удалите все связанные записи из opensearch_dashboards.yml
.
Для некоторых плагинов также необходимо удалить пакет “оптимизации”. Вот пример команды для плагина Anomaly Detection:
sudo rm /usr/share/opensearch-dashboards/optimize/bundles/opensearch-anomaly-detection-opensearch-dashboards.*
После этого перезапустите OpenSearch Dashboards. После удаления любого плагина OpenSearch Dashboards выполняет операцию оптимизации при следующем запуске. Эта операция занимает несколько минут, даже на быстрых машинах, поэтому наберитесь терпения.
Обновление плагинов
OpenSearch Dashboards не обновляет плагины. Вместо этого вам нужно удалить старую версию и ее оптимизированный пакет, переустановить их и перезапустить OpenSearch Dashboards:
-
Удалите старую версию:
sudo bin/opensearch-dashboards-plugin remove <plugin-name>
-
Удалите оптимизированный пакет:
sudo rm /usr/share/opensearch-dashboards/optimize/bundles/<bundle-name>
-
Переустановите новую версию:
sudo bin/opensearch-dashboards-plugin install <plugin-name>
-
Перезапустите OpenSearch Dashboards.
Например, чтобы удалить и переустановить плагин Anomaly Detection:
sudo bin/opensearch-dashboards-plugin remove anomalyDetectionDashboards
sudo rm /usr/share/opensearch-dashboards/optimize/bundles/opensearch-anomaly-detection-opensearch-dashboards.*
sudo bin/opensearch-dashboards-plugin install <AD OpenSearch Dashboards plugin artifact URL>