芹菜用心脏起搏器打HA?

2024-09-28 20:53:18 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,celery beat是一个被认为是SPOF的调度程序。这意味着服务崩溃,什么都不会安排和运行。在

我的情况是,我需要一个HA设置两个调度程序:主/从,主进程定期地(比如说每30分钟)进行一些调用,而slave可以空闲。在

当主人崩溃时,奴隶需要成为主人,从死去的主人那里捡起剩下的东西,并进行周期性的任务。(领导人选举)

这里的要求是:

  1. 任务每30分钟安排一次(这可以通过芹菜节拍来实现)
  2. 任务不是原子的,它不仅仅是每30分钟一次呼叫,要么失败要么成功。比方说,每隔30分钟,任务会发出50个不同的呼叫。如果主机完成了25次并崩溃了,那么从服务器应该上来完成剩下的25次,而不是再次完成所有50次呼叫。在
  3. 当死机从故障中重新启动时,它需要意识到已经有一个主服务器在运行。无论如何,它不需要作为主机出现,只需要保持空闲直到运行的主机再次崩溃。在

起搏器和芹菜结合是实现这一目标的正确工具吗?在


Tags: 程序服务器进程情况调度slave空闲celery
1条回答
网友
1楼 · 发布于 2024-09-28 20:53:18

简单的回答是“是的。”起搏器会按照你的意愿来做。在

更长远的答案是,由于需要在序列的中间重新启动,您的体系结构很棘手。在

这里有两种解决方案。第一种方法是使用某种数据库(或DRBD文件系统)来记录50个调用中有25个已经完成的事实。问题不是24个已完成的呼叫,也不是25个尚未完成的呼叫,而是系统崩溃时正在进行的呼叫。打电话给25。如果C25还没启动那你就没事了。从机将在起搏器控制下启动,DRBD文件系统将故障转移,新主机将执行#25到#50。如果ţ25被调用,但是老主人还没有标记它,会发生什么?在

您可以设计它,以便它在实际执行调用之前将调用标记为complete,在这种情况下,C25在这个特定的场合不会被调用,或者您可以在调用之后将它标记为complete,在这种情况下,C25将被调用两次。在

理想情况下,你可以使这些调用幂等。这是你的第二个选择。在这种情况下,如果再次调用C1->;C25并不重要,因为没有重复影响。C26->;C50只被调用一次。我对你的架构了解不多,不知道哪一个会有用,但希望这能有所帮助。在

起搏器肯定能处理故障。添加DRBD可以保存两个系统之间的状态。但是,您需要自己解决部分调用问题。在

相关问题 更多 >