Развертывание сервиса глобального поиска через Kubernetes

Продвинутый
Инструкция применима для сервиса глобального поиска версии 4.0.0.
Инструкция подходит для развертывания в своем окружении, соответствующем системным требованиям BPMSoft. При развертывании BPMSoft в инфраструктуре других облачных провайдеров необходимо учитывать особенности и возможные ограничения инфраструктуры и предоставляемых доступов. Для уточнения деталей или при возникновении вопросов рекомендуем обратиться к документации или поддержке облачного провайдера.

В статье описан механизм установки, настройки и проверки сервиса глобального поиска через Kubernetes. Описание сервиса глобального поиска представлено в статье Сервис глобального поиска.

Для получения файлов развертывания сервиса обратитесь в Техническую поддержку BPMSoft.

Подготовка к развертыванию

Перед установкой пакета сервиса глобального поиска выполните следующее:

  1. Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
  2. Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
  3. Для работы необходимо настроить:
    • Кластер Kubernetes. Подробно о том, как настроить и администрировать кластер, читайте на сайте документации Kubernetes;
    • Пакетный менеджер Helm. Установка пакетного менеджера подробно описана на сайте документации Helm.
  4. Перед установкой сервиса глобального поиска в Kubernetes рекомендуется выполнить установку компонентов мониторинга. Подробнее: Мониторинг производительности сервиса глобального поиска.
  5. Проверьте и скорректируйте при необходимости параметры helm-пакета. Подробнее: Параметры helm-пакета.
  6. Выполните удаление предыдущего релиза сервиса глобального поиска, если он у вас установлен. Подробнее: Удаление предыдущего релиза.
  7. Создайте namespace и добавьте необходимые секреты. Подробнее: Создание namespace и добавление необходимых секретов.
  8. Установите инфраструктурные компоненты, необходимые для работы сервиса глобального поиска. Подробнее: Развертывание инфраструктурных компонентов.
  9. Убедитесь, что в файле ConnectionStrings.config на стороне BPMSoft присутствует параметр elasticsearchCredentials.

После выполнения предварительных действий можно выполнить установку сервиса глобального поиска. Подробнее: Развертывание сервиса глобального поиска.

Микросервис рекомендуется развертывать на выделенной виртуальной машине, недоступной из внешней сети. Следует открыть только порты, необходимые для взаимодействия с основным приложением, и разрешить подключения к ним только с IP-адресов серверов основного приложения.

Удаление предыдущего релиза

Для удаления предыдущего релиза сервиса глобального поиска выполните следующее:

  1. Получите список установленных релизов, выполнив команду:
helm ls --namespace gs
  1. Выполните удаление развертывания сервиса глобального поиска, выполнив команду:
helm uninstall gs --namespace gs

Чтобы полностью удалить RabbitMQ, OpenSearch и PostgreSQL, выполните следующие шаги:

  1. Войдите в Lens и перейдите в раздел Persistent Volume Claims. Выберите нужное пространство имен и удалите все Persistent Volume Claims, связанные с RabbitMQ, OpenSearch и PostgreSQL.
  2. Перейдите в Lens → Persistent Volumes и удалите все Claim, связанные с RabbitMQ, OpenSearch и PostgreSQL, у которых статус Released.

Создание namespace и добавление необходимых секретов

  1. Добавьте namespace, выполнив следующую команду:
kubectl create namespace gs
  1. Если используется свой прокси-репозиторий, то добавьте секрет, выполнив команду:
kubectl create secret docker-registry regcred --docker-server=repo.bpmsoft.ru --docker-username=<Пользователь> --docker-password=<Пароль> --namespace gs

Вместо repo.bpmsoft.ru можно указать свой прокси-репозиторий, а вместо <Пользователь> и <Пароль> — ваши данные.

Примечание. По умолчанию в helm-чарте сервиса глобального поиска используется репозиторий docker.io. Рекомендуется использовать прокси-репозитории для docker-образов и helm-чартов для повышения надежности инфраструктуры, чтобы не зависеть от доступности к ПО через сеть Интернет.

Развертывание инфраструктурных компонентов

Необходимо выполнить установку инфраструктурных компонентов, указанных в таблице ниже.

Примечание. Микросервисная архитектура строится на принципах независимости и автономности, поэтому совместное использование одного компонента несколькими микросервисами не допускается.

Таблица 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 выполните следующее:

  1. Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
  1. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/postgresql --version 16.6.2 --untar
  1. В результате выполнения команды, появится директория postgresql с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd postgresql
  1. Выполните команду для развертывания 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 образов.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/. При этом не потребуется указывать параметры global.security.allowInsecureImages, image.pullSecrets и global.imageRegistry.

Для обновления релиза 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:

  1. Получите список релизов, выполнив команду:
helm ls --namespace gs
  1. Удалите репозиторий PostgreSQL:
helm uninstall postgresql --namespace gs
  1. Через Lens удалите все PVC, относящиеся к PostgreSQL.

Установка RabbitMQ

Для развертывания RabbitMQ выполните следующее:

  1. Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
  1. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/rabbitmq --version 15.5.1 --untar
  1. В результате выполнения команды, появится директория rabbitmq с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd rabbitmq
  1. Выполните команду для развертывания 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.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/. При этом не потребуется указывать параметры global.security.allowInsecureImages, image.pullSecrets и global.imageRegistry.

Для обновления релиза 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:

  1. Получите список релизов, выполнив команду:
helm ls --namespace gs
  1. Удалите репозиторий RabbitMQ:
helm uninstall rabbitmq --namespace gs
  1. Через Lens удалите все PVC, относящиеся к RabbitMQ.

Установка Dragonfly

Для развертывания Dragonfly выполните следующее:

  1. Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
  1. Выполните команду:
helm pull oci://<docker.company.ru>/ghcr.io/dragonflydb/dragonfly-operator/helm/dragonfly-operator --version v1.1.11 --untar
  1. В результате выполнения команды, появится директория dragonfly-operator с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd dragonfly-operator
  1. Выполните команду для развертывания 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 для сервиса глобального поиска.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/. При этом не потребуется указывать параметры image.pullSecrets и image.repository.
  1. Перейдите в директорию, где будет располагаться манифест 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 после удаления или перезапуска. После этого синхронизация с мастером возобновляется, и реплика получает обновления за прошедшее время.
  1. Для применения манифеста и развертывания Dragonfly выполните команду:
kubectl apply -f gs-dragonfly-ha.yaml -n <gs namespace>

Здесь namespace — это имя namespace, куда планируется установка Dragonfly.

Для удаления релиза Dragonfly:

  1. Выполните команду из директории, где находится манифест gs-dragonfly-ha.yaml:
kubectl delete -f gs-dragonfly-ha.yaml -n <gs namespace>
  1. Получите список релизов, выполнив команду:
helm ls --namespace <dragonfly-operator-system namespace>
  1. Удалите Dragonfly operator:
helm uninstall dragonfly-operator --namespace <dragonfly-operator-system namespace>
  1. Через Lens удалите все PVC, относящиеся к Dragonfly.

Установка OpenSearch

Для развертывания OpenSearch выполните следующее:

  1. Войдите в OCI-прокси-репозиторий вашей компании, выполнив команду:
helm registry login <docker.company.ru>
  1. Выполните команду:
helm pull oci://<docker.company.ru>/hub.docker.com/bitnamicharts/opensearch --version 1.9.1 --untar
  1. В результате выполнения команды, появится директория opensearch с helm chart. Перейдите в директорию, в которой будет располагаться helm chart:
cd opensearch
Примечание. Во время установки OpenSearch выполняет настройки и запускает привилегированный initContainer. В Deckhouse можно разрешить запуск такого контейнера, добавив следующую метку в namespace перед установкой 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
  1. Выполните команду для развертывания 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 — опциональный параметр. Его использование рекомендуется только при наличии специальных указаний.
Примечание. В особых случаях нужно использовать оригинальный репозиторий oci://registry-1.docker.io/. При этом не потребуется указывать параметры global.security.allowInsecureImages, image.pullSecrets и global.imageRegistry.

Для обновления релиза 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:

  1. Получите список релизов, выполнив команду:
helm ls --namespace gs
  1. Удалите репозиторий OpenSearch:
helm uninstall opensearch --namespace gs
  1. Через Lens удалите все PVC, относящиеся к OpenSearch.

Развертывание сервиса глобального поиска

Для установки компонентов сервиса глобального поиска выполните следующее:

  1. Распакуйте helm пакет из архива, который вы получили в технической поддержке BPMSoft, и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Перед развертыванием необходимо ознакомиться с выбранным профилем и внести в него корректировки как минимум для следующих параметров:
    • 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 поддерживает профилирование. Для ознакомительного развертывания рекомендуется использовать профиль demo. Файл demo.yaml находится в папке resource-profiles. Можно создать собственный профиль, скопировав demo в новый файл в той же папке и дав ему новое имя. Не забудьте указать это имя в переменной global.profile в новом созданном файле профиля.
  1. Для развертывания приложений сервиса глобального поиска выполните одну из следующих команд на выбор:
Для развертывания с использованием параметров из файла values.yaml, находящегося в корне helm чарта
helm install gs . \
     --namespace gs
Для развертывания с использованием параметров из файла demo.yaml, находящегося в папке resource-profiles
helm install gs . \
     --namespace gs \
     --set global.profile="demo"
Для развертывания с использованием параметров из файла demo.yaml, находящегося в папке resource-profiles, с заменой значений для перечисленных параметров
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.

Откат изменений

Для отката изменений выполните следующее:

  1. Получите список релизов, выполнив команду:
helm ls --namespace gs
  1. Для удаления развертывания сервиса глобального поиска, выполните следующую команду:
helm uninstall gs --namespace gs

namespace и secret удалять не нужно.

  1. Создайте директорию gs-old:
mkdir gs-old
  1. Распакуйте helm пакет с предыдущей версией глобального поиска и перейдите в директорию, где будет располагаться распакованный пакет.
  2. Выполните команду для развертывания приложений сервиса глобального поиска:
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" и происходить рестарты подов.

Настройка сервиса глобального поиска

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

  1. Для выполнения http-запросов необходимо установить инструмент curl. В терминале надо выполнить команду apt-get install curl или yum install curl.
  1. Выполнить 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]*
  1. Выполнить 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

Создание индекса напрямую в поисковом движке OpenSearch может привести к некорректной работе сервиса. Рекомендуется использовать POST-запрос, указанный выше в инструкции.

Чтобы изменить шаблон поиска, выполните 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 для работы с сервисом необходимо:

  1. Заполнить системные настройки:
    • 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.
  1. Включить в системе функциональность глобального поиска. Для включения функциональности глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing) необходимо выполнить SQL-скрипт:
  1. Очистить кэш в Redis, перезапустить приложение системы и выполнить вход в приложение.
Примечание. Для подключения нескольких сайтов к одному серверу глобального поиска необходимо выполнить шаги Настройка сервиса глобального поиска и Настройка на стороне BPMSoft для каждого сайта отдельно. Обратите внимание, что при добавлении нового сайта может возрасти нагрузка на сервер, где размещен сервис.

Ресурсы

Параметры 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

MSSQL_GlobalSearch_FeatureToggle.sql
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

PostgreSQL_GlobalSearch_FeatureToggle.sql
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

Рекомендуем изучить

Сервис глобального поиска
Настройка дополнительных параметров сервиса глобального поиска

Материал был полезен для вас?
Запросить демонстрацию
Купить приложение
Заявка на индивидуальный тренинг
Заявка на обучение в формате тренинга
Заявка на консультацию по обучению
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Вебинар: 10 ноября в 11:00
Разберём, как повысить эффективность управления ИТ-инфраструктурой с помощью ITSM и Service Desk. Обсудим, как сократить операционные затраты и ускорить бизнес-процессы в 2 раза, на реальном опыте ПАО «Трубная металлургическая компания» (ТМК) и Группы Rubytech.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Регистрация на мероприятие
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Предпочитаемый способ связи
Оставить заявку
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Рассчитать стоимость
Предпочитаемый способ связи
Лучшие CRM-системы в России: выводы Фонда «Сколково»
Задать вопрос
Предпочитаемый способ связи
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Заявка на онлайн-консультации по BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Стать образовательным партнёром
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Внимание!
Обнаружена ошибка.
Вы подписаны на новостную рассылку от BPMSoft.
Вы подписаны на новостную рассылку от BPMSoft.
MAX Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее