Развертывание сервиса глобального поиска через
Kubernetes
В статье описан механизм установки, настройки и проверки сервиса глобального поиска через Kubernetes. Описание сервиса глобального поиска представлено в статье Сервис глобального поиска.
Подготовка к развертыванию
Перед установкой пакета сервиса глобального поиска выполните следующее:
- Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
- Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
- Для работы необходимо настроить:
- Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте на сайте документации Kubernetes;
- Пакетный менеджер Helm. Установка пакетного менеджера подробно описана на сайте документации Helm.
- Перед установкой сервиса глобального поиска в Kubernetes рекомендуется выполнить установку компонентов мониторинга. Подробнее: Мониторинг производительности сервиса глобального поиска.
- Проверьте и скорректируйте при необходимости параметры helm-пакета. Подробнее: Параметры helm-пакета.
- Выполните удаление предыдущего релиза сервиса глобального поиска, если он у вас установлен. Подробнее: Удаление предыдущего релиза.
- Создайте namespace и добавьте необходимые секреты. Подробнее: Создание namespace и добавление необходимых секретов.
- Установите инфраструктурные компоненты, необходимые для работы сервиса глобального поиска. Подробнее: Развертывание инфраструктурных компонентов.
- Убедитесь, что в файле ConnectionStrings.config на стороне BPMSoft присутствует параметр elasticsearchCredentials.
После выполнения предварительных действий можно выполнить установку сервиса глобального поиска. Подробнее: Развертывание сервиса глобального поиска.
Удаление предыдущего релиза
Для удаления предыдущего релиза сервиса глобального поиска выполните следующее:
- Получите список установленных релизов, выполнив команду:
helm ls --namespace gs
- Выполните удаление развертывания сервиса глобального поиска, выполнив команду:
helm uninstall gs --namespace gs
Чтобы полностью удалить RabbitMQ, OpenSearch и PostgreSQL, выполните следующие шаги:
- Войдите в Lens и перейдите в раздел Persistent Volume Claims. Выберите нужное пространство имен и удалите все Persistent Volume Claims, связанные с RabbitMQ, OpenSearch и PostgreSQL.
- Перейдите в Lens → Persistent Volumes и удалите все Claim, связанные с RabbitMQ, OpenSearch и PostgreSQL, у которых статус Released.
Создание namespace и добавление необходимых секретов
- Добавьте namespace, выполнив следующую команду:
kubectl create namespace gs
- Если используется свой прокси-репозиторий, то добавьте секрет, выполнив команду:
kubectl create secret docker-registry regcred --docker-server=repo.bpmsoft.ru --docker-username=<Пользователь> --docker-password=<Пароль> --namespace gs
Вместо repo.bpmsoft.ru можно указать свой прокси-репозиторий, а вместо <Пользователь> и <Пароль> — ваши данные.
Развертывание инфраструктурных компонентов
Необходимо выполнить установку инфраструктурных компонентов, указанных в таблице ниже.
Таблица 1 — Инфраструктурные компоненты
| Название компонента | Описание | Источник | Версия helm-чарта | Версия приложения (компонента) |
| OpenSearch | Хранилище данных с поисковиком движком | oci://hub.docker.com/bitnamicharts | 1.9.1 | 2.19.1 |
| RabbitMQ | Брокер сообщений | 15.5.3 | 4.0.9 | |
| PostgreSQL | Реляционная база данных | 16.6.3 | 17.4.0 | |
| Dragonfly | NoSQL хранилище (кэш) | oci://ghcr.io/dragonflydb | v1.28.0 | v1.28.0 |
Установка PostgreSQL
Для развертывания PostgreSQL выполните следующее:
- Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
- Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/postgresql --version 16.6.2 --untar
- В результате выполнения команды, появится директория postgresql с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd postgresql
- Выполните команду для развертывания PostgreSQL:
helm install postgresql oci://<docker.company.ru>/hub.docker.com/bitnamicharts/postgresql \
--version <16.6.2> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=<gs-postgres name override> \
--set auth.username=<gs username> \
--set auth.password=<gs user password> \
--set auth.database=<globalsearch database> \
--set auth.postgresPassword=<admin user password> \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
Описание параметров команды:
- version — версия Helm чарта для установки PostgreSQL. Подробнее с версиями helm чарта можно ознакомиться по ссылке.
- namespace — имя пространства имен для развертывания PostgreSQL для сервиса глобального поиска.
- fullnameOverride — имя «хоста» для развертывания PostgreSQL. Оно должно совпадать с значением db.host в файле values для сервиса глобального поиска.
- auth.username — имя пользователя, которого нужно создать при начальной установке для подключения сервиса глобального поиска.
- auth.password — пароль пользователя, который нужно задать при начальной установке для подключения сервиса глобального поиска.
- auth.database — имя базы данных, которую нужно создать при начальной установке для использования со стороны сервиса глобального поиска.
- auth.postgresPassword — пароль административного пользователя, который нужно задать при начальной установке.
- global.security.allowInsecureImages=true — разблокирует установку Docker образов из прокси-репозитория.
- image.pullSecrets={regcred} — указывает, какой секрет использовать для подключения к Docker прокси-репозиторию. В зависимости от версии Kubernetes может потребоваться альтернативный формат этого параметра: "image.pullSecrets[0].name=regcred".
- global.imageRegistry=<docker.company.ru>/hub.docker.com — указывает прокси-репозиторий для скачивания Docker образов.
Для обновления релиза PostgreSQL выполните следующую команду:
helm upgrade postgresql oci://<docker.company.ru>/hub.docker.com/bitnamicharts/postgresql \
--version <16.6.2> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=<gs-postgres name override> \
--set auth.username=<gs username> \
--set auth.password=<gs user password> \
--set auth.database=<globalsearch database> \
--set auth.postgresPassword=<admin user password> \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
Для удаления релиза PostgreSQL:
- Получите список релизов, выполнив команду:
helm ls --namespace gs
- Удалите репозиторий PostgreSQL:
helm uninstall postgresql --namespace gs
- Через Lens удалите все PVC, относящиеся к PostgreSQL.
Установка RabbitMQ
Для развертывания RabbitMQ выполните следующее:
- Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
- Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq --version 15.5.1 --untar
- В результате выполнения команды, появится директория rabbitmq с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd rabbitmq
- Выполните команду для развертывания RabbitMQ:
helm install rabbitmq oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq \
--version <15.5.1> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=rabbitmq \
--set auth.username=<admin user name> \
--set auth.password=<admin user password> \
--set-string extraConfiguration="default_vhost = <gs vhost>" \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
Описание параметров команды:
- version — версия Helm чарта для установки конкретного релиза RabbitMQ. Подробнее с версиями helm чарта можно ознакомиться по ссылке.
- namespace — имя namespace для развертывания RabbitMQ для сервиса глобального поиска.
- fullnameOverride — имя «хоста» для RabbitMQ. Должно совпадать с именем, указанным в values для сервиса глобального поиска.
- auth.username — имя пользователя, создаваемого при начальной установке. Используется для подключения сервиса глобального поиска.
- auth.password — пароль пользователя, создаваемого при начальной установке. Используется для подключения сервиса глобального поиска.
- extraConfiguration="default_vhost = <gs vhost>" — имя виртуального хоста, создаваемого при начальной установке. Используется сервисом глобального поиска.
- global.security.allowInsecureImages=true — разрешает установку Docker-образов из прокси-репозитория.
- image.pullSecrets={regcred} — указывает секрет для подключения к Docker-прокси репозиторию. Можно использовать альтернативный формат: "image.pullSecrets[0].name=regcred".
- global.imageRegistry=<docker.company.ru>/hub.docker.com — задает прокси-репозиторий для скачивания Docker-образов. Если RabbitMQ используется для нескольких сервисов, параметры пользователя и/или виртуального хоста можно не указывать, но их придется настроить вручную перед установкой GS.
Для обновления релиза RabbitMQ выполните следующую команду:
helm upgrade rabbitmq oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq \
--version <15.5.1> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=rabbitmq \
--set auth.username=<admin user name> \
--set auth.password=<admin user password> \
--set-string extraConfiguration="default_vhost = <gs vhost>" \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
Для удаления релиза RabbitMQ:
- Получите список релизов, выполнив команду:
helm ls --namespace gs
- Удалите репозиторий RabbitMQ:
helm uninstall rabbitmq --namespace gs
- Через Lens удалите все PVC, относящиеся к RabbitMQ.
Установка Dragonfly
Для развертывания Dragonfly выполните следующее:
- Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
- Выполните команду:
helm pull oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator --version v1.1.11 --untar
- В результате выполнения команды, появится директория dragonfly-operator с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd dragonfly-operator
- Выполните команду для развертывания Dragonfly Operator:
helm install dragonfly-operator oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator \ --version <v1.1.11> \ --namespace <dragonfly-operator-system namespace> \ --create-namespace
Описание параметров команды:
- version — указывает версию Helm чарта для установки Dragonfly operator. Подробнее с версиями helm чарта можно ознакомиться по ссылке.
- namespace — имя namespace, в который планируется установка Dragonfly operator для сервиса глобального поиска.
- Перейдите в директорию, где будет располагаться манифест yaml для DragonflyDB. Выполните команду, предварительно заменив значения в '< ... >' на реальные, для создания манифеста:
cat <<EOF >>gs-dragonfly-ha.yaml apiVersion: dragonflydb.io/v1alpha1 kind: Dragonfly metadata: labels: app.kubernetes.io/name: dragonfly app.kubernetes.io/instance: <gs-dragonfly name> app.kubernetes.io/part-of: dragonfly-operator app.kubernetes.io/managed-by: kustomize app.kubernetes.io/created-by: dragonfly-operator name: <gs-dragonfly name> namespace: <gs namespace> spec: args: - '--proactor_threads=2' - '--maxmemory=700mb' - '--dbfilename=<mySnapshot name>' image: <docker.company.ru>/docker.dragonflydb.io/dragonflydb/dragonfly:v1.28.1 imagePullPolicy: Always replicas: 2 resources: limits: cpu: 600m memory: 750Mi requests: cpu: 500m memory: 500Mi snapshot: cron: '*/5 * * * *' persistentVolumeClaimSpec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: nfs-client-2 EOF
Параметры манифеста:
- name / app.kubernetes.io/instance — имя сервиса Dragonfly;
- namespace — пространство, где оператор развертывает и управляет Dragonfly;
- proactor_threads — ограничение количества потоков для Dragonfly. Это важно при большом количестве потоков на хосте/воркере. Dragonfly автоматически масштабируется по памяти, например, запрашивая 6 гигабайт для 24 потоков. Если памяти меньше, сервис не запустится;
- dbfilename — имя snapshot, создаваемого автоматически на основе настроек раздела snapshot. Этот параметр предотвращает заполнение pvc snapshot и ограничивает их количество. При задании имени создается только один snapshot. Он используется для быстрого восстановления состояния pod после удаления или перезапуска. После этого синхронизация с мастером возобновляется, и реплика получает обновления за прошедшее время.
- Для применения манифеста и развертывания Dragonfly выполните команду:
kubectl apply -f gs-dragonfly-ha.yaml -n <gs namespace>
Здесь namespace — это имя namespace, куда планируется установка Dragonfly.
Для удаления релиза Dragonfly:
- Выполните команду из директории, где находится манифест gs-dragonfly-ha.yaml:
kubectl delete -f gs-dragonfly-ha.yaml -n <gs namespace>
- Получите список релизов, выполнив команду:
helm ls --namespace <dragonfly-operator-system namespace>
- Удалите Dragonfly operator:
helm uninstall dragonfly-operator --namespace <dragonfly-operator-system namespace>
- Через Lens удалите все PVC, относящиеся к Dragonfly.
Установка OpenSearch
Для развертывания OpenSearch выполните следующее:
- Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
- Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/opensearch --version 1.9.1 --untar
- В результате выполнения команды, появится директория opensearch с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd opensearch
kind: Namespace metadata: name: <gs namespace> labels: security.deckhouse.io/pod-policy: privileged
Также можно настроить параметры на уровне операционной системы на всех worker узлах кластера Kubernetes. Для этого выполните следующую команду:
sudo sysctl -w vm.max_map_count=262144 && sudo sysctl -w fs.file-max=65536
После чего отключить initContainer, добавив в команду helm install параметр:
--set sysctlImage.enabled=false
- Выполните команду для развертывания OpenSearch:
helm install opensearch oci://<docker.company.ru>/hub.docker.com/bitnamicharts/opensearch \
--version <1.9.1> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=<gs-opensearch name> \
--set masterService=<gs-opensearch name> \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
--set opensearch.config.opensearch\.yml="indices.query.bool.max_clause_count=16384\nplugins.security.disabled=true"
Описание параметров команды:
- version — версия Helm чарта для установки OpenSearch. Подробнее с версиями helm чарта можно ознакомиться по ссылке.
- namespace — имя namespace для установки OpenSearch.
- fullnameOverride — имя хоста для развертывания OpenSearch. Оно должно соответствовать значению в файле values для сервиса глобального поиска.
- masterService — имя сервиса для развертывания OpenSearch, соответствующее значению в файле values для сервиса глобального поиска.
- global.security.allowInsecureImages = true — разрешает установку Docker-образов из прокси-репозитория.
- image.pullSecrets = {regcred} — указывает секрет для подключения к Docker-прокси-репозиторию. Альтернативный формат: "image.pullSecrets[0].name=regcred".
- global.imageRegistry = <docker.company.ru>/hub.docker.com — задает прокси-репозиторий для скачивания Docker-образов.
- opensearch.config.opensearch.yml — опциональный параметр. Его использование рекомендуется только при наличии специальных указаний.
Для обновления релиза OpenSearch выполните следующую команду:
helm upgrade opensearch oci://<docker.company.ru>/hub.docker.com/bitnamicharts/opensearch \
--version <1.9.1> \
--namespace <gs namespace> \
--create-namespace \
--set fullnameOverride=<gs-opensearch name> \
--set masterService=<gs-opensearch name> \
--set global.security.allowInsecureImages=true \
--set image.pullSecrets={regcred} \
--set global.imageRegistry=<docker.company.ru>/hub.docker.com
--set opensearch.config.opensearch\.yml="indices.query.bool.max_clause_count=16384\nplugins.security.disabled=true"
Для удаления релиза OpenSearch:
- Получите список релизов, выполнив команду:
helm ls --namespace gs
- Удалите репозиторий OpenSearch:
helm uninstall opensearch --namespace gs
- Через Lens удалите все PVC, относящиеся к OpenSearch.
Развертывание сервиса глобального поиска
Для установки компонентов сервиса глобального поиска выполните следующее:
- Распакуйте helm пакет из архива, который вы получили в технической поддержке BPMSoft, и перейдите в директорию, где будет располагаться распакованный пакет.
- Перед развертыванием необходимо ознакомиться с выбранным профилем и внести в него корректировки как минимум для следующих параметров:
- rabbitmq.server — адрес сервиса брокера сообщений RabbitMQ;
- db.server — адрес сервиса баз данных Postgres, где хранятся настройки подключения к СУБД BPMSoft;
- dragonfly.server — адрес сервиса кэширования Redis или Dragonfly;
- config.endpoints.gsIndexingWebApiUrl — адрес сервиса для обработки запросов точечного индексирования данных;
- config.endpoints.gsSearchWebApiUrl — адрес сервиса поиска данных;
- config.endpoints.gsWebApiUrl — адрес сервиса для конфигурирования компонентов глобального поиска;
- opentelemetry.server — адрес сервиса приема телеметрии от компонентов глобального поиска;
- opensearch.server — адрес сервиса OpenSearch.
- Для развертывания приложений сервиса глобального поиска выполните одну из следующих команд на выбор:
helm install gs . \
--namespace gs
helm install gs . \
--namespace gs \
--set global.profile="demo"
helm install gs . \
--namespace gs \
--set global.profile="demo" \
--set global.overrideValues="true" \
--set images.tag= \
--set db.password= \
--set dragonfly.password= \
--set rabbitmq.password=
Параметр global.overrideValues="true" позволяет заменять значения параметров в примере. Если значения не указаны через флаг "--set", то они берутся из файла values.yaml в корне Helm чарта (по умолчанию это профиль prod).
При использовании overrideValues="true" для профилей, отличных от prod, необходимо задать значения для следующих параметров:
- images.tag;
- db.password;
- dragonfly.password;
- rabbitmq.password.
Это предотвращает развертывание версии gs в демо-окружении с параметрами, предназначенными для prod.
Откат изменений
Для отката изменений выполните следующее:
- Получите список релизов, выполнив команду:
helm ls --namespace gs
- Для удаления развертывания сервиса глобального поиска, выполните следующую команду:
helm uninstall gs --namespace gs
namespace и secret удалять не нужно.
- Создайте директорию gs-old:
mkdir gs-old
- Распакуйте helm пакет с предыдущей версией глобального поиска и перейдите в директорию, где будет располагаться распакованный пакет.
- Выполните команду для развертывания приложений сервиса глобального поиска:
helm install gs --namespace gs --version 3.1.7 bpmsoft/globalsearch \ --set webApi.ingress.enabled=true \ --set webApi.ingress.host=globalsearch-api.company.ru \ --set webIndexingService.ingress.enabled=true \ --set webIndexingService.ingress.host=globalsearch-indexing.company.ru \ --set searchService.ingress.enabled=true \ --set searchService.ingress.host=globalsearch.company.ru \ --set global.elasticsearch.url=http://elk-bpm.company.ru:9200 \ --set global.searchService.url=http://globalsearch.company.ru:80 \ --set global.rabbitmq.host=rabbit-bpm.company.ru \ --set global.rabbitmq.vhost=/globalsearch \ --set global.rabbitmq.user=globalsearch \ --set global.rabbitmq.password=globalsearch \ --set global.db.host=postgre-bpm.company.ru --set global.db.user=sa --set global.db.password=123 --set global.db.database=globalsearch \ --set global.redis.host=redis-bpm.company.ru --set global.redis.database=1 \ --set log4Net.level=INFO --set log4Net.grayLog.enabled=true --set log4Net.grayLog.AMQP.host=rabbit-bpm.company.ru \ --set log4Net.grayLog.AMQP.virtualHost=/ --set log4Net.grayLog.AMQP.userName=globalsearch \ --set log4Net.grayLog.AMQP.password=globalsearch --set webIndexingService.ingress.className= \ --set searchService.ingress.className= --set webApi.ingress.className=
Проверка работоспособности компонентов
Для проверки работоспособности системы используются Liveness и Readiness в манифестах deployments:
- Если поды развернутся корректно, при их проверке будут возвращаться коды 200. В Lens успешно запущенные поды будут иметь зеленый статус в разделе Containers;
- Если поды развернутся с ошибками, при их проверке будут возвращаться коды 500. В Lens поды с ошибками будут иметь оранжевый статус в разделе Containers, восклицательный знак в разделе "Namespace" и происходить рестарты подов.
Настройка сервиса глобального поиска
Для подключения глобального поиска к системе необходимо выполнить следующие действия на сервере, где установлены компоненты глобального поиска:
- Для выполнения http-запросов необходимо установить инструмент curl. В терминале надо выполнить команду apt-get install curl или yum install curl.
- Выполнить http-запрос на регистрацию сайта в глобальном поиске, указав:
- [DATABASE_TYPE] — тип базы данных системы (mssql или postgresql);
- [DATABASE_CONNECTION_STRING] — строка подключения к БД системы;
- [SITE_NAME] — название сайта системы, например, my-test-site;
- [SERVER2_IP_ADDRESS] — IP-адрес Ingress WebApi.
curl -v -X POST -d '{"databaseType": "[DATABASE_TYPE]", "databaseConnectionString": "[DATABASE_CONNECTION_STRING]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/webapi/sites/[SITE_NAME]*
- Выполнить http-запрос на подключение поиска к ранее добавленному сайту, указав:
- [SITE_NAME] — название сайта системы, например, my-test-site;
- [TEMPLATE_NAME] — название шаблона поиска, который используется в Search Engine. Перечень доступных к использованию шаблонов приведен в таблице ниже;
- [NUMBER_OF_SHARDS] — количество шардов (частей), на которые делится индекс. Это нужно для равномерного распределения нагрузки в OpenSearch. Минимальное значение — 1;
- [NUMBER_OF_REPLICAS] — количество реплик для каждого индексного шарда определяет уровень отказоустойчивости в OpenSearch. Минимальное значение — 1;
- [SERVER2_IP_ADDRESS] — IP-адрес Ingress WebApi.
curl -v -X POST -d '{"templateName": "[TEMPLATE_NAME]", "numberOfShards": [NUMBER_OF_SHARDS], "numberOfReplicas": [NUMBER_OF_REPLICAS]}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/webapi/sites/[SITE_NAME]/search
Приведенный запрос вернет URL к созданному индексу в Search Engine. URL нужно сохранить и использовать для установки значений системных настроек. Подробнее: Настройка на стороне BPMSoft
Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и http-запрос на подключение поиска, описанный выше, после чего будет выполнена полная переиндексация сайта.
Таблица 2 — Шаблоны поиска
| Шаблоны поиска | default. json | ngram_2. json | ngram_3. json | without_ngram. json |
| Поиск по части слова | – | + | + | – |
| Поиск по слову с опечатками | – | + | + | – |
| Поиск по части номера телефона в средствах связи | + | + | + | – |
| Нечеткий поиск по средствам связи | + | + | + | – |
| Поиск с перестановкой слов | + | + | + | + |
| Поиск по точному совпадению | + | + | + | + |
| Поиск по двум символам | – | + | – | – |
| Примерная скорость поиска (чем меньше, тем лучше) | 1х | 13х | 7х | <1х |
| Размер индекса на Search Engine (чем меньше, тем лучше) | 1х | 4х | 2,5х | <1х |
| Время полной первичной индексации (чем меньше, тем лучше) | 1х | 1,8х | 1,4х | <1х |
Настройка на стороне BPMSoft
На стороне BPMSoft для работы с сервисом необходимо:
- Заполнить системные настройки:
- GlobalSearchUrl — ссылка на Search.Web.Api с названием индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки: http://[SERVER2_IP_ADDRESS]:[port]/searchwebapi//[indexname]. Порт по умолчанию: 83;
- GlobalSearchConfigServiceURL — ссылка на Web.Api глобального поиска http://[SERVER2_IP_ADDRESS]:[port]/webapi. Порт по умолчанию: 81;
- GlobalSearchIndexingApiUrl — ссылка на Indexing.Web.Api глобального поиска http://[ SERVER2_IP_ADDRESS]:[port]/indexingwebapi. Порт по умолчанию: 82.
- Включить в системе функциональность глобального поиска. Для включения функциональности глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing) необходимо выполнить SQL-скрипт:
- Очистить кэш в Redis, перезапустить приложение системы и выполнить вход в приложение.
Ресурсы
Параметры Helm-пакета
Таблица 3 — Параметры Helm-пакета
| Название параметра | Описание | Значение по умолчанию |
| webApi.replicaCount | Количество реплик компонента webApi | 1 |
| webApi.service.type | Тип Service компонента webApi | ClusterIP |
| webApi.ingress.enabled | Использовать Ingress для сервиса компонента webApi | true |
| webApi.env.ignoredEntities | Список сущностей, которые не индексируются | SxLog1C,UsrVwEmployee,UsrVwEmployeeFile,VwSysProcessLog,SysPrcHistoryLog,ActivityFile,MLModel,MLModelFile,SysSettings,BtcCOMPLAINTSFile,VwWebServiceV2,Activity,UsrVwEmailActivity,CyclicTasks,CallCdr,CallCdrFile |
| indexingWebApi.replicaCount | Количество реплик компонента indexingWebApi | 1 |
| indexingWebApi.service.type | Тип Service компонента indexingWebApi | ClusterIP |
| indexingWebApi.ingress.enabled | Использовать Ingress для сервиса компонента indexingWebApi | true |
| searchWebApi.replicaCount | Количество реплик компонента searchWebApi | 1 |
| searchWebApi.service.type | Тип Service компонента searchWebApi | ClusterIP |
| searchWebApi.ingress.enabled | Использовать Ingress для сервиса компонента searchWebApi | true |
| schedulerApi.replicaCount | Количество реплик компонента schedulerApi | 1 |
| schedulerApi.env.fillQueueInterval | Интервал (в миллисекундах) между итерациями компонента schedulerApi | 30000 |
| executorApi.replicaCount | Количество реплик компонента executorApi | 2 |
| executorApi.env.indexingCommandTimeout | Время (в секундах) тайм-аута запроса в БД сайта | 900 |
| replayExecutorApi.replicaCount | Количество реплик компонента replayExecutorApi | 1 |
| queriedsingletaskExecutorApi.replicaCount | Количество реплик компонента queriedsingletaskExecutorApi | 1 |
| singletaskExecutorApi.replicaCount | Количество реплик компонента singletaskExecutorApi | 8 |
| singleExecutorApi.replicaCount | Количество реплик компонента singleExecutorApi | 12 |
| singleExecutorApi.env.indexingCommandTimeout | Время (в секундах) тайм-аута запроса в БД сайта | 10 |
| singleReplayExecutorApi.replicaCount | Количество реплик компонента singleReplayExecutorApi | 1 |
| dragonfly.server | Хост сервера Dragonfly | gs-dragonfly |
| dragonfly.port | Порт сервера Dragonfly | 6379 |
| dragonfly.database | База данных Dragonfly | 1 |
| rabbitmq.server | Хост сервера RabbitMQ | gs-rabbitmq |
| rabbitmq.httpPort | Порт сервера RabbitMQ по протоколу HTTP | 15672 |
| rabbitmq.amqpPort | Порт сервера RabbitMQ по протоколу AMQP | 5672 |
| rabbitmq. incrementDays | Количество дней, которое необходимо проиндексировать за одну итерацию планировщика. Для сравнения используются данные колонки ModifiedOn записей системы. Подробнее: Механизм обновления индекса | 50 |
| rabbitmq.user | Пользователь подключения к RabbitMQ | admin |
| rabbitmq.password | Пароль подключения к RabbitMQ | admin |
| rabbitmq. virtualHost | Виртуальный хост RabbitMQ | gs |
| db.server | Хост сервера PostgreSQL | gs-postgres |
| db.port | Порт сервера PostgreSQL | 5432 |
| db.user | Пользователь подключения к PostgreSQL | gs |
| db.password | Пароль подключения к PostgreSQL | gs |
| db.database | Название базы данных PostgreSQL | globalsearch |
| opensearch.server | Хост сервера OpenSearch | gs-opensearch |
| opensearch.port | Порт сервера OpenSearch | 9200 |
| opensearch.protocol | Используемый протокол сервера OpenSearch | http |
| opensearch. user | Пользователь подключения к OpenSearch | |
| opensearch. password | Пароль подключения к OpenSearch | |
| opensearch. scrollBatchSize | Максимальное количество результатов, которое может отдать OpenSearch за один скролл | 1000 |
| opensearch. scrollTimeout | Время (в миллисекундах), за которое OpenSearch должен отдать ответ при выполнении скролла | 60000 |
| opensearch. requestTimeoutSec | Время (в секундах), за которое сервис глобального поиска должен отдать ответ при выполнении запроса | 60 |
| opentelemetry.server | Хост сервера OpenTelemetry | gs-otel-collector |
| opentelemetry.logs.port | Порт для приема логов на сервер OpenTelemetry | 4327 |
| config.endpoints.protocol | Используемый протокол для хостов | https |
| config. endpoints. gsIndexingWebApiUrl | Хост компонента indexingWebApi | gs-prod-indexingwebapi.domain.ru |
| config. endpoints. gsSearchWebApiUrl | Хост компонента searchWebApi | gs-prod-searchwebapi.domain.ru |
| config. endpoints. gsWebApiUrl | Хост компонента webApi | gs-prod-webapi.domain.ru |
| config. generalSettings. indexingContentLength | Максимальный размер строки в индексе OpenSearch | 500 |
Скрипт включения функциональности для Microsoft SQL Server
DECLARE @GS_REIndexingFeature NVARCHAR(50) = 'GlobalSearchRelatedEntityIndexing';
DECLARE @GS_REIndexingFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE
Code = @GS_REIndexingFeature);
DECLARE @GlobalSearchFeature NVARCHAR(50) = 'GlobalSearch';
DECLARE @GlobalSearchFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchFeature);
DECLARE @GlobalSearchV2Feature NVARCHAR(50) = 'GlobalSearch_V2';
DECLARE @GlobalSearchV2FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchV2Feature);
DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
IF (@GlobalSearchFeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchFeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchFeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
END;
ELSE
BEGIN
SET @GlobalSearchFeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchFeatureId, @GlobalSearchFeature, @GlobalSearchFeature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
END;
IF (@GlobalSearchV2FeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchV2FeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchV2FeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
END;
ELSE
BEGIN
SET @GlobalSearchV2FeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchV2FeatureId, @GlobalSearchV2Feature, @GlobalSearchV2Feature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
END;
IF (@GS_REIndexingFeatureId IS NOT NULL)
BEGIN
IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GS_REIndexingFeatureId)
UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GS_REIndexingFeatureId
ELSE
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;
ELSE
BEGIN
SET @GS_REIndexingFeatureId = NEWID()
INSERT INTO Feature (Id, Name, Code) VALUES (@GS_REIndexingFeatureId, @GS_REIndexingFeature, @GS_REIndexingFeature)
INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;
↑ Вернуться к шагу Настройка на стороне BPMSoft
Скрипт включения функциональности для PostgreSQL
DO $$
DECLARE
GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
GlobalSearchFeatureId uuid;
GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
GlobalSearchV2FeatureId uuid;
GS_RelatedEntityIndexingFeature VARCHAR(50) := 'GlobalSearchRelatedEntityIndexing';
GS_RelatedEntityIndexingFeatureId uuid;
Bulk_ES_DD_Feature VARCHAR(50) := 'BulkESDeduplication';
Bulk_ES_DD_FeatureId uuid;
allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';
BEGIN
SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
WHERE "Code" = GlobalSearchFeature
LIMIT 1;
IF (GlobalSearchFeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
END IF;
ELSE
GlobalSearchFeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
END IF;
SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
WHERE "Code" = GlobalSearchV2Feature
LIMIT 1;
IF (GlobalSearchV2FeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
END IF;
ELSE
GlobalSearchV2FeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
END IF;
SELECT "Id" INTO Bulk_ES_DD_FeatureId FROM "Feature"
WHERE "Code" = Bulk_ES_DD_Feature
LIMIT 1;
SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
THEN
IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
ELSE
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
END IF;
ELSE
GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
END IF;
END $$;
↑ Вернуться к шагу Настройка на стороне BPMSoft
Рекомендуем изучить
Сервис глобального поиска
Настройка дополнительных параметров сервиса глобального поиска