Установка tntapi
¶
Компонент tntapi
соединяет базу данных Tarantool и компонент findface-facenapi
, передавая результаты поиска от базы данных в findface-facenapi
для дальнейшей обработки. Для увеличения скорости поиска на каждом сервере с базой данных Tarantool
могут быть созданы многочисленные сегменты (шарды) tntapi
. Их параллельное функционирование приводит к значительному увеличению производительности. Каждый шард может обрабатывать приблизительно до 10 000 000
лиц. Если FindFace Enterprise Server SDK развертывается на одном сервере, одного шарда, созданного по умолчанию, будет достаточно. При развертывании в кластерной среде количество шардов рассчитывается в зависимости от нескольких параметров (см. ниже).
Установка tntapi на одном сервере¶
Установите и настройте компонент tntapi
следующим образом:
Установите компонент
tntapi
. База данных Tarantool будет установлена автоматически вместе с ним.sudo apt-get update sudo apt-get install findface-tarantool-server
Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.
sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
Поскольку один шард может обрабатывать до
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”})
Добавьте шард
tntapi
в автозагрузку Ubuntu и запустите шард.sudo systemctl enable tarantool@FindFace && sudo systemctl start tarantool@FindFace
Убедитесь, что шард активен. Команда вернет описание сервиса, его статус (должен быть Активен), путь и длительность текущей сессии.
sudo systemctl status tarantool@FindFace
Совет
Для того чтобы отобразить логи
tntapi
, выполните команду:sudo tail -f /var/log/tarantool/FindFace.log
Файл
tntapi.json
с описанием параметров шарда автоматически устанавливается вместе с компонентомtntapi
в папку/etc
.Важно
Вам потребуется раскомментировать путь к данному файлу в настройках сети.
Установка tntapi на кластере серверов¶
Установите и настройте компонент tntapi
следующим образом:
Установите компонент
tntapi
на выделенных серверах. База данных Tarantool будет установлена автоматически вместе с ним.sudo apt-get update sudo apt-get install findface-tarantool-server
Создайте шарды
tntapi
на каждом сервере. Процедура шардинга будет рассмотрена на примере кластерной среды, содержащей 4 сервера под базу данных, на каждом из которых нужно создать по 4 шарда.Важно
При создании шардов для крупных проектов соблюдайте следующие правила:
- Один шард может обрабатывать приблизительно
10 000 000
лиц. - Количество шардов на одном сервере не должно превышать число физических ядер процессора минус 1.
- Один шард может обрабатывать приблизительно
Удалите тестовый сервис Tarantool из автозагрузки Ubuntu и остановите его.
sudo systemctl disable tarantool@example && sudo systemctl stop tarantool@example
На каждом из 4-х серверов отключите созданный по умолчанию шард.
sudo systemctl disable tarantool@FindFace
Напишите bash-скрипт
shard.sh
, который автоматически создаст шарды и файлы конфигурации для каждого из них. Скрипт должен быть написан для каждого из 4-х серверов. Используйте приведенный ниже скрипт как основу для своего кода. Данный скрипт создает на сервере 4 шарда, использующие порты: tntapi33001..33004
и http8001..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;
Совет
Загрузите
пример скрипта
.Запустите скрипт из домашней директории.
sudo sh ~/shard.sh
Проверьте, созданы ли файлы конфигурации.
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
Запустите все 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;
Проверьте статус шардов.
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
На сервере с компонентом
findface-facenapi
создайте файлtntapi_cluster.json
, содержащий адреса и порты всех шардов. Распределите доступные шарды равномерно по 1024 ячейкам в одной строке. Нажмите здесь, чтобы посмотреть, как выглядит файл для 4 серверов с 4 шардами на каждом.Совет
Вы можете создать файл
tntapi_cluster.json
следующим образом:Создайте файл с линейным списком всех шардов, каждый шард с новой строки (нажмите здесь, чтобы посмотреть пример).
sudo vi s.txt
Выполните приведенный ниже скрипт. В результате будет создан новый файл
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
Переместите файл
tntapi_cluster.json
в папку/etc
.Важно
Вам потребуется раскомментировать путь к данному файлу в настройках сети.