Настройка среды¶
Требования к серверу под инсталлятор¶
Сервером под инсталлятор может служить:
отдельностоящий сервер, или
один из серверов под Tarantool, или
агент CI/CD системы.
Требования к серверу под инсталлятор:
Операционная система RHEL, AstraLinux, Red OS или аналогичная с поддержкой Docker.
Доступ по 22 порту (SSH) для devops-инженера.
Сетевой доступ по 22 порту (SSH) до всех серверов, на которые производится установка. В том числе до серверов под ETCD,
nginxи других сервисов.
Если предполагается использовать Docker-образ инсталлятора, установите:
Docker Engine версии не ниже 20.10.11.
Если предполагается использовать Ansible-коллекцию инсталлятора, установите:
Python 3.10.2 или новее.
Ansible 2.15.5 или новее.
pipмодулиurllib3==1.26,requests==2.31.0,etcd3==0.12.0.
Подготовка к использованию¶
Перед запуском сценариев развертывания подготовьте:
Инвентарь — описание топологии вашего решения и настроек приложения или продукта.
Пользователя для подключения к серверам по SSH. Может быть
root. Должен иметь sudo-права на логин под локального пользователяtarantool.Приватный SSH-ключ пользователя для подключения к серверам.
Архив с продуктом или приложением.
Пример инвентаря для кластерного приложения на основе Tarantool Cartridge
Это могут быть кластера TCS, TDG, TDB и других продуктов линейки Tarantool Enterprise.
---
tnt-cluster-1:
children:
ROUTERS:
hosts:
tdb-router-01:
tdb-router-02:
STORAGES:
hosts:
tdb-r01-s01:
tdb-r01-s02:
tdb-r02-s01:
tdb-r02-s02:
STORAGES_GROUP_1:
hosts:
tdb-r01-s01:
tdb-r02-s01:
STORAGES_GROUP_2:
hosts:
tdb-r01-s02:
tdb-r02-s02:
replicaset_vag_router_01:
hosts:
tdb-router-01:
vars:
failover_priority:
- tdb-router-01
replicaset_alias: vag-router-01
roles:
- vshard-router
- crud-router
- failover-coordinator
- metrics
replicaset_vag_router_02:
hosts:
tdb-router-02:
vars:
failover_priority:
- tdb-router-02
replicaset_alias: vag-router-02
roles:
- vshard-router
- crud-router
- failover-coordinator
- metrics
replicaset_vag_storage_01:
hosts:
tdb-r01-s01:
tdb-r01-s02:
vars:
failover_priority:
- tdb-r01-s02
- tdb-r01-s01
replicaset_alias: vag-storage-01
roles:
- vshard-storage
- crud-storage
- metrics
- expirationd
replicaset_vag_storage_02:
hosts:
tdb-r02-s01:
tdb-r02-s02:
vars:
failover_priority:
- tdb-r02-s02
- tdb-r02-s01
replicaset_alias: vag-storage-02
roles:
- vshard-storage
- crud-storage
- metrics
- expirationd
vm_1:
hosts:
tdb-r01-s01:
tdb-r02-s01:
tdb-router-01:
tdb-router-02:
vars:
ansible_host: server-1.vm.test
ansible_user: '{{ super_user }}'
vm_2:
hosts:
tdb-r01-s02:
tdb-r02-s02:
vars:
ansible_host: server-2.vm.test
ansible_user: '{{ super_user }}'
hosts:
tdb-r01-s01:
config:
advertise_uri: localhost:3401
http_port: 8080
log: /app/logs/tdb/tdb-r01-s01.log
vinyl_cache: 0
vinyl_memory: 0
tdb-r01-s02:
config:
advertise_uri: localhost:3410
http_port: 8099
log: /app/logs/tdb/tdb-r01-s02.log
vinyl_cache: 0
vinyl_memory: 0
tdb-r02-s01:
config:
advertise_uri: localhost:3411
http_port: 8098
log: /app/logs/tdb/tdb-r02-s01.log
vinyl_cache: 0
vinyl_memory: 0
tdb-r02-s02:
config:
advertise_uri: localhost:3402
http_port: 8092
log: /app/logs/tdb/tdb-r02-s02.log
vinyl_cache: 0
vinyl_memory: 0
tdb-router-01:
config:
advertise_uri: localhost:3403
http_port: 8093
log: /app/logs/tdb/tdb-router-01.log
vinyl_cache: 0
vinyl_memory: 0
tdb-router-02:
config:
advertise_uri: localhost:3404
http_port: 8094
log: /app/logs/tdb/tdb-router-02.log
vinyl_cache: 0
vinyl_memory: 0
vars:
ansible_ssh_common_args: -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null
-o StrictHostKeyChecking=no
cartridge_app_directory: /app/tarantool/tdb
cartridge_app_name: tdb
cartridge_keep_num_latest_dists: 10
cartridge_cluster_cookie: molecule-testing
cartridge_failover_params:
etcd2_params:
endpoints:
- http://server-1.vm.test:2379
lock_delay: 10
prefix: /tdb-1
failover_timeout: 20
fencing_enabled: true
fencing_pause: 2
fencing_timeout: 10
mode: stateful
state_provider: etcd2
где:
{{ super_user }}– имя пользователя для подключения по SSH. Выставляется в ansible-переменнойansible_user.
Предварительная настройка сервера под Tarantool¶
Для развертывания продуктовой линейки Tarantool необходима предварительная настройка серверов. В Ansible Tarantool Enterprise, начиная с версии 1.3.0, появились сценарии для проверки и первоначального конфигурирования.
Список дальнейших действий, которые производятся на серверах по необходимости:
Создание групп
etcdиnginx.Создание пользователей
etcd,nginx.Изменение Unix-лимитов для пользователя
tarantool.Max processes: soft -
64000, hard -64000Max open files: soft -
64000, hard -64000Max core file size: soft -
unlimited, hard -unlimited
Создание директорий:
/app/etcd,/app/nginx.Настройка прав для директорий.
Настройка параметров ядра:
vm.overcommit_memory = 2vm.overcommit_ratio = 100kernel.core_uses_pid = 1kernel.core_pattern = /app/tarantool/coredump/core-%e-%u-%g-%p-%tnet.ipv4.ip_local_port_range = 32768 60999
Создание каталога
/var/log/journal.Включение постоянного хранения для журнала
journaldпутем добавления строкиStorage=persistentв файл/etc/systemd/journald.conf.Установка дополнительных пакетов:
nginx,crontab,logrotate,gdb,telnet.Включение службы
systemd-logind.Настройка
loginctlдля пользователяtarantool.Добавление пользователя
tarantoolв группуcrontab.Установка Python-модуля
PyYAML.
Проверка сервера перед развертыванием¶
Используйте сценарий env_check.yml. Он выполнит проверку и в результате предоставит список найденных несоответствий.
Примечание
По умолчанию сценарий завершится с ошибкой, если будут найдены несоответствия
требованиям. Чтобы проигнорировать ошибку, укажите значение true для переменной
tarantool_ignore_check_failure.
Проверка лимитов пользователя tarantool будет выполняться только под пользователем root.
Для этого переменная tarantool_shared_become_user должна быть root.
Запустить сценарий можно без топологии приложения, с простейшим инвентарём.
Пример 1: Обычный запуск проверки с использованием Ansible-коллекции
ansible-playbook -i inventory.ini \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
}' \
playbooks/env_check.yml
Пример инвентаря
[tarantoolservers]
tarantool_1 ansible_host=10.0.0.1 ansible_user='{{ super_user }}'
tarantool_2 ansible_host=10.0.0.2 ansible_user='{{ super_user }}'
tarantool_3 ansible_host=10.0.0.3 ansible_user='{{ super_user }}'
Пример 2: Обычный запуск проверки с использованием Docker-образа
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
}' \
playbooks/env_check.yml
Пример 3: Запуск проверки под пользователем root c использованием Docker-образа
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"root",
}' \
playbooks/env_check.yml
Сценарий первичной настройки¶
Чтобы запустить сценарий подготовки сервера, выполните следующие команды:
Пример 1: Запуск подготовки с использованием Ansible-коллекции
ansible-playbook -i inventory.ini \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"root",
}' \
playbooks/env_prepare.yml
Пример 2: Запуск подготовки с использованием Docker-образа
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"root",
}' \
playbooks/env_prepare.yml
где:
ansible_ssh_private_key_file– путь к закрытому ключу SSH для аутентификации.super_user– имя пользователя, для подключения по SSH и переключения на пользователяroot.tarantool_shared_become_user–root.
Важно
Для успешного выполнения сценария требуется доступ к пользователю root.
Использование тегов¶
Сценарии проверки и настройки разбиты на ряд блоков. С помощью Ansible-тегов можно выбирать, какие из блоков необходимо запустить:
tarantool– задачи по настройке пользователя и директорий Tarantool.etcd– задачи по настройке пользователя и директорий ETCD.nginx– задачи по настройке пользователя и директорий nginx.kernel– управление параметрами ядра.journald– настройка журналирования системы.os– особенности операционной системы.
Пример 1: Выполнить только задачи с тегом tarantool¶
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
}' \
--tags tarantool \
playbooks/env_check.yml
Пример 2: Пропустить выполнение задач с тегом nginx¶
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
}' \
--skip-tags nginx \
playbooks/env_check.yml
Пример 3: Выполнить только задачи с тегами tarantool и kernel¶
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"'${SUPER_USER_NAME}'",
}' \
--tags tarantool,kernel \
playbooks/env_check.yml