Подготовка серверов | Tcs

Версия:

0.x
Руководство администратора Подготовка серверов

Подготовка серверов

Tarantool Column Store – колоночная транзакционно-аналитическая СУБД, построенная на платформе Tarantool Enterprise Edition.

TCS наследует от Tarantool базовые возможности хранения и масштабирования:

  • данные хранятся в оперативной памяти;

  • хранение персистентно;

  • доступны механизмы шардирования и репликации.

Установка TCS производится с помощью инсталлятора Ansible Tarantool Enterprise.

Таким образом, перед установкой и эксплуатацией TCS требуется подготовить сервера для использования сопутствующего ПО:

Подготовка серверов к использованию Tarantool

  1. Настройте межсетевой экран (firewall):

    a. Настройте порты для бинарного протокола Tarantool.

    Tarantool использует как TCP, так и UDP, для взаимодействия внутри кластера.

    Откройте пул портов 3301 — 3401 для внутреннего трафика, который ходит по протоколам TCP и UDP на всех серверах, на которых устанавливается Tarantool.

    Если внешние приложения обращаются к кластеру по бинарному протоколу, также откройте пул портов 3301 — 3401. В большинстве случаев приложениям достаточно разрешить TCP-трафик.

    Важно

    Каждый экземпляр Tarantool должен иметь связь со всеми остальными экземплярами (full-mesh).

    Примечание

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

    b. Настройте порты для TCP и HTTP(s).

    • TCP используется для взаимодействия администраторов с веб-интерфейсом модуля Tarantool Cluster Manager (TCM).

      На всех серверах, на которых устанавливается TCM, откройте порт для TCP-трафика, указанный в конфигурации TCM (по умолчанию 8080).

    • Встроенный в Tarantool сервер может принимать SSL трафик, поэтому проксирование HTTPs-трафика на HTTP-порты настраивать не нужно.

      Откройте пул портов 8001 — 8101 для HTTPs-трафика на всех серверах, на которых устанавливается Tarantool.

    • HTTP используется для взаимодействия с интерфейсом Scheduler API сервиса TCS, где ждут ввод обработчики /sql и /http.

      Откройте пул портов 7700-7800 для HTTPs трафика на всех серверах, на которых будет запущен сервис TCS.

    c. Настройте порты для внутреннего трафика для etcd. По умолчанию используется порт 2379.

    d. В случае, если у вас:

    • отдельно стоящий сервер, или

    • один из серверов под Tarantool, или

    • агент CI/CD системы,

    настройте также:

    • доступ по 22 порту (ssh) для devops-инженера;

    • сетевой доступ по 22 порту (ssh) до всех серверов, на которые производится установка. В том числе до серверов под etcd и других сервисов.

  2. Настройте DNS.

    Все сервера должны находить друг друга по FQDN (доменное имя локальной машины). Удобно использовать доменное имя для обозначения экземпляров Tarantool в кластере.

  3. Разбейте дисковое пространство в соответствии с рекомендациями для оптимальной работы экземпляров Tarantool:

    • журналы (logs) — 2 GB * количество экземпляров Tarantool, но не менее 15 GB

    • журнал упреждающей записи (WAL) — 40-50% от RAM, используемого всеми экземплярами Tarantool

    • снимки данных (snapshots) — 100-110% от RAM, используемого всеми экземплярами Tarantool

    Разбейте диски в соответствие с расчетами и подключите директории с помощью команды mount.

  4. Скорректируйте параметры ядра.

    a. Задайте параметры overcommit по памяти:

    sudo cat << EOF >> /etc/sysctl.conf
    vm.overcommit_memory = 2
    vm.overcommit_ratio = 100
    EOF
    

    Примечание

    В случае виртуализации запрещено использовать overcommit по памяти и swap-раздел.

    b. При ошибочном завершении Tarantool должен быть создан coredump-файл, который понадобится нашим специалистам для исследования проблемы. Файлы должны собираться в доступную на запись директорию, иметь в названии PID, signal и timestamp. Для корректного сохранения отладочной информации потребуются следующие настройки:

    sudo cat << EOF >> /etc/sysctl.conf
    kernel.core_uses_pid = 1
    kernel.core_pattern = /app/tarantool/coredump/core-%e-%u-%g-%p-%t
    EOF
    

    c. Настройте пул портов для исходящих запросов.

    Исходящие соединения могут занимать порты, предназначенные для бинарного протокола Tarantool.

    sudo cat << EOF >> /etc/sysctl.conf
    net.ipv4.ip_local_port_range = 32768   61000
    EOF
    
  5. Установите необходимое стороннее ПО требуемых версий.

    a. Установите etcd.

    b. Установите OpenSSL.

  6. Установите вспомогательные утилиты.

    Примечание

    Некоторые утилиты могут быть предустановлены с ядром ОС. Нет необходимости обновлять их на последнюю версию.

    Команды для поддерживаемых ОС:

    • Для Astra Linux:

      sudo apt update
      sudo apt install -y \
               logrotate \        # Для ротации логов
               cronie \           # Утилита crontab
               gdb \              # Для сбора отладочной информации в случае падения
               gcore \            # Для создания coredump-файла на лету
               telnet \           # Для проверки сетевой связности узлов
               iperf3 \           #
               iptraf-ng \        #
               htop               # Более красивый top
      
    • Для РЕД ОС:

      sudo dnf install -y \
               logrotate \
               cronie \
               gdb \
               telnet \
               iperf3 \
               iptraf-ng \
               htop
      
  7. Создайте учетные записи.

    Создайте группу tarantool и локального пользователя tarantool для запуска и управления Tarantool:

    sudo groupadd -g 3301 tarantool
    sudo useradd -m -u 3301 -g 3301 --system tarantool
    

    Для корректной работы пользователя tarantool с systemctl в пользовательском окружении выполните команду:

    sudo loginctl enable-linger tarantool
    

    Аналогично tarantool, потребуется учетная запись для работы с etcd. Соответствующий пользователь должен создаваться в процессе установки etcd. Если этого не произошло, создайте его самостоятельно:

    sudo groupadd etcd
    sudo useradd -m -g etcd --system etcd
    

    Создайте учётную запись пользователя tcs. Этот пользователь будет использоваться для аутентификации операций по Arrow Fligfht SQL и http:

    USER_NAME="tcs"
    PASSWORD="tcs"
    SALT=`openssl rand -base64 16 | tr -d '\n'`
    PASSWORD_HASH=`echo -n $PASSWORD | argon2 $SALT -id -t 3 -m 12 -p 1 -e`
    etcdctl put "/auth/${USER_NAME}" "{\"password_hash\": \"${PASSWORD_HASH}\"}"
    

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

    etcdctl get /auth/$username -> {"password_hash": "foobar"}
    

    Подробнее о том, как хранятся данные аутентификации, смотрите ниже.

  8. Активируйте systemd userspace:

    sudo loginctl enable-linger tarantool
    
  9. Создайте директории для записи на диск:

    sudo mkdir -p /app/tarantool
    sudo mkdir -p /app/tarantool/coredump
    sudo mkdir -p /app/logs
    sudo mkdir -p /app/snap
    sudo mkdir -p /app/etcd
    

    И задайте права:

    sudo chown tarantool:tarantool /app/tarantool
    sudo chown tarantool:tarantool /app/tarantool/coredump
    sudo chown tarantool:tarantool /app/logs
    sudo chown tarantool:tarantool /app/snap
    sudo chown etcd:etcd /app/etcd
    
  10. Настройте лимиты для группы tarantool.

sudo cat << EOF >> /etc/security/limits.d/tarantool.conf
@tarantool    -   nproc   64000
@tarantool    -   nofile   64000
@tarantool    -   core   unlimited
EOF
  1. Настройте оркестратор.

a. Создайте systemd service-файлы (для РЕД ОС и RHEL).

b. Включите персистентное хранилище journald (для РЕД ОС и RHEL).

c. Выдайте sudo-права администратору Tarantool.

  Для обслуживания серверов с Tarantool удобно выделить некоторую доменную
  группу из AD. Этой группе выдайте соответствующие права на переход под
  пользователей `tarantool` и `etcd`. Также нужны права на управление
  сервисами и просмотр журналов для `etcd`.

  Указанный список в формате `sudoers` выглядит примерно так:

  ```
  # пример для Astra Linux:

  %GROUP@domain.ru ALL=(tarantool) NOPASSWD: ALL

  %GROUP@domain.ru ALL=(etcd) NOPASSWD: ALL
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl status etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl restart etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl reload etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl start etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl stop etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl enable etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl disable etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/systemctl edit etcd
  %GROUP@domain.ru ALL=(ALL) NOPASSWD: /bin/journalctl -u etcd
  ```
  1. Настройте ротацию журналов.

    • Для Astra Linux:

      1. Убедитесь, что утилита crontab установлена.

      2. Добавьте пользователя tarantool в группу crontab.

        sudo usermod -a -G crontab tarantool
        
    • Для РЕД ОС:

      В РЕД ОС права на crontab организуются через файлы /etc/cron.allow и /etc/cron.deny. Проверьте, что выполняется любое из двух условий:

      • пользователь tarantool есть в файле /etc/cron.allow, либо

      • файла /etc/cron.allow нет, а файл /etc/cron.deny пуст (crontab доступен всем).

Хранение данных аутентификации

Учетные данные пользователя хранятся в etcd по ключу /auth/{user_name} в формате JSON. Пример:

{"password_hash": "$2y$10$vSEqsDXt5qtbSVa.OVScAOaR27SVOrlczu77l8T29s3hvoCQkBwC."}

Пароль хранится в хэшированном виде. TCS поддерживает следующие функции хэширования:

  • bcrypt. Подробнее о функции смотрите в документации.

    htpasswd -bnBC 4 "" PASSWORD | tr -d ':\n'
    
  • argon2. Подробнее о функции смотрите в документации.

    echo -n PASSWORD | argon2 $(openssl rand -base64 8 | tr -d '\n') -id -t 1 -m 3 -p 1 -e
    
  • sha256 (с защитой от перебора). Подробнее о функции смотрите в документации.

    openssl passwd -5 -salt "rounds=1000$openssl rand -base64 8 | tr -d '\n'" PASSWORD 
    
  • sha256 (быстрый вариант, без защиты от перебора). Подробнее о функции смотрите в документации.

    echo -n 'password' | sha256sum | awk '{print $1}'
    
  • sha512. Подробнее о функции смотрите в документации.

    openssl passwd -6 -salt $(openssl rand -base64 8 | tr -d '\n') PASSWORD
    

Подготовка серверов к установке с использованием инсталлятора Ansible Tarantool Enterprise

См. документацию по инсталлятору Ansible Tarantool Enterprise, глава Настройка среды.

Нашли ответ на свой вопрос?
Обратная связь