Распределенная база данных досье

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

В текущей реализации FindFace Multi распределенная база данных досье реализована следующим образом. База данных досье доступна для редактирования только на главном сервере, т. н. master-сервере. Master-сервер синхронизирован с несколькими дополнительными slave-экземплярами FindFace Multi. На slave-серверах база данных досье доступна только для чтения и мониторинга.

Важно

Досье можно удалить на slave-сервере, если master-сервер недоступен.

Важно

Если список наблюдения на будущем slave-сервере уже содержит досье, синхронизация будет отменена. Убедитесь, что список наблюдения пуст.

Предупреждение

На серверах master и slave должна использоваться одна и та же нейронная сеть.

В этом разделе:

Настройка синхронизации Master/Slave

Для настройки синхронизации master/slave выполните следующие действия:

  1. На master-сервере откройте файл конфигурации /etc/findface-security/config.py. Придумайте токен синхронизации и укажите его в параметре SYNC_TOKEN (предварительно раскомментируйте его).

    sudo vi /etc/findface-security/config.py
    
    ...
    
    # ========== DossierLists sync ===========
    ...
    # token must be identical on master and slave
    # use pwgen -s 64 1
    SYNC_TOKEN = 'ABC_123456789'
    ...
    
  2. На slave-серверах раскомментируйте параметр SYNC_TOKEN в файле конфигурации /etc/findface-security/config.py и вставьте в него созданный токен синхронизации. Токены на master- и slave-серверах должны быть идентичны.

Синхронизация master/slave теперь настроена и будет активирована, как только вы настроите репликацию списка наблюдения с master-сервера на slave.

Репликация списка наблюдения master -> slave

Для того чтобы реплицировать список наблюдения от master-сервера на slave-экземпляры, отправьте на slave POST-запрос со следующими параметрами в теле:

  • remote_dossier_list: id исходного списка наблюдения на master-сервере

  • remote_url: URL master-сервера

  • slave_dossier_list: id списка наблюдения на slave-сервере, который будет репликой исходного списка наблюдения

POST /sync/dossier-lists/
{remote_dossier_list: 1,
remote_url: "http://172.17.46.14",
slave_dossier_list: 3}

Задание времени синхронизации

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

  1. Откройте файл конфигурации /etc/findface-security/config.py на master-сервере.

    sudo vi /etc/findface-security/config.py
    
  2. Раскомментируйте и задайте следующие параметры:

    • SYNC_SCHEDULE: рекуррентное правило (RRULE), задающее расписание синхронизации.

      Совет

      См. калькулятор RRULE.

    • SYNC_AT_STARTUP: если True, синхронизация выполняется при запуске и перезагрузке FindFace Multi.

    • SYNC_AT_CREATION: если True, синхронизация выполняется сразу после того, как вы ее создали для списка наблюдения.

    ...
    
    # ========== DossierLists sync ===========
    ...
    
    # rrule that defines sync schedule
    SYNC_SCHEDULE = 'RRULE:FREQ=DAILY;WKST=MO;BYHOUR=11;BYMINUTE=0'
    # if True synchronization will occur on FindFace Security startup and restart
    SYNC_AT_STARTUP = True
    # if True synchronization will occur immediately after creating synchronization for dossier list
    SYNC_AT_CREATION = True
    
  3. Раскомментируйте приведенные выше параметры на каждом slave-сервере. Значения параметров могут быть любыми.

Отмена репликации и синхронизации списка наблюдения

Для того чтобы отменить репликацию и синхронизацию списка наблюдения, отправьте на slave-сервер API-запрос с {id} соответствующего списка на slave-сервере:

DELETE /sync/dossier-lists/{id}/

Включение функционала в веб-интерейсе

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

  1. Откройте файл конфигурации /etc/findface-security/config.py на master-сервере.

    sudo vi /etc/findface-security/config.py
    
  2. Включите плагин ffsecurity_sync, раскомментировав строку INSTALLED_APPS.append (‘ffsecurity_sync’) в разделе плагинов:

    ...
    
    # ========== DossierLists sync ===========
    INSTALLED_APPS.append('ffsecurity_sync')
    ...
    
  3. Выполните аналогичные действия на каждом slave-сервере.

  4. На каждом сервере выполните перенос основной архитектуры базы данных из FindFace Multi в PostgreSQL. Заново создайте группы пользователей в основной базе данных. Перезапустите сервис findface-security.

    sudo findface-security migrate
    sudo findface-security create_groups
    sudo systemctl restart findface-security.service