Установка 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. На каждом из 4-х серверов удалите тестовый сервис 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.

    Важно

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