Перейти к содержанию

Argus

В данном разделе приведены сведения о Argus, плагине для СУБД Picodata.

Picodata Enterprise

Функциональность плагина доступна только в коммерческой версии Picodata.

Общие сведения

Плагин Argus используется для синхронизации учётных данных между сервером LDAP/LDAPS и Picodata. Синхронизация происходит однонаправленно и позволяет импортировать данные пользователей и групп с сервера LDAP в Picodata, для которой перед этим была настроена авторизация с помощью LDAP/LDAPS.

Начиная с версии 3.0.0, синхронизацию в кластере выполняет только один инстанс — текущий raft-лидер. На остальных инстансах, где установлен сервис плагина, он находится в спящем режиме: не подключается к серверу LDAP и не выполняет синхронизацию. При смене raft-лидера прежний лидер останавливает синхронизацию, а новый — её запускает. Во время сбоев в кластере синхронизацию могут кратковременно выполнять несколько инстансов одновременно; в штатном состоянии кластера она всегда выполняется на одном инстансе.

Внимание!

В версиях Argus до 3.0.0 синхронизация выполнялась на мастер-репликах всех репликасетов, в которых был установлен сервис плагина.

Соответствие версий Picodata и Argus

Для разных версий плагина Argus требуются определённые версии Picodata. Ниже приведена таблица совместимости:

Argus Picodata ФСТЭК-сертификат
2.1.2 25.2.2 ✅
2.2.5 25.5.7 (25.5.*)
2.3.1 26.1.* ✅
3.0.0 26.2.*

См. также:

Состав плагина

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

└── argus
    └── 3.0.0
        ├── libargus.so
        └── manifest.yaml

Основная логика плагина обеспечивается разделяемой библиотекой libargus.so. Исходная конфигурация плагина задаётся в файле манифеста (manifest.yaml).

Предварительные настройки в Picodata

Перед использованием плагина Argus убедитесь, что на стороне Picodata:

  • созданы роли (соответствующие группам пользователей в каталоге LDAP), и ролям выданы нужные привилегии
  • настроено подключение к серверу LDAP

Подключение плагина

Содержимое архива с плагином следует распаковать в любую удобную директорию, которую после этого нужно будет указать как SHARE_DIR для инстанса Picodata.

При запуске одного инстанса из командной строки директорию плагина можно указать с помощью параметра:

picodata run --share-dir=<SHARE-DIR> ...

Однако для полноценного использования плагина рекомендуется запускать кластер с помощью роли Ansible.

После запуска Picodata с поддержкой плагинов в заданной директории подключитесь к административной консоли инстанса Picodata.

Установите плагин, добавьте его сервис в тир и затем включите плагин с помощью следующих SQL-команд:

CREATE PLUGIN argus 3.0.0;
ALTER PLUGIN argus 3.0.0 ADD SERVICE argus TO TIER default;
ALTER PLUGIN argus 3.0.0 ENABLE;

Сервис плагина следует добавлять только в тиры, инстансы которых участвуют в голосовании на выборах raft-лидера, то есть в тиры с параметром can_vote, равным true. Если в кластере используется отдельный тир-арбитр, рекомендуется добавлять сервис в него.

Внимание!

При запуске сервис плагина проверяет значение can_vote своего тира в системной таблице _pico_tier. Если сервис добавлен в тир с can_vote: false, его запуск завершится ошибкой и включение плагина будет отменено во всём кластере.

Примечание

После запуска плагин Argus выполняет синхронизацию только на raft-лидере кластера. На остальных инстансах сервис плагина находится в спящем режиме.

Для диагностики работы плагина обратитесь к отладочному журналу инстанса Picodata.

Проверка с помощью Ansible

Подготовка

  1. Изучите документацию по развёртыванию кластера Picodata. Выполните инструкции по установке роли.
  2. Скачайте нужную версию плагина argus и положите пакет в рабочую директорию.
  3. Проверьте наличие конфигурационного файла для плагина argus_config.yml и настройки в нём.

Примечание

На сервере, с которого будет происходить установка, необходим Ansible и доступ на серверы кластера с повышением привилегий.

Установка окружения

Создайте файл с описанием кластера согласно руководству по развёртыванию кластера. Ниже приведён пример для четырёх серверов, расположенных в трёх группах (DC1, DC2 и DC3). Группа — отдельный домен отказа.

argus.yml
all:
  vars:
    ansible_user: vagrant      # пользователь для SSH-доступа к серверам

    repo: 'https://download.picodata.io'  # репозиторий, откуда инсталлировать пакет picodata

    cluster_name: 'demo'           # имя кластера
    admin_password: '123asdZXV'    # пароль пользователя admin

    default_bucket_count: 23100    # количество бакетов в каждом тире (по умолчанию 30000)

    audit: false                   # отключение аудита
    log_level: 'info'              # уровень отладки
    log_to: 'file'                 # вывод журналов в файлы, а не в journald

    conf_dir: '/etc/picodata'         # директория для хранения конфигурационных файлов
    data_dir: '/var/lib/picodata'     # директория для хранения данных
    run_dir: '/var/run/picodata'      # директория для хранения sock-файлов
    log_dir: '/var/log/picodata'      # директория для журналов и файлов аудита
    share_dir: '/usr/share/picodata'  # директория для хранения служебных данных (плагинов)

    listen_address: '{{ ansible_fqdn }}'     # адрес прослушивания инстанса. Для IP укажите {{ansible_default_ipv4.address}}
    pg_address: '{{ listen_address }}'       # адрес, по которому инстанс будет принимать подключения по PostgreSQL-протоколу

    first_bin_port: 13301     # начальный бинарный порт для первого инстанса
    first_http_port: 18001    # начальный http-порт для первого инстанса для веб-интерфейса
    first_pg_port: 15001      # начальный номер порта для PostgreSQL-протокола инстансов кластера

    tiers:                         # описание тиров
      arbiter:                     # имя тира
        replicaset_count: 1        # количество репликасетов
        replication_factor: 1      # фактор репликации
        config:
          memtx:
            memory: 64M            # количество памяти, выделяемое каждому инстансу тира
        host_groups:
          - ARBITERS               # целевая группа серверов для установки инстанса

      default:                     # имя тира
        replicaset_count: 3        # количество репликасетов
        replication_factor: 3      # фактор репликации
        bucket_count: 16384        # количество бакетов в тире
        config:
          memtx:
            memory: 71M            # количество памяти, выделяемое каждому инстансу тира
        host_groups:
          - STORAGES               # целевая группа серверов для установки инстанса

    db_config:                     # параметры конфигурации кластера https://docs.picodata.io/picodata/stable/reference/db_config/
      governor_auto_offline_timeout: 30
      iproto_net_msg_max: 500
      memtx_checkpoint_count: 1
      memtx_checkpoint_interval: 7200

    plugins:
      argus:                                    # плагин
        path: '../plugins/argus_3.0.0.tar.gz'   # путь до пакета плагина
        config: '../plugins/argus_config.yml'   # путь до файла с настройками плагина
        services:
          argus:
            tiers:                              # список тиров, в которые устанавливается сервис плагина. Только тиры с can_vote: true
              - default                         # по умолчанию — default

    GROUP1:                             # Группа серверов (failure_domain)
      hosts:                            # серверы в группе
        server-1-1:                     # имя сервера в инвентарном файле
          ansible_host: '192.168.19.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
          host_group: 'STORAGES'        # определение целевой группы серверов для установки инстансов

        server-1-2:                     # имя сервера в инвентарном файле
          ansible_host: '192.168.19.22' # IP-адрес или fqdn если не совпадает с предыдущей строкой
          host_group: 'ARBITERS'        # определение целевой группы серверов для установки инстансов

    GROUP2:                             # Группа серверов (failure_domain)
      hosts:                            # серверы в группе
        server-2-1:                     # имя сервера в инвентарном файле
          ansible_host: '192.168.20.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
          host_group: 'STORAGES'        # определение целевой группы серверов для установки инстансов

    GROUP3:                             # Группа серверов (failure_domain)
      hosts:                            # серверы в группе
        server-3-1:                     # имя сервера в инвентарном файле
          ansible_host: '192.168.21.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
          host_group: 'STORAGES'        # определение целевой группы серверов для установки инстансов

Создайте файл с конфигурацией. Пример:

argus_config.yml
argus:
    interval_secs: 60                         # Как часто опрашивать LDAP для синхронизации пользователей и ролей. Значение в секундах
    ldap:                                     # Настройки подключения к LDAP:
      bind_dn: "cn=admin,dc=example,dc=org"   # Учётная запись, под которой Argus будет подключаться к LDAP-серверу
      bind_password: "admin"                  # Пароль этого пользователя
      url: "ldap://localhost:389"             # Ссылка на LDAP-сервер
      disabled_attr: "employeeType"           # Название атрибута, который используется для отключения, но не удаления пользователей. Если значение этого атрибута для пользователя равно `true`, Argus отключит его и в Picodata
      tries: 1                                # Число попыток подключения к LDAP-серверу. Для небольших интервалов рекомендуем оставить `1`

      searches:                               # Поисковые запросы и их соответствие ролям:
          - role: "reader"                    # Название роли в Picodata, которая синхронизируется данным запросом
            base: "dc=example,dc=org"         # База поиска (объект вашего LDAP-каталога, с которого начнётся поиск)
            filter: "(&(objectClass=inetOrgPerson)(businessCategory=reader))" # Фильтр для поиска
            attr: "cn"                        # Атрибут, в котором находится имя пользователя, которое будет использоваться в Picodata

Подготовьте плейбук:

picodata.yml
---
- name: Deploy Picodata cluster
  hosts: all
  become: true

  tasks:
    - name: Import picodata-ansible role
      ansible.builtin.import_role:
        name: picodata-ansible

В результате в рабочей директории должно быть 4 файла:

  • argus.yml
  • picodata.yml
  • argus_config.yml
  • argus_xxxxx.tar.gz

Запустите развёртывание Argus:

ansible-playbook -i argus.yml picodata.yml

См. также:

Журнал изменений

3.0.0 - 2026-10-07

Новая функциональность

  • Ограничены инстансы, на которых работает Argus

Исправления

  • Улучшено выключение файбера при disable/enable
  • Pike обновлён до 5.7.0

Зависимости

  • Обновлены зависимости и Picodata до 26.2.1
  • Обновлены зависимости и Picodata до 26.1.6

Прочее

  • Пайплайн унифицирован с остальными плагинами
  • Добавили регулярную проверку зависимостей
  • Перенесены наработки по CI из Radix
  • Ограничиваем список ОС для джобы deploy-certified-build

Lint

  • Исправлены предупреждения 1.97

2.3.1 - 2026-05-22

Зависимости

  • Picodata обновлена до 26.1.3

2.3.0 - 2026-04-01

Новая функциональность

  • 👷 добавлена проверка SBOM-метаданных

Тестирование

  • Исправлено условие проверки в тесте

Зависимости

  • Обновлена Picodata до 26.1.1

Прочее

  • Заводим тесты на всех поддерживаемых ОС
  • Исправлено название команды pico-stop
  • Добавлена возможность запуска deploy-certified-build для ручных пайплайнов
  • Добавлен сбор артефактов с джобы sbom-checker
  • Проверка SBOM встроена в gitlab
  • 🔒 добавлены метаданные для sbom-checker
  • Добавлена генерация SBOM-файлов
  • ⬆ обновим все зависимости перед сертификацией
  • Fix sonarqube job do not use old gamayun token
  • Fix branch name for sonarqube report download

Build

  • Добавлена debian:trixie
  • Убрана сборка ubuntu focal, эта ОС больше нами не поддерживается
  • 👷 переменные окружения для сборки вынесены в файл .env

2.2.5 - 2026-02-17

Прочее

  • Добавлено ожидание полной проверки sonarqube'ом

Build

  • 📦 добавлена поддержка alt:p11, пропущенная ранее

2.2.4 - 2026-02-16

Исправления

  • 🔒 обновлена библиотека bytes

Внутренние улучшения

  • Линты разбиты на отдельные
  • ✅ удалён неиспользуемый параметр, переименован тест

Прочее

  • Add pack-sources and deploy-certified-build jobs
  • Исправлены ошибки в условиях запуска джобов
  • 👷 make заменён на just
  • Replace gamayun with sonarqube
  • Обновлены заголовки лицензий

Build

  • 📦 добавлена поддержка fedora:43, alt:p11 и osnova onyx:3
  • 📦 удалена поддержка fedora:41 в связи с её EOL

Lint

  • Добавлен конфиг для cargo audit
  • Добавлен конфиг для cargo deny

2.2.3 - 2025-12-29

Исправления

  • 📦 обновил механизм определения пути плагина

Документация

  • 📝 обновлена документация о процессе разработки

Зависимости

  • Обновил пикодату до 25.5.2

2.2.2 - 2025-10-14

Внутренние улучшения

  • 🚨 poetry deps fix

Зависимости

  • Picodata 25.4.2

Прочее

  • Добавим тег docker бендеру

2.2.1 - 2025-09-29

Исправления

  • 🐛 убраны проверки имён пользователей в Argus

Прочее

  • Улучшен вывод сообщения о релизе в Телеграм

2.2.0 - 2025-09-11

Новая функциональность

  • Use psycopg to login via LDAP

Исправления

  • Разрешим использовать однобуквенные имена
  • 🐛 исправим обработку имён пользователей

Тестирование

  • ♻ получаем версию плагина из пикодаты во время тестов

Зависимости

  • Picodata 25.3.4

Прочее

  • Remove PIKE_DATA_DIR from build

2.1.4 - 2025-08-18

Прочее

  • Bump picodata to 25.3.2
  • Add ldaps testing

2.1.3 - 2025-07-30

Документация

  • Исправим ссылку на настройку LDAP

Внутренние улучшения

  • ⬆️ обновляю picodata-plugin до 25.3.1

Тестирование

  • ⬇ наши тестовые образы содержат только Python 3.11

Прочее

  • Добавил проверку копирайтов в заголовках файлов
  • Добавил лицензию и копирайты

2.1.2 - 2025-06-25

Внутренние улучшения

  • ⬆ запускаю cargo update для обновления версии tokio
  • ⬆ обновляю picodata-plugin до 25.2.2

Прочее

  • Останавливаем кластер перед выключением тестов
  • Удалим локальный docker-compose из гамаюна из-за false positive

Build

  • 👷 разрешаю ставить плагин в неправильную версию пикодаты

2.1.1 - 2025-06-23

Прочее

  • Передаём предыдущую версию в Гамаюн.
  • 🚨 поправим некоторые замечания Гамаюна
  • Внедряю Гамаюн, как и в Radix

2.1.0 - 2025-06-04

Новая функциональность

  • Теперь Argus работает только на мастерах
  • ⬆ closes #17, обновляю picodata plugin до 25.2.1

Исправления

  • Заполняем версию в тикет в кору

Документация

  • Closes #14, переношу документацию пользовательскую в docs/user

Внутренние улучшения

  • 🚨 поправлю замечания linter'а

Структура кода

  • Добавляю питоновую типизацию

2.0.3 - 2025-05-06

Исправления

  • 🐛 исправим экранировку

2.0.2 - 2025-05-06

Исправления

  • 🐛 исправим многострочный скрипт, пропущено "\"

2.0.1 - 2025-05-06

Прочее

  • 👷 добавим создание тикетов по факту релиза
  • Move bender to MarkdownV2

web.1.0.0.4.g486a5ae - 2025-04-30

Документация

  • 📝 написал инструкцию для пользователя и для программиста

Прочее

  • 👷 перенесём все зависимости в базовый образ
  • Deploy packages to PDG repo (EE)

Build

  • Move to picodata 25.1 and pike

1.0.0 - 2024-12-28

Новая функциональность

  • Make it plugin
  • Ci-cd
  • Add enable disable functionality
  • Add roles to users
  • Add username validation
  • Add staff for demo
  • Add dockerfiles and readme
  • Add ldap-picodata sync

Исправления

  • 🐛 исправлен запрос проверки, отключён юзер или нет
  • 🐛 не пытаемся синхронизировать pico_service

Документация

  • Add docs

Внутренние улучшения

  • Удалим отдельный cbus_endpoint.
  • Remove old tests
  • 🔊 добавил логов и убрал лишние кавычки из запросов
  • 🏗 переписано на plugin sdk, исправлены явные паники

Тестирование

  • ✅ вернули полный тест сьют, поправили баги
  • 🧪 написал два простых теста на подключение к пикодате
  • ⬆ обновил зависимости
  • 🗃 добавили пользователей в тестовый контейнер
  • 🧪 подготовим почву для написания тестов
  • ✅ добавим заглушку для тестов

Прочее

  • 👷 picodata, screen & ldap
  • 🔨 добавим direnv layout для питоновых тестов
  • ➕ ссылаемся на релизный СДК плагинов пикодаты
  • ⬆ используем новую версию CI
  • Up rust version
  • Up rust version
  • Fix docker image

Build

  • ♻ зачистим .dockerignore
  • 📌 будем держать cargo.lock в репе