Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Redis-使用群集避免数据丢失(使用八卦协议)_Kubernetes_Mariadb_Hazelcast_Airflow Scheduler_Redis Cluster - Fatal编程技术网

Kubernetes Redis-使用群集避免数据丢失(使用八卦协议)

Kubernetes Redis-使用群集避免数据丢失(使用八卦协议),kubernetes,mariadb,hazelcast,airflow-scheduler,redis-cluster,Kubernetes,Mariadb,Hazelcast,Airflow Scheduler,Redis Cluster,我们希望在2个数据中心的Kubernetes上部署Airflow应用程序 气流计划容器每1分钟、5分钟和10分钟生成一次DAG。这些DAG是将分配给气流工作者容器的任务 在将任务分配给Airflow worker的过程中,Airflow Schedular将有关任务的数据发送给MariaDb(可被视为真相来源)和Redis 在MariaDB中,任务可以具有以下状态之一:“排队”,“运行”,“成功”,“失败””。当任务在Redis中时,它将处于“排队”状态 MariaDB在从气流调度程序接收任务时

我们希望在2个数据中心的Kubernetes上部署Airflow应用程序

气流计划容器每1分钟、5分钟和10分钟生成一次DAG。这些DAG是将分配给气流工作者容器的任务

在将任务分配给Airflow worker的过程中,Airflow Schedular将有关任务的数据发送给MariaDb(可被视为真相来源)和Redis

在MariaDB中,任务可以具有以下状态之一:“
排队”
,“
运行”
,“
成功”
,“
失败”
”。当任务在Redis中时,它将处于“
排队”状态

MariaDB在从气流调度程序接收任务时保持相同的状态。Redis切换特定排队任务时 对于Worker容器,MariaDB将该特定任务状态更改为“正在运行”,如果它完成了执行过程,MariaDB中的任务状态将更改为“成功”

实际问题:

当Redis失败时,我们在MariaDB中将任务排队,但我们将在Redis中丢失数据。当k8s启动新的Redis服务器时,它将丢失以前的任务—接下来就是数据丢失

解决这个问题的办法是什么

我们是否可以使用Redis群集-八卦协议来避免数据丢失:

如果是,请提供使用此协议解决此问题的任何文档。
否则,请提供适合我的环境和场景的建议。

Redis群集将对此有所帮助,但设置起来有点麻烦,而且它不能完全替代备份

在你的情况下,我认为一个更简单的解决方案是在你的RedisPod启动中加入一个恢复过程。您没有永久性的数据丢失,因为您有您的MariaDB真相源,所以您可以添加一个init container,它运行一个脚本从MariaDB恢复redis数据


另一种显著限制问题的方法是使用持久卷来存储redis数据,因为redis可以定期快照处于内存状态的数据。使用StatefulSet而不是部署来管理Redis节点,POD将在重新启动/重新调度时重新连接存储,并且您不会遇到数据丢失(或者最多是自上次快照以来的小窗口)

我们有备份计划,因为在我的redis pod启动/Schedular中包含一个恢复过程,可以将任务分配给redis,因为它已经与MariaDB连接。但这可能是一个复杂的部分!现在,我想知道更多关于Redis集群做POC的信息。您是否可以建议一些关于设置集群的文档,以及如何在不停机的情况下手动启动节点(如果可能的话)。我们没有想到持久性卷,但我们对在外部卷上存储数据不太感兴趣。您能否提供有关在我的redis pod启动中合并恢复过程的更多信息。将回收程序应用于气流切片(您可以认为这是生产者成分)还是在ReDIS POD启动上?你能详细地指导我吗?如果你能推荐任何企业级的解决方案来支持我们的场景,那就好了。有人能建议使用Hazelcast而不是Redis吗。这会解决我的问题还是会产生新的问题?你真的确定Redis是必要的吗?@RickJames-James-项目仍处于研究阶段,Redis是较早提出的,但它在与气流集成时存在一些缺陷。