Миграция с ATE 1.x на ATE 2.x
Инструкция описывает переход кластера с коллекции ATE 1.x на ATE 2.x. Удалять и разворачивать кластер заново не нужно: достаточно привести инвентарь к формату 2.x и повторно запустить установку коллекцией 2.x. Данные и конфигурация в хранилище сохраняются. Юниты экземпляров перегенерируются, экземпляры перезапускаются.
Применимо к кластерам, где конфигурация хранится в etcd или в TbCS (Tarantool-based config storage).
Без изменений в кластере можно проверить:
- инвентарь:
ansible-inventory -i <inventory> --graph(генератор принимает новый формат, хосты попадают в нужные группы); - синтаксис:
ansible-playbook -i <inventory> playbooks/install.yml --syntax-check;
Компонент | Требование |
|---|---|
ansible-core | 2.20 |
Управляющая машина (откуда запускается Ansible) | Python 3.12–3.14 |
Целевые хосты | Python 3.9–3.14 |
Для перехода на 2.x внесите в инвентарь следующие изменения.
-
Переименуйте все переменные
cartridge_*вtarantool_*, суффикс остаётся тем же. Например,cartridge_systemd_dir→tarantool_systemd_dir. -
Удалите
tarantool_3_0_version_support. -
Ключ шифрования TCM. Если TCM используется с шифрованием, сохраните значение
tcm_security_encryption_keyили файл с ключом. -
Тип экземпляра. Для статического инвентаря задайте
ate_instance_type. В инвентаре для генератора переменная не нужна: тип экземпляра определяется по секцииcomponents.Тип экземпляраЗначениеate_instance_typeГруппа хостов (формирует рольprepare)Экземпляр Tarantool (TDB)tarantool(по умолчанию)tarantool_platform_hostsTarantool Cluster Managertcmtarantool_cluster_manager_hostsTarantool Queue Enterprise (gRPC API)tqe-grpctarantool_queue_enterprise_hostsПланировщик TCStcs-schedulertarantool_scheduler_hostsШлюз потоков данных TCFtcf-gatewaytcf_gateway_hostsПриёмник потоков данных TCFtcf-destinationtcf_destination_hostsTarantool CDCcdctarantool_cdc_hosts
Тип tcs-scheduler используется только для TCS версии 0.x. В более новых версиях TCS планировщик является экземпляром Tarantool, а не отдельной сущностью. Он устанавливается как tarantool (значение переменной по умолчанию).
-
Параметры хранилища конфигурации. Адрес и префикс задаются общими переменными
tarantool_config_storage_*. Учётные данные и TLS зависят от типа хранилища.etcd
Переменная 1.xПеременная 2.xДействиеtarantool_etcd_prefixtarantool_config_etcd_prefixtarantool_config_storage_prefixПереименоватьtarantool_etcd_hosttarantool_etcd_porttarantool_etcd_schema_definitiontarantool_config_storage_endpointsУдалить, адрес указать вendpoints(<схема>://<хост><порт>)tarantool_etcd_usernametarantool_etcd_passwordбез изменений—tarantool_etcd_ssl_*без изменений—tarantool_config_storage_prefix: /tarantool/tarantooldbtarantool_config_storage_endpoints:- https://etcd-1:2379tarantool_etcd_username: roottarantool_etcd_password: <пароль>tarantool_etcd_ssl_ca_file: /path/ca.crtTbCS
Включается переменной
tarantool_config_storage: tarantool. Логин, пароль и TLS задаются в словаре каждого endpoint, отдельных переменных для них нет. Переменныеtarantool_etcd_*в этом режиме не используются.Переменная 1.xПеременная 2.xДействиеtarantool_config_storagetarantool_config_storage_prefixtarantool_config_storage_endpointsбез изменений—tarantool_config_storage_usernametarantool_config_storage_password—Удалить, указать вloginиpasswordendpointtarantool_config_storage: tarantooltarantool_config_storage_prefix: /tarantool/tarantooldbtarantool_config_storage_endpoints:- uri: "https://tbcs-1:4401"login: config-storagepassword: <пароль>params:transport: sslssl_cert_file: /opt/tarantool/certs/server.crtssl_key_file: /opt/tarantool/certs/server.key
tarantool_config_storage_prefix: "/tarantool/{{ cluster_name }}"tarantool_config_storage_endpoints:- "https://etcd:2379"tarantool_config_storage_username: "root"tarantool_config_storage_password: "mysecurepassword"tarantool_tt_connect_username: clienttarantool_tt_connect_password: secrettarantool_etcd_ssl_key_file: "/certs/client.key"tarantool_etcd_ssl_cert_file: "/certs/client.crt"tarantool_etcd_ssl_ca_file: "/certs/rootCA.crt"
-
Установите коллекцию ATE 2.x на управляющий хост и проверьте, что используется именно она:
ansible-galaxy collection install tarantool-enterprise-*.tar.gz -p ./collectionsexport ANSIBLE_COLLECTIONS_PATH=$PWD/collectionsansible-galaxy collection list tarantool.enterprise -
Внесите изменения в инвентарь по разделу Общие изменения инвентаря.
-
Проверьте, что инвентарь собирается и все экзмепляры попали в группы своих компонентов:
ansible-inventory -i <inventory> --graph -
Проверьте мигрированный инвентарь плейбуком
check.yml:ansible-playbook -i <inventory> playbooks/check.ymlПлейбук проверяет доступность хостов, валидирует инвентарь и проверяет состояние кластера. Он должен завершиться без ошибок на всех хостах. Если найдены расхождения, исправьте инвентарь и повторите проверку. Переходите к следующему шагу только после успешной проверки.
-
Запустите повторную установку кластера, но уже с помощью новой версии коллекции:
ansible-playbook -i <inventory> playbooks/install.yml --diffВ systemd-юнитах экземпляров изменится формат строк
Environment: кавычки переносятся с всей строки на значение переменной. В выводе--diffэто выглядит так:-Environment='TT_CONFIG_ETCD_PREFIX=/tarantooldb'+Environment=TT_CONFIG_ETCD_PREFIX='/tarantooldb'
Начиная с 2.0 установка и применение конфигурации выполняются через плейбук install.yml.
- Юниты systemd и конфигурация кластера рендерятся по шаблонам 2.x. Если мигрированный инвентарь эквивалентен старому, результат совпадает с текущим и изменений нет.
- Экзмепляр перезапускается, так как изменилась конфигурация.
- Конфигурация кластера записывается в хранилище по прежнему префиксу.
- Данные экземпляров и состояние хранилища TCM сохраняются.
- TCM перезапускается, так как изменилась его конфигурация.
Обновление прошло успешно, если выполнены все условия ниже.
-
Все юниты экземпляров, координаторов и TCM находятся в состоянии
active (running). Дублей юнитов с другими именами нет. Проверьте от пользователяtarantoolна каждом хосте:systemctl --user list-units --all --type=service '*@*'systemctl --user --failedВ первом выводе — юниты всех экземпляров, координаторов и TCM этого хоста, все
active running, их количество совпадает с количеством экземпляров в инвентаре. Второй вывод пустой.Время запуска процессов (видно, какие экземпляры перезапускались):
ps -eo lstart,cmd | grep -E '[t]arantool|[c]luster-manager' -
В окружении юнитов есть параметры подключения к хранилищу. Для etcd это:
TT_CONFIG_ETCD_ENDPOINTSTT_CONFIG_ETCD_PREFIXTT_CONFIG_ETCD_USERNAMETT_CONFIG_ETCD_PASSWORDTT_CONFIG_ETCD_SSL_*(если используется TLS)
Проверьте командой от пользователя
tarantool:systemctl --user show <unit> -p Environment -
Каждый экземпляр находится в статусе
running, в каждом наборе реплик есть ровно один лидер.tt status <имя приложения>Имя приложения — часть имени юнита до
@(например,tarantooldb@storage-r01-i01→tt status tarantooldb). У всех экземпляров должен бытьRUNNING, в колонкеMODE— ровно одинRWна набор реплик. -
Данные на месте: контрольные спейсы и количество записей совпадают с состоянием до обновления.
-
TCM подключился к кластеру:
- в
tcm.logпосле последнего старта нетrecover panic; - есть строки
tarantool connection role changed; - кластер открывается в веб-интерфейсе.
- в
Симптом | Причина | Решение |
|---|---|---|
Запрос в etcd идёт на http://etcd:2379, Connection reset by peer | Не задан tarantool_config_storage_endpoints, используется значение по умолчанию | Задать endpoints с правильной схемой, хостом и портом |
В юнитах нет TT_CONFIG_ETCD_SSL_*, экземпляры не читают конфигурацию из etcd с TLS | TLS-переменные остались с именами tarantool_config_etcd_ssl_* | Переименовать в tarantool_etcd_ssl_* |
В tcm.log recover panic ... nil pointer dereference, TCM не видит кластер | В tcm.yml нет ключа шифрования или ключ другой | Убедиться, что tcm_security_encryption_key не изменился относительно предыдущего запуска, и перезапустить установку TCM |
TCM открывается без пользователей и кластеров | TCM переключился на etcd кластера вместо своего etcd | Задать tcm_config_storage_endpoints с адресом прежнего хранилища TCM |
Значения из инвентаря не применяются, ошибок нет | В инвентаре остались cartridge_* или другие имена 1.x | Переименовать по разделу Общие изменения инвентаря |