【发布时间】:2018-08-29 00:59:41
【问题描述】:
我们想在 2 个数据中心的 Kubernetes 上部署 Airflow 应用程序。
Airflow Schedular 容器每 1 分钟、5 分钟和 10 分钟生成一次 DAG。这些 DAG 是将分配给 Airflow Worker 容器的任务。
在将任务分配给 Airflow Worker 的过程中,Airflow Schedular 将有关任务的数据发送到 MariaDb(可以认为是 Truth 的来源)和 Redis。
在 MariaDB 中,任务可以具有以下状态之一:“queued”、“running”、“success”、“failed”。当任务在 Redis 中时,它将处于“queued”状态。
MariaDB 在从 Airflow Schedular 接收任务时保持相同。当 Redis 移交特定的队列任务时 对于 Worker 容器,MariaDB 将该特定任务状态更改为“正在运行”,如果它完成执行过程,MariaDB 中的任务状态将更改为“成功”。
实际问题:
当 Redis 发生故障时,我们在 MariaDB 中有任务排队,但我们会丢失 Redis 中的数据。当 k8s 启动新的 Redis 服务器时,它会丢失以前的任务 - DATA LOSS。
有什么办法可以解决这个问题。
我们可以使用Redis Clustering - Gossip protocol 来避免数据丢失吗:
如果是,您能否提供使用此协议解决此问题的任何文档。 else 提供适合我的环境和场景的建议。
【问题讨论】:
-
如果您能建议任何企业级解决方案在我们的场景中依赖它,那就太好了
-
有人能给出使用 Hazelcast 代替 Redis 的建议吗?这会解决我的问题还是创建新问题?
-
你真的确定Redis是必要的吗?
-
@RickJames James - 项目仍处于研究阶段,Redis 较早提出,但与 Airflow 集成时存在一些缺陷。
标签: kubernetes mariadb hazelcast airflow-scheduler redis-cluster