Установка tntapi
в кластерной среде¶
Установите и настройте компонент tntapi
следующим образом:
Установите компонент
tntapi
на выделенных серверах. База данных Tarantool будет установлена автоматически вместе с ним.sudo apt-get update sudo apt-get install findface-tarantool-server
Создайте шарды
tntapi
на каждом сервере. Процедура шардинга будет рассмотрена на примере кластерной среды, содержащей 4 сервера под базу данных, на каждом из которых нужно создать по 4 шарда.Важно
При создании шардов для крупных проектов соблюдайте следующие правила:
- Один шард может обрабатывать приблизительно
10 000 000
лиц. - Количество шардов на одном сервере не должно превышать число физических ядер процессора минус 1.
- Один шард может обрабатывать приблизительно
На каждом из 4-х серверов удалите тестовый сервис 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
.Важно
Вам потребуется раскомментировать и указать путь к данному файлу в настройках сети.