Установка tntapi

Компонент tntapi соединяет базу данных Tarantool и компонент findface-facenapi, передавая результаты поиска от базы данных в findface-facenapi для дальнейшей обработки. Для увеличения скорости поиска на каждом сервере с базой данных Tarantool могут быть созданы многочисленные сегменты (шарды) tntapi. Их параллельное функционирование приводит к значительному увеличению производительности. Каждый шард может обрабатывать приблизительно до 10 000 000 лиц. Если FindFace Enterprise Server SDK развертывается на одном сервере, одного шарда, созданного по умолчанию, будет достаточно. При развертывании в кластерной среде количество шардов рассчитывается в зависимости от нескольких параметров (см. ниже).

Установка tntapi на одном сервере

Установите и настройте компонент tntapi следующим образом:

  1. Установите компонент tntapi. База данных Tarantool будет установлена автоматически вместе с ним.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  3. Поскольку один шард может обрабатывать до 10 000 000 лиц, для обслуживания небольших проектов до 1 000 000 лиц будет достаточно задействовать шард tntapi, созданный по умолчанию (tarantool@FindFace). Настройки конфигурации данного шарда задаются в файле /etc/tarantool/instances.enabled/FindFace.lua. Настоятельно рекомендуется ничего не добавлять и не редактировать в данном файле, за исключением максимального использования оперативной памяти (memtx_memory), IP-адреса локального сервера лицензий NTLS, необходимого для лицензирования tntapi, а также настроек удаленного доступа. Максимальное использование памяти задается в байтах в зависимости от количества лиц, обрабатываемых шардом, исходя из соотношения примерно 1280 байт на 1 лицо.

    Откройте файл конфигурации:

    sudo vi /etc/tarantool/instances.enabled/FindFace.lua
    

    Отредактируйте значение в зависимости от количества лиц, обрабатываемых шардом. Значение 1.2*1024*1024*1024 соответствует 1 000 000 лиц:

    memtx_memory = 1.2 * 1024 * 1024 * 1024,
    

    Укажите IP-адрес сервера NTLS, если он удаленный:

    FindFace.start(“127.0.0.1”, 8001, {license_ntls_server=“192.168.113.2:3133”})
    

    Если Сервер FindFace развертывается на одиночном физическом сервере, база данных Tarantool по умолчанию будет доступна только локально (127.0.0.1). Если необходимо открыть доступ к базе данных Tarantool с удаленного сервера, в разделе FindFace.start укажите IP-адрес определенного сервера, либо измените 127.0.0.1 на 0.0.0.0, чтобы разрешить доступ к базе данных Tarantool со всех IP-адресов. В примере ниже доступ возможен только с IP-адреса 192.168.113.10:

    FindFace.start("192.168.113.10", 8001, {license_ntls_server=“192.168.113.2:3133”})
    

    Здесь доступ возможен с любого IP-адреса:

    FindFace.start("0.0.0.0", 8001, {license_ntls_server=“192.168.113.2:3133”})
    
  4. Добавьте шард tntapi в автозагрузку Ubuntu и запустите шард.

    sudo systemctl enable tarantool@FindFace && sudo systemctl start tarantool@FindFace
    
  5. Убедитесь, что шард активен. Команда вернет описание сервиса, его статус (должен быть Активен), путь и длительность текущей сессии.

    sudo systemctl status tarantool@FindFace
    

    Совет

    Для того чтобы отобразить логи tntapi, выполните команду:

    sudo tail -f /var/log/tarantool/FindFace.log
    
  6. Файл tntapi.json с описанием параметров шарда автоматически устанавливается вместе с компонентом tntapi в папку /etc.

    Важно

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

Установка tntapi на кластере серверов

Установите и настройте компонент tntapi следующим образом:

  1. Установите компонент tntapi на выделенных серверах. База данных Tarantool будет установлена автоматически вместе с ним.

    sudo apt-get update
    sudo apt-get install findface-tarantool-server
    
  2. Создайте шарды tntapi на каждом сервере. Процедура шардинга будет рассмотрена на примере кластерной среды, содержащей 4 сервера под базу данных, на каждом из которых нужно создать по 4 шарда.

    Важно

    При создании шардов для крупных проектов соблюдайте следующие правила:

    1. Один шард может обрабатывать приблизительно 10 000 000 лиц.
    2. Количество шардов на одном сервере не должно превышать число физических ядер процессора минус 1.
  3. Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.

    sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
    
  4. На каждом из 4-х серверов отключите созданный по умолчанию шард.

    sudo systemctl disable tarantool@FindFace
    
  5. Напишите bash-скрипт shard.sh, который автоматически создаст шарды и файлы конфигурации для каждого из них. Скрипт должен быть написан для каждого из 4-х серверов. Используйте приведенный ниже скрипт как основу для своего кода. Данный скрипт создает на сервере 4 шарда, использующие порты: tntapi 33001..33004 и http 8001..8004.

    Важно

    Скрипт создает файлы конфигурации на основе настроек по умолчанию, хранящихся в файле /etc/tarantool/instances.enabled/FindFace.lua. Настоятельно рекомендуется ничего не добавлять и не редактировать в этом файле, за исключением максимального использования оперативной памяти (memtx_memory) и IP-адреса локального сервера лицензий NTLS, необходимого для лицензирования tntapi. Максимальное использование памяти задается для каждого шарда в байтах в зависимости от количества лиц, обрабатываемых шардом, исходя из соотношения примерно 1280 байт на 1 лицо.

    Откройте файл конфигурации:

    sudo vi /etc/tarantool/instances.enabled/FindFace.lua
    

    Отредактируйте значение в зависимости от количества лиц, обрабатываемых шардом. Значение 1.2*1024*1024*1024 соответствует 1 000 000 лиц:

    memtx_memory = 1.2*1024*1024*1024,
    

    Укажите IP-адрес сервера NTLS, если он удаленный:

    FindFace.start(“127.0.0.1”, 8001, {license_ntls_server=“192.168.113.2:3133”})
    
    #!/bin/sh
    set -e
    
    for I in `seq 1 4`; do
           TNT_PORT=$((33000+$I)) &&
           HTTP_PORT=$((8000+$I)) &&
           sed "
                   s#/opt/ntech/var/lib/tarantool/default#/opt/ntech/var/lib/tarantool/shard_$I#g;
                   s/listen = .*$/listen = '127.0.0.1:$TNT_PORT',/;
                   s/\"127.0.0.1\", 8001,/\"0.0.0.0\", $HTTP_PORT,/;
           " /etc/tarantool/instances.enabled/FindFace.lua > /etc/tarantool/instances.enabled/FindFace_shard_$I.lua;
    
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/snapshots
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/xlogs
           mkdir -p /opt/ntech/var/lib/tarantool/shard_$I/index
           chown -R tarantool:tarantool /opt/ntech/var/lib/tarantool/shard_$I
           echo "Shard #$I inited"
    done;
    

    Совет

    Загрузите пример скрипта.

  6. Запустите скрипт из домашней директории.

    sudo sh ~/shard.sh
    
  7. Проверьте, созданы ли файлы конфигурации.

    ls /etc/tarantool/instances.enabled/
    
    ##example.lua FindFace.lua FindFace_shard_1.lua FindFace_shard_2.lua FindFace_shard_3.lua FindFace_shard_4.lua
    
  8. Запустите все 4 шарда. Это нужно сделать на каждом сервере.

    for I in `seq 1 4`; do sudo systemctl enable tarantool@FindFace_shard_$I; done;
    for I in `seq 1 4`; do sudo systemctl start tarantool@FindFace_shard_$I; done;
    
  9. Проверьте статус шардов.

    sudo systemctl status tarantool@FindFace*
    

    Вы должны получить следующие сообщения:

    tarantool@FindFace_shard_3.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_2.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_1.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    tarantool@FindFace_shard_4.service - Tarantool Database Server
    Loaded: loaded (/lib/systemd/system/tarantool@.service; disabled; vendor preset: enabled)
    Active: active (running) since Tue 2017-01-10 16:22:07 MSK; 32s ago
    ...
    

    Совет

    Для того чтобы отобразить логи tntapi, выполните команду:

    sudo tail -f /var/log/tarantool/FindFace_shard_{1,2,3,4}.log
    
  10. На сервере с компонентом findface-facenapi создайте файл tntapi_cluster.json, содержащий адреса и порты всех шардов. Распределите доступные шарды равномерно по 1024 ячейкам в одной строке. Нажмите здесь, чтобы посмотреть, как выглядит файл для 4 серверов с 4 шардами на каждом.

    Совет

    Вы можете создать файл tntapi_cluster.json следующим образом:

    1. Создайте файл с линейным списком всех шардов, каждый шард с новой строки (нажмите здесь, чтобы посмотреть пример).

      sudo vi s.txt
      
    2. Выполните приведенный ниже скрипт. В результате будет создан новый файл tntapi_cluster.json, содержащий список адресов и портов всех шардов, равномерно распределенных по 1024 ячейкам.

    cat s.txt | perl -lane 'push(@s,$_); END{$m=1024; $t=scalar @s;for($i=0;$i<$m;$i++){$k=int($i*$t/$m); push(@r,"\"".$s[$k]."\"")} print "[[".join(", ",@r)."]]"; }' > tntapi_cluster.json
    
  11. Переместите файл tntapi_cluster.json в папку /etc.

    Важно

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