Мы хотели бы развернуть приложение Airflow на Kubernetes в 2 центрах обработки данных.
Контейнер Airflow Scheduled генерирует DAG каждые 1, 5 и 10 минут. Эти DAG — это задачи, которые будут назначены контейнеру Airflow Worker.
В процессе назначения задач воркеру Airflow, Airflow Schedular отправляет данные о задачах как в MariaDb (может рассматриваться как источник правды), так и в Redis.
В MariaDB задача может иметь один из статусов 'queued
', 'running
', 'success
', 'failed
'. Когда задачи находятся в Redis, они будут в состоянии «queued
».
MariaDB поддерживает то же самое, когда получает задачи от Airflow Scheduler. когда Redis передает конкретную задачу в очереди рабочему контейнеру, MariaDB изменяет статус этой конкретной задачи на «выполняется», и если она завершает процесс выполнения, статус задачи в MariaDB будет изменен на «Успех».
Настоящая проблема:
Когда Redis дает сбой, у нас есть задачи в очереди в MariaDB, но мы теряем данные в Redis. Когда k8s запускает новый сервер Redis, он теряет предыдущие задачи — здесь возникает ПОТЕРЯ ДАННЫХ.
Какое может быть решение для этого.
Можем ли мы использовать Redis Clustering - Gossip protocol
, чтобы избежать потери данных:
Если да, не могли бы вы предоставить какую-либо документацию по решению этой проблемы с использованием этого протокола. иначе предоставьте предложения, которые подходят для моей среды и сценария.