Подготовка серверов¶
Tarantool Column Store – колоночная транзакционно-аналитическая СУБД, построенная на платформе Tarantool Enterprise Edition.
TCS наследует от Tarantool базовые возможности хранения и масштабирования:
данные хранятся в оперативной памяти;
хранение персистентно;
доступны механизмы шардирования и репликации.
Установка TCS производится с помощью инсталлятора Ansible Tarantool Enterprise.
Таким образом, перед установкой и эксплуатацией TCS требуется подготовить сервера для использования сопутствующего ПО:
Подготовка серверов к использованию Tarantool¶
Настройте межсетевой экран (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и других сервисов.
Настройте DNS.
Все сервера должны находить друг друга по FQDN (доменное имя локальной машины). Удобно использовать доменное имя для обозначения экземпляров Tarantool в кластере.
Разбейте дисковое пространство в соответствии с рекомендациями для оптимальной работы экземпляров Tarantool:
журналы (logs) — 2 GB * количество экземпляров Tarantool, но не менее 15 GB
журнал упреждающей записи (WAL) — 40-50% от RAM, используемого всеми экземплярами Tarantool
снимки данных (snapshots) — 100-110% от RAM, используемого всеми экземплярами Tarantool
Разбейте диски в соответствие с расчетами и подключите директории с помощью команды
mount.Скорректируйте параметры ядра.
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
Установите необходимое стороннее ПО требуемых версий.
a. Установите etcd.
b. Установите OpenSSL.
Установите вспомогательные утилиты.
Примечание
Некоторые утилиты могут быть предустановлены с ядром ОС. Нет необходимости обновлять их на последнюю версию.
Команды для поддерживаемых ОС:
Для 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
Создайте учетные записи.
Создайте группу
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"}
Подробнее о том, как хранятся данные аутентификации, смотрите ниже.
Активируйте
systemduserspace:sudo loginctl enable-linger tarantool
Создайте директории для записи на диск:
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
Настройте лимиты для группы
tarantool.
sudo cat << EOF >> /etc/security/limits.d/tarantool.conf
@tarantool - nproc 64000
@tarantool - nofile 64000
@tarantool - core unlimited
EOF
Настройте оркестратор.
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
```
Настройте ротацию журналов.
Для Astra Linux:
Убедитесь, что утилита
crontabустановлена.Добавьте пользователя
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, глава Настройка среды.