Журнал изменений
В этом документе содержится хронологически упорядоченный список изменений, внесенных в Tarantool Clusters Federation. Формат журнала изменений основан на документе Keep a Changelog, а версионирование следует правилам Semantic Versioning.
В новом релизе расширены возможности конфигурации Gateway и Destination: добавлены новые параметры репликации, пакетной обработки, метрик и управления heartbeat, а также улучшена работа с Keycloak и журналированием. Кроме того, повышена стабильность системы — оптимизирован запуск подписки, снижена внутренняя нагрузка и исправлен ряд сбоев и аварийное завершение работы в Gateway и Destination.
- Обнаружение отзыва auth-токена Keycloak через сервисного клиента для TCF-worker.
- Обнаружение отзыва auth-токена Keycloak через сервисного клиента для репликаторов.
- Опция
heartbeat_intervalв конфигурацию Gateway. - Поддержка полей
storageиstorage_paramsв конфигурации Gateway. - Параметр
one_way_replicationв Gateway. - Поле
metrics_labelsв конфигурации Gateway и Destination. - Поддержка полей
batch_sizeиbatch_timeoutв конфигурации Gateway. - Переоткрытие журналов при получении сигнала
SIGUSR1. - Поддержка полей
batch_sizeиbatch_timeoutв конфигурации Destination. - Параметр
read_snapshot_from_fileв Gateway.
- Gateway теперь начинает подписку с минимально возможного значения
vclock. - Убрана лишняя загрузка внутреннего space при записи транзакций.
- Таймауты после перезагрузки сервера Gateway.
- Аварийное завершение работы Destination после перезагрузки схемы.
- Аварийное завершение работы Destination при вызове
/tcf/status, если компонент ещё не инициализирован. - Ложные негативные логи при синхронной репликации.
- Ошибка, из-за которой Destination не мог подписаться при длительном отсутствии внешних DML-событий.
Добавлена поддержка перезагрузки конфигурации репликаторов по сигналу SIGHUP, включая совместимость с logrotate.
Также в состав архива TCF добавлена панель Grafana.
- Панель Grafana включена в пакет TCF.
- Корректная обработка сигнала SIGHUP в репликаторах.
- Поддержка использования нескольких экземпляров Gateway в качестве источников репликации кластера.
- Новая опция конфигурации
gateway_clustersдля Destination. - Поддержка профилирования репликаторов через пакет
net/http/pprof. - Параметр конфигурации
shardsдля Destination. - Параметр конфигурации
destination_connect_timeoutдля Gateway. - Поддержка использования нескольких экземпляров Destination как получателей репликации.
- Пакет
tcf-tarantool3-roleтеперь использует версию модуляvshardвместоvshard-ee.
- Причина нездоровья кластера теперь журналируется, даже если кластер сразу инициализируется в статусе
unhealthyбез перехода состояния. - Ошибка на вкладке Settings в веб-интерфейсе Cartridge при пустых конфигурационных полях.
- Нарушение метрик
tcf-workerпосле перезапуска репликатора с повторной инициализацией (rebootstrap).
В этом релизе представлена интеграция с Keycloak для авторизации HTTP API.
Кроме того, релиз содержит несколько важных исправлений, включая обработку операции truncate.
- Поддержка сборки с TDG 2.13.
- Параметр
dial_timeoutв конфигурации Destination для подключения к Gateway. - Поддержка авторизации через Keycloak для технологической роли TCF-worker.
- Поддержка авторизации через Keycloak для Gateway и Destination.
- Поддержка внутренних HTTP API вызовов при включенной авторизации.
- Статус
stoppedдля Destination.
- vshard-ee обновлен до версии 0.1.33 для
tcf-tarantool3-role. - [Breaking change]: удалена поддержка частичного
truncateв шардированном кластере. Операцииtruncateдолжны выполняться на каждом шарде отдельно, как вcrud.truncate. Каждая транзакцияtruncateдолжна быть отдельной операцией.
- Репликация для запросов
update/upsertс оператором удаления#. - Репликация для запросов
update/upsertс операцией строкового сращивания:. - Зависание Destination при неудачном подключении к Gateway.
- Репликация становилась двунаправленной после перезагрузки репликатора.
- Destination не будет завершаться с ошибкой при переподключении к Gateway, если было потеряно соединение хотя бы с одним исходным экземпляром кластера.
truncateмог приводить к конфликтам данных.- Частичное применение
truncateне завершалось после перезапуска.
В этом релизе представлены метрики компонентов и Grafana дашборд для мониторинга.
- Метрики vclock signature для Gateway, Destination и TCF-worker.
- Сбор метрик по статусам ответов HTTP API Gateway, Destination и TCF-worker.
- Метрика информации об имени приложения у репликаторов.
- Поле
aliasв конфигурации для репликаторов. aliasдля каждой метки метрик репликаторов- Обновление
cdc-sdk, перенесённого на библиотекуgo-replicaиз GitLab.
- Работа метрик компонентов Gateway и Destination.
- Стиль меток метрик компонентов Gateway и Destination.
- Сборка Tarantool 3 rock в части хранения конфигурации.
- CVE-2025-30204 в JWT-клиенте etcd.
- Разыменование nil при запуске HTTP API Gateway и Destination.
В этом релизе представлены несколько исправлений, связанных с конфигурацией, процессом репликации и мониторингом.
"Empty replicaset" signatureв ответе статуса после очистки спейса или повторной инициализации.- Ошибка при пустой конфигурации технологической роли
roles.tcf-coordinator. - В случае конфигурации с vshard, событие от активного кластера будет отправлено во все наборы реплик пассивного кластера, если у спейса нет параметра
bucket_id. - Уточнена ошибка при неинициализированном HTTP-сервере.
В этом релизе добавлена полноценная поддержка спейсов с синхронной репликацией и проведены существенные доработки журналирования.
- Поддержка работы с
WAL extensions. - Отслеживание
owner idисходного набора реплик. - Отслеживание подтверждённого
vclockот исходного набора реплик. - Восстановление состояния очереди лимба после перезапуска.
- Формат записей журнала Gateway и Destination теперь основан на видоизменённом формате
log/slogвместо стандартногоgo.uber.org/zap. - Возвращение явной ошибки при некорректной конфигурации логгера.
- Утечка памяти из Gateway из-за незавершённых горутин.
- Используется только первый узел из конфигурации Tarantool config storage в качестве хранилища состояния.
promote: не удаётся поменять статус активного кластера, если пассивный кластер недоступен.promote: не удаётся выполнить, если оба кластера являются пассивными.
- Завершение работы с ошибкой, если лимб получает асинхронные записи, пришедшие не от текущего владельца очереди, после выполненного
promote. - Отключены повторные попытки
bootstrapна нижнем уровне.
- Устранена потеря последних событий снимка состояния, возникавшая из-за состояния гонки.
- Удалён параметр
MaxReconnectsу коннектора: если роутер долго был отключён, соединение было невозможно переиспользовать. - Выбор роутера в Destination стал предсказуемым.
- После повторного подключения Destination к Gateway, Destination начинал получать данные не с того места, где остановился, а с самого начала потока репликации.
- Ошибка восстановления
replicaset pusherв Destination игнорировалась. - Исправлена ошибка, из-за которой Destination мог завершаться сбоем при одновременной обработке транзакций.
- Устранены ложные сообщения
Signature mismatchпри параллельных транзакциях отsource replicaset. - Лимб неподтвержденных транзакций не обрабатывал поток репликации с асинхронными записями
WAIT_SYNC, записанными послеRAFT_CONFIRM. - Ошибки потока на стороне Gateway не обрабатывались.
- Ошибки запуска Destination не обрабатывались.
- Поддержка работы без использования
vshard. - Поддержка IPROTO-запроса
InsertArrow. - Поддержка работы с синхронными спейсами.
- Параметры хранилища конфигурации на основе Tarantool теперь полностью соответствуют формату конфигурации Tarantool.
- Поведение проверки доступности (health check) для Tarantool 3.3.
- Поле
destination.gatewayв конфигурации межкластерных репликаторов данных. Рекомендуется использоватьdestination.gateways.
- Примеры репликации TCF между кластерами Tarantool Cartridge и Tarantool 3.x EE с использованием etcd и хранилища конфигурации и состояния на основе Tarantool.
- Поддержка TLS для gRPC-соединения между Gateway и Destination.
- Пошаговое руководство по миграции с
Cartridge + CartridgeнаTarantool 3 + Tarantool 3с etcd и Tarantool Config Storage. - Поддержка TLS в HTTP API у Gateway и Destination.
- Поддержка группы экземпляров Gateway для Destination.
- Destination может работать без
vshard. - Ошибки при обнаружении бакетов в Cartridge теперь не просто записываются в журнал, а обрабатываются – например, срабатывает повторная попытка или выдается понятное сообщение об ошибке.
- Если для уже работающего кластера поменять хранилище состояний на новое (пустое), то последнее известное состояние кластера будет записано в это хранилище.
- Пакет
etcd-clientвключён вtcf-cartridge-role-scm-1.rockspec. - Обновлена версия модуля
httpдо1.7.0.
- Ложная ошибка в Destination при
bucketID - 1 == bucketCount. - Кластерные координаторы Tarantool 3.x игнорировали параметры
storageиstorage_params. - Возможная ошибка сегментации при вызове метода
GetEventsу Gateway.
mageтеперь автоматически увеличивает лимит открытых файлов в системе перед запуском тестов. Добавлена подсказка, как сделать это вручную.- Возможность изменить префикс хранилища с
/tcfна любой другой через параметрstorage_params.prefixв конфигурации ролей кластера. - Флаг командной строки
--versionдля бинарных файлов Destination и Gateway.
- Gateway теперь передаёт кортежи без поля
bucket_id. - Обновлена CI для сборки и публикации документации:
- документация из ветки
masterсобирается только для тестового сайта, на сайтtarantool.ioдокументация не публикуется; - для версии
latestна основном сайте переключена ветка сmasterнаrelease-0.2.x; - добавлен процесс удаления старых сборок документации.
- документация из ветки
- Добавлена возможность настроить хранение etcd_v2 для Cartridge через
storage: etcd_v2и секциюstorage_paramsв конфигурации ролей кластера, еслиfailover etcdне настроен.
- Отображение версии для Destination, Gateway и ролей.
- Пример репликации TCF между кластерами Tarantool Cartridge и Tarantool 3.x EE.
- Отчёт по покрытию кода тестами в CI и команды
mageс разными скриптами для сбора информации о покрытии. - Поддержка интеграции
roles.httpdдля кластера Tarantool 3.x EE; - Тесты с использованием хранилища на основе Tarantool в качестве хранилища состояний.
- Вывод тестов теперь сохраняется в файл.
- Не генерируется
TRUNCATEпри обработке снимка состояния. - Метрика
worker stoppedустанавливается только когда TCF-worker действительно остановлен. - Для новых наборов реплик всегда начинается загрузка снимка состояния.
- Обработка
xlogначинается только после завершения процесса загрузки снимка состояния. - Используется конфигурация для проверки, является ли экземпляр роутером или хранилищем шарда.
- В тестах для Tarantool 3 добавлено ожидание готового vshard.
- Технологические роли TCF перемещены в репозиторий
cluster-federation.
- Работа с конфигурацией etcd/хранилища на основе Tarantool, заданной через переменные окружения.
- Ошибки
golangciтеперь учитываются в CI-пайплайнах. - Ложные сообщения об ошибке "Signature mismatch" в записях журнала Destination.
- Потеря последнего события снимка состояния (snapshot) из-за состояния гонки.
- Ошибка при запуске bootstrap с реплик хранилища.
- Ошибка переключения кластера сразу после предыдущего переключения.
- Документация.
- Поддержка хранилища состояния etcd v3.
- Поддержка хранилища состояния на основе Tarantool.
- Технологические роли TCF для Tarantool 3.x;
- Поддержка Tarantool 3.x в компонентах Gateway и Destination;
- Пример конфигурации кластера Tarantool 3.x.
- Добавлены дополнительные проверки для разных случаев, когда результат недействителен.
- Пропуск загрузки схемы при подключении.
- Корректная проверка состояния участника кластера Cartridge.
- Плавное переключение (toggle) происходит только если есть связь с кластером.
- Состояние гонки при инициализации.
- Кластер, который был пассивным, снова может стать активным.
- Проверка статуса набора реплик.
- Блокировки etcd v2 и v3.
- Проверка синхронности.
- Перевод в активное состояние предварительно пассивного кластера.
- Настройка DML-пользователей при остановке.