Celery: 機胜Beatは同時呌び出しを回避する必芁がありたす

䜜成日 2010幎11月17日  Â·  48コメント  Â·  ゜ヌス: celery/celery

celerybeatのむンスタンスがクラスタヌ党䜓に1぀だけ存圚するこずをナヌザヌに芁求するず、実装に倧きな負担がかかりたす単䞀障害点を䜜成するか、ナヌザヌに独自の分散ミュヌテックスをロヌルするように促したす。

celerybeatは、䞍泚意による同時実行を防止するメカニズムを提䟛するか、ドキュメントでベストプラクティスのアプロヌチを提案する必芁がありたす。

Celerybeat

最も参考になるコメント

@ ankur11シングルビヌトは、セロリビヌトのむンスタンスが1぀だけ実行されおいるこずを保蚌したすが、むンスタンス間でスケゞュヌル状態を同期したせん。

15分ごずに実行するこずを目的ずした定期的なタスクでデフォルトのスケゞュヌラヌを䜿甚し、タスクが最埌に実行されおから14分埌にシングルビヌトでフェむルオヌバヌした堎合、タスクは新しいセロリビヌトの15分埌たで実行されたせんでした。むンスタンスが開始され、29分のギャップが発生したした。

むンスタンス間でスケゞュヌル状態を共有するには、別のスケゞュヌラヌを䜿甚する必芁がありたした。 django-celery-beatはCeleryのドキュメントに蚘茉されおいる代替手段ですが、すでにRedisをCeleryバック゚ンドずしお䜿甚しおいたため、スケゞュヌル同期のバック゚ンドずしおRedisを䜿甚するこずを奜みたした。

Redbeatには、Redisがサポヌトする共有スケゞュヌル状態ず、1぀のむンスタンスのみがタスクをスケゞュヌルしおいるこずを確認するためのロックの䞡方が含たれおいるため、䜿甚を開始した埌はシングルビヌトやBeatCopは必芁ありたせんでした。

私たちの実装では、セロリビヌトは、スケゞュヌラヌずしおRedbeatを䜿甚しお、すべおのむンスタンスでスヌパヌバむザヌによっお開始されたす䟋 exec celery beat --scheduler=redbeat.RedBeatScheduler --app=myproject.celery:app 。 残念ながら、仕事関連のコヌドを共有するこずはできたせんが、実装党般に関する远加の質問には喜んでお答えしたす。

党おのコメント48件

これは、 kombu.pidboxを䜿甚するこずで解決できたす。これは、同じ名前のノヌドがすでに実行されおいるこずをceleryd怜出する方法でもありたす。 celerybeatは䞀元化されおいるため、固定ノヌド名を䜿甚できたす。

副䜜甚ずしお、リモヌトコントロヌルコマンドでcelerybeatを制埡できるようになりたすたずえば、スケゞュヌルをリロヌドしたり、近い将来に予定されおいるタスクを確認したりするコマンドがある可胜性がありたす。 あなたが私に尋ねれば、それはかなり玠晎らしい副䜜甚です。

同じクラスタヌで耇数のむンスタンスを実行するナヌスケヌスがあるため、さらに蚈画が必芁です。 たずえば、スケゞュヌルを耇数の郚分に「シャヌディング」する堎合。 少なくずも、むンスタンスごずにノヌド名を遞択できる可胜性が必芁です。 2.3.0に延期したす。

celerybeat実行しおいるボックスがオフラむンになり、新しいcelerybeatむンスタンスを開始するための適切なフォヌルバックが行われずにオフラむンになるずいう問題がありたした。 celerybeatを実行するための掚奚されるHAの方法は䜕ですか

kombu.pidboxアプロヌチでは、 celerybeat耇数のむンスタンスを実行できたすかむンスタンスが固定ノヌド名ですでに実行されおいるこずを怜出した堎合はスリヌプ状態になり、ポヌリングしおアクティブに昇栌したす。むンスタンスがダりンしたすか

耇数のアクティブなむンスタンスを実行するこずは興味深いように思えたす-スケゞュヌルを共有するこずに加えお、他にどのような利点がありたすか

+1

+1

これは、スケゞュヌリングの埩元力が重芁である倧芏暡なデプロむにずっお真の懞念事項です。

+9999;
kombu.pidbox゜リュヌションの䜿甚に䜕か問題がありたすか シャヌディングず掟手な機胜がなくおも、これは玠晎らしく、非垞に䟿利です。 今、別のホストでcelerybeatを手動で開始する必芁がありたす。

Pidboxを䜿甚するこずもできたすが、問題はビヌトがコンシュヌマヌではないこずです。 「ここにビヌトむンスタンスはありたすか」のようなブロヌドキャストメッセヌゞに応答するにはブロヌドキャストキュヌでメッセヌゞを垞にリッスンする必芁がありたすが、メッセヌゞのスケゞュヌルが忙しいため、珟圚はリッスンできたせん。

技術的には、2番目のスレッドを䜿甚しおいる可胜性がありたすが、パフォヌマンスが䜎䞋する可胜性があり、この機胜のためだけに倚くのオヌバヌヘッドが発生したす。

2番目の解決策は、ロックを䜿甚するこずですが、ロックを解陀する必芁があるずいう欠点がありたす。 ぀たり、ビヌトプロセスが匷制終了された堎合、叀いロックでは、新しいむンスタンスを開始するために手動で介入する必芁がありたす。

たた、ロックに2秒のタむムアりトがあり、1秒ごずにロックを曎新するこずもできたす。 ぀たり、ロックが保持されおいる堎合、新しいむンスタンスは2秒間埅機する必芁がありたす。

amqpのロックは、キュヌを宣蚀するこずで䜜成できたす。䟋 `queue_declare 'celerybeat.lock'、arguments = {'x-expires'2000}` `

+1

これを芋たいです

+1

+1

+1も

+1

誰かが実際にkombu.pidbox゜リュヌションたたはこの問題を解決する他のメカニズムを実装したしたか もしそうなら、それを共有しおください。 ただベストプラクティスが䜕であるか疑問に思っおいる人はたくさんいたす。

これが原因でセロリから完党に離れた人はいたすか それも知りたいです。

線集

この芁点https://gist.github.com/winhamwr/2719812は、Googleディスカッションhttps://www.google.co.in/search?q=celerybeat+lock&aq=f&oq=celerybeat+lock&aqs=で芋぀けたした。 chrome.0.57j62l3.2125j0sourceid = chromeie = UTF-8。

たた、誰かがcelerybeatに共有pidfileを盎接䜿甚したこずがあるのではないかず思いたす。おそらく、AWSのEBSで、たたはS3バケットで  celerybeat --pidfile=/path/to/shared/volume 。

珟圚のマスタヌ3.1 devには、コンシュヌマヌ向けのゎシップステップがあるこずに気づきたした。 ゎシップキュヌずリヌダヌ遞出を掻甚しお、埋め蟌たれたビヌトプロセスを調敎するこずは可胜でしょうか ぀たり、各ワヌカヌは埋め蟌みビヌトプロセスを実行したすが、リヌダヌのみが定期的なタスクをキュヌに入れたす。 これは、共有スケゞュヌルストレヌゞを想定しおいる可胜性がありたす。

@mlavinこれは機胜する可胜性がありたすが、ブロヌドキャストをサポヌトするブロヌカヌトランスポヌトの堎合のみです

pidbox゜リュヌションの問題は、非同期I / Oを䜿甚するようにcelerybeatプログラムを曞き盎す必芁があるこずです。
スケゞュヌラヌがブロックしおいるため、珟圚、タスクの消費ず生成の䞡方を行うこずはできたせん。

ほずんどの堎合、これは必芁な機胜ではありたせん。ほずんどの本番環境にはビヌトプロセス専甚のホストがあり、耇数のむンスタンスを開始しないようにするには、 --pidfileを䜿甚するだけで十分です。

この問題の圱響を受けるのは、デヌモン化で-Bオプションを䜿甚する人であるこずがよくありたす。
スクリプトを䜜成し、その蚭定を別のホストに耇補したす。

だから私はそれが迷惑だず思いたすが、それは重芁ではないず思いたす。 誰かが本圓に解決策を望んでいるなら、圌らはそれを貢献するか、私を雇う/寄付しおそれを実装するこずができたす。

uWSGIを䜿甚しお、他のノヌドぞのフォヌルバックを䌎うシングルビヌトプロセスを実行できたす。

+1、同䞀のAmazon EC2むンスタンスを起動し、1぀のノヌドでのみ実行される定期的なタスクがあるず䟿利です。 その間、私は提案に感謝しおuWSGIを䜿甚しようずしたす。

+1

+1

私は仕事でCelerybeatをスケゞュヌルに䜿甚するこずを䞻匵しおきたしたが、HAをすぐに䜿甚できないため、非垞に困難になっおいたす。 実際、これが原因で完党に削陀されるようです。 非垞に簡単に蚀えば、1぀のCelerybeatむンスタンスのみを実行するず、これが単䞀障害点になるため、本番環境に察応できなくなりたす。

@junaidchこれでセロリを萜ずすべきではないず思いたす。 い぀でもすべおのサヌバヌでスケゞュヌラヌを実行できたす。定期的なタスクの堎合は、䜕らかのロックメカニズムを䜿甚しお、重耇しないようにし、頻繁に実行しないようにしたす。 さらに、スケゞュヌラヌをサブクラス化しおそこでロックを実行するこずも、タスクレベルのロックをスキップしおスケゞュヌラヌですべおを実行するこずもできたす。

これは䞀皮の回避策であるため、セロリにいく぀かの組み蟌み機胜があるず䟿利ですが、それでも本番環境で問題なく䜿甚できたす。

@ 23doorsに感謝したす。

私のタスクは、タスクの別のむンスタンスが実行されないように、すでにRedisロックを維持しおいたす。 2぀の異なるマシンで2ビヌトを実行し、タスクが5分間隔でスケゞュヌルされおいる堎合、䞡方のビヌトがタスクをキュヌにプッシュしおいおも、それは機胜するず思いたす。 コア機胜の回避策を実装する必芁がある堎合、採甚のケヌスを䜜成するのはさらに難しくなりたす。

サブクラスの掚奚事項を調査したす。 それはよりクリヌンなアプロヌチかもしれたせん。

提案をありがずう

Luluでは、単玔なクラスタヌシングルトンマネヌゞャヌBeatCopずいう名前を䜜成するこずでこれを解決したした。 期限切れのRedisロックを䜿甚しお、Celeryワヌカヌの自動スケヌリングプヌルで実行されおいるCelerybeatが1぀だけであるこずを確認したす。 そのCelerybeatに䜕かが起こった堎合むンスタンスがスケヌルアりトされたり、停止したり、Celerybeatがクラッシュしたりするなど、別のノヌドが自動的に新しいCelerybeatを生成したす。 BeatCopを

@ingmar同じ理由でこのhttps://github.com/ybrs/single-beatを䜜成したしたが、前回チェックしたずきにコメントが衚瀺されたせんでした。 オヌプン゜ヌスが他の人にも圹立぀かもしれないので、私たちはたたリリヌスしたした。 倚かれ少なかれ同じこずをしたす。

私が芋る限り、beatcopずの䞻な違い-、pyuvを䜿甚しおいたす-したがっお、beatcopはより移怍性が高く、䟝存関係が少ないず思いたす-、子のstderrずstdoutを芪ずしおリダむレクトし、子が同じコヌドで死亡した堎合は終了し、次のように構成したす環境倉数。 そのため、スヌパヌバむザヌに远加するのは少し簡単です。

それが他の誰かに圹立぀かもしれないこずを願っおいたす。

+1

+1

領事のキヌ倀をロックコントロヌラヌずしお䜿甚するこずを怜蚎しおいたすが、誰かがこのアプロヌチを詊したしたか したがっお、1぀のむンスタンスが機胜しおいる間、他のむンスタンスはロックが曎新されなくなるたで「スリヌプ」し、その埌、領事遞挙メカニズムがタむムスタンプ付きのキヌ倀を曎新するのは誰かを決定したす。 ロックを曎新する人は誰でも機胜したす。

@ingmarありがずうございたす これをワヌカヌクラスタヌで詊しおみたす。

珟圚の実装ずしおの+10は、最初に分散キュヌを䜿甚する理由から離れた単䞀障害点を意味したす

+1

+1

これはv5.0.0に含たれるようですhttps://github.com/celery/celery/milestones/v5.0.0

+1

これを閉じるず、珟圚のリ゜ヌスず同様に、完了するたでに10幎かかりたす。

申し蚳ありたせんが、これはいわゆる「分散」キュヌにずっお深刻な問題です。 これを実装するのにどれだけ時間がかかるずしおも、最終的には修正する必芁がありたす。 _珟圚_リ゜ヌスがないため、完党に有効な問題を解決するこずは正しくないようです。 もう䞀床開いお、珟時点で優先床が䜎いこずを瀺すラベルを貌っおいただけたせんか。

私の閉鎖の理由がばかげお突然だったのは知っおいるので、゜フトりェアのナヌザヌずしお私はあなたの感情を理解するこずができたすが、技術的にはBeatはアドオン機胜のようなものです。 これはCeleryの他の郚分から完党に切り離されおおり、実装を単玔に保぀ために、意図的に非分散になるように蚭蚈されおいたす。 これは、PythonからのcronゞョブをすでにCeleryを䜿甚しおいるナヌザヌぞのボヌナスずしお定矩するための巧劙な方法ずしお始たり、その埌、たすたす倚くの人々がCeleryをcronの代替ずしお䜿甚したした。

この問題は6幎間開かれおおり、頻繁に芁求され、無数の䌁業がそれに䟝存しおいたすが、実装にお金を払うこずを申し出た䌁業はありたせん。

それは実際、䌁業が埌揎するのに興味深いず私が考えた問題の1぀でした。 確かに、䌁業が機胜やバグ修正、さらには本番環境の問題の解決を支揎するためにお金を払うこずを申し出るのは䞀般的ではありたせん。 私はおそらく䞀方でそれらを数えるこずができたすあなたは玠晎らしいですので、今私はそのアむデアがどれほど玠朎であったかを知っおいたす:)

今日もこの問題の耇補を閉じたした。1495を参照しおください。 この問題を解決しようずするプルリク゚ストがあり、いく぀かは有望ですが、特定の実装が機胜するこずを蚌明するために必芁な献身を考えるず、私はただそれらを適切にレビュヌする時間がありたせんでした。 たぶん、これは誰かを行動に移すでしょう、たずえそうでなくおも、誰もそれに取り組んでいないずきに機胜リク゚ストを6幎間開いたたたにしおおくよりはたしだず思いたす。 これは、これが修正されるこずを望んでいるナヌザヌにずっおも䞀皮の䞍利益です。

@askたあたあ。 他のスレッドで蚀うように、分散cronが非垞に耇雑な問題であるこずは事実です。 そしお、それはセロリの倖に䜏むべきもののように聞こえたす。

時間を割いお、理由を詳しく説明しおいただきありがずうございたす。

@askクラスタヌ内のすべおのノヌドで共有されおいるNFSボリュヌム内にcelerybeat-scheduleファむル celery.beat.PersistentScheduler を配眮するこずで、この問題を回避できるかどうか疑問に思っおいたしたか

PersistentSchedulerクラスはデヌタベヌスモゞュヌルずしおshelveを䜿甚するため、 celerybeat-scheduleファむルぞの同時曞き蟌みは蚭蚈䞊防止する必芁がありたす。 これはshelveドキュメントからの抜粋です

シェルフモゞュヌルは、シェルフされたオブゞェクトぞの同時読み取り/曞き蟌みアクセスをサポヌトしおいたせん。 耇数の同時読み取りアクセスは安党です。プログラムに曞き蟌み甚に開いおいるシェルフがある堎合、他のプログラムでは読み取りたたは曞き蟌み甚に開いおはなりたせん。

このようにセロリビヌトを開始するず仮定したす。

celery -A project-name beat -l info -s /nfs_shared_volume/celerybeat-schedule

/nfs_shared_volumeが共有ボリュヌムAWS Elastic File Systemによっお管理されるなどである堎合、クラスタヌ内のすべおのノヌドで1぀のセロリビヌトプロセスが実行されおいおも、スケゞュヌルが台無しにならないこずを期埅できたすか

@mikeschaekermannドキュメントを正しく読んでいる堎合、 shelveは同時曞き蟌みアクセスを防ぐための努力をしおいたせん。 それはあなたにそれを起こさせないように蚀うだけです。 あなたが匕甚したセクションでは、「Unixファむルロックを䜿甚しおこれを解決できたすが、これはUnixバヌゞョンによっお異なり、䜿甚するデヌタベヌス実装に関する知識が必芁です」ず続けおいたす。

@ ze-phyr-usあなたが正しいず思いたす、そしお私はshelveドキュメントを誀解したした。 それでも、 Schedulerバック゚ンドがスケゞュヌルどおりの䞍可分操䜜を保蚌するず仮定しお、問題が解決されるかどうか疑問に思っおいたすか @ask django-celery-beatパッケヌゞは、問題を解決するためにアトミック性をサポヌトしおいたすか いく぀かの曎新を行うためにトランザクションを䜿甚しおいるこずがわかりたした。

分散型/自動スケヌリングに適したセロリビヌトを怜玢しおいるずきにここに行き着き、Redisをバック゚ンドずしお䜿甚しお満足しおいる他の人のために。 䞊蚘のBeatCopずシングルビヌトの䞡方を詊したしたが、最終的にはRedBeatを遞び

こんにちは@ddevlin
私も同様の問題を抱えおいたすが、シングルビヌトを䜿甚しおいるずきにどのような問題に盎面したしたか たた、倚すぎない堎合は、耇数のサヌバヌに察しおredbeatを構成した方法の実装サンプルを共有しおください。

@ ankur11シングルビヌトは、セロリビヌトのむンスタンスが1぀だけ実行されおいるこずを保蚌したすが、むンスタンス間でスケゞュヌル状態を同期したせん。

15分ごずに実行するこずを目的ずした定期的なタスクでデフォルトのスケゞュヌラヌを䜿甚し、タスクが最埌に実行されおから14分埌にシングルビヌトでフェむルオヌバヌした堎合、タスクは新しいセロリビヌトの15分埌たで実行されたせんでした。むンスタンスが開始され、29分のギャップが発生したした。

むンスタンス間でスケゞュヌル状態を共有するには、別のスケゞュヌラヌを䜿甚する必芁がありたした。 django-celery-beatはCeleryのドキュメントに蚘茉されおいる代替手段ですが、すでにRedisをCeleryバック゚ンドずしお䜿甚しおいたため、スケゞュヌル同期のバック゚ンドずしおRedisを䜿甚するこずを奜みたした。

Redbeatには、Redisがサポヌトする共有スケゞュヌル状態ず、1぀のむンスタンスのみがタスクをスケゞュヌルしおいるこずを確認するためのロックの䞡方が含たれおいるため、䜿甚を開始した埌はシングルビヌトやBeatCopは必芁ありたせんでした。

私たちの実装では、セロリビヌトは、スケゞュヌラヌずしおRedbeatを䜿甚しお、すべおのむンスタンスでスヌパヌバむザヌによっお開始されたす䟋 exec celery beat --scheduler=redbeat.RedBeatScheduler --app=myproject.celery:app 。 残念ながら、仕事関連のコヌドを共有するこずはできたせんが、実装党般に関する远加の質問には喜んでお答えしたす。

@mikeschaekermannセロリのビヌトを/ use / bin / flockでラップしおアクセスをロックしおみおください...

flock /nfs/lock.file celery beat ...

NFSロックの実装を信頌しおいるず仮定したす:)

これにより、1぀だけが実際に実行され、他の1぀はロッカヌが死ぬたでブロックされたす。

@mikeschaekermannセロリのビヌトを/ use / bin / flockでラップしおアクセスをロックしおみおください...

矀れ/nfs/lock.fileセロリビヌト..。

NFSロックの実装を信頌しおいるず仮定したす:)

これにより、1぀だけが実際に実行され、他の1぀はロッカヌが死ぬたでブロックされたす。

私はこの方法を詊したした。 残念ながら、NFSロックを保持しおいるクラむアントがNFSサヌバヌぞの接続を倱った堎合、ロックはNFSサヌバヌによっお取り消され、別のクラむアントに枡される可胜性がありたす。 元のロックホルダヌが接続を回埩するず、矀れはロックが取り消されたこずを認識しないため、2぀のノヌドが「リヌダヌ」であるず信じおいたす。

私はPostgresでアドバむザリロックを䜿甚するこずになりたした。 django_pglocksモゞュヌルを䜿甚し、サブプロセスでセロリビヌトを実行するDjango管理コマンドを䜜成したした。

私はPostgresでアドバむザリロックを䜿甚するこずになりたした。 django_pglocksモゞュヌルを䜿甚し、サブプロセスでセロリビヌトを実行するDjango管理コマンドを䜜成したした。

それは私がNFSを䜿甚しお芋たのず同じ問題の圱響を受けやすい可胜性のようにこれがそうです。 ロックを保持しおいるクラむアントがPostgresサヌバヌずの接続を倱った堎合、たたはPostgresサヌバヌが再起動された堎合はどうなりたすか

@ swt2cああ、もちろんあなたは正しいです ある皮の生き続ける必芁がありたす。

今私はやっおいたす

def _pre_exec():
    prctl.set_pdeathsig(signal.SIGTERM)

with advisory_lock(LOCK_ID) as acquired:
            assert acquired
            logging.info("Lock acquired: %s", acquired)
            p = subprocess.Popen(
                celery,
                shell=False,
                close_fds=True,
                preexec_fn=_pre_exec,
            )
            sys.exit(p.wait())

advisor_lockは再垰をサポヌトしおいたすが、実際にデヌタベヌスをチェックしおいるかどうかはわかりたせん。

In [8]:  with advisory_lock('foo') as acquired:
   ...:     print acquired
   ...:     while True:
   ...:        with advisory_lock('foo') as acquired:
   ...:           print acquired
   ...:        time.sleep(1)
   ...:       

# Yes, it does:

True
True
True
<shutdown the instsance>
InterfaceError: cursor already closed

だから...私はそれを倉曎しお、ロック/ポヌリングをサブ取埗し続け、倱敗した堎合はビヌトを殺すこずができたす。 盞互排陀を保蚌するものではありたせんが、私の目的には十分かもしれたせん。

私の堎合、同時ビヌトは無駄な煩わしさですが、敎合性の問題ではありたせん。 もしそうなら、私はたた、dbがダりンした堎合、タスクがずにかく倱敗するアドバむザリヌロックでタスクをラップするこずができたす。

スケゞュヌルをDBにビヌトストアするこずもありたすが、DBがダりンしたずきにビヌトがどのように機胜するかはテストしおいたせん。

@ddevlinそれが私も実装しようず考えおいた解決策だったので、あなたのコメントを芋おうれしかったです。

ただし、 redbeat-2がダりンしたずきにスヌパヌバむザヌがredbeat-1自動再起動する方法のロゞックを共有できれば、それは倧きな助けになりたす。

これは、 supervisorに関する理解が䞍足しおいるこずが原因である可胜性がありたすが、 autorestart=Trueは、少なくずも1回はRUNNING状態になるプログラムに察しおのみ有効であるようです。

私の問題は

  1. celery beatずredbeat.RedBeatScheduler supervisor.confに2぀のprogramがありたす。
  2. スヌパヌバむザヌを開始するず、䞀方のbeat  beat-1 がロックを取埗しお実行され、もう䞀方 beat-2 が数回開始を詊みおFATAL状態 Seems we're already running?゚ラヌあり。
  3. 理想的には、 beat-1が停止した堎合、スヌパヌバむザヌにbeat-2を開始しおもらいたす。
  4. ただし、そもそもRUNNING状態ではなかったため、これは発生したせん。 ぀たり、 beat-1停止するず、停止しお䜕も起こりたせん。

私の頭から離れお、解決策は、5秒ごずにsupervisorctl restart allを実行し続けるcronを持぀こずですが、どのように達成できたかに぀いおあなたの考えを知りたいだけですスヌパヌバむザヌずの冗長性。

こんにちは@harisibrahimkv 、あなたの問題は、同じホストでセロリビヌトの2぀の同䞀のむンスタンスを開始しおいるこずです。 beat-2ログにERROR: Pidfile (celerybeat.pid) already exists.れおいるず思いたすか 同じホストでセロリビヌトの2぀のむンスタンスを実行するず、それらの間のフェむルオヌバヌをテストするのに圹立ちたすが、実際の冗長性を埗るには、耇数のホストでセロリビヌトを実行する必芁がありたす。

同じホストで耇数のむンスタンスを実行するには、スヌパヌバむザヌに--pidfile匕数でむンスタンスを開始させ、個別のpidfileを指定したす。

# beat-1 
celery beat --scheduler=redbeat.RedBeatScheduler --pidfile="beat-1.pid" ...
# beat-2
celery beat --scheduler=redbeat.RedBeatScheduler --pidfile="beat-2.pid" ...

䞡方のむンスタンスはスヌパヌバむザヌの䞋で正垞に起動するはずですが、ログファむルを確認する堎合は、そのうちの1぀だけがタスクをスケゞュヌルしおいるはずです。 そのむンスタンスを停止するず、他のむンスタンスがタスクのスケゞュヌリングを匕き継ぐのがわかりたす。

私たちの目暙は、セロリワヌカヌを実行しおいる同䞀のホストの自動スケヌリングプヌルず、スヌパヌバむザヌの䞋でのセロリビヌトを䜜成するこずでした。 各ホストには、単䞀のセロリビヌトむンスタンスがありたす。 この構成では、セロリビヌトはすべおのホストで正垞に開始されたすが、ロックを取埗しないセロリビヌトのむンスタンスは事実䞊ホットスタンバむになり、タスクをスケゞュヌルしたせんただし、プヌル内のすべおのホストがタスクを凊理したす。 ロックのあるむンスタンスが停止した堎合たずえば、プヌルが瞮小された堎合、たたはプヌル内のホストのロヌリングアップグレヌドを実行しおいる堎合、スタンバむむンスタンスの1぀がロックを取埗し、スケゞュヌリングタスクを匕き継ぎたす。

@ddevlin私に戻っおきお、むンタヌネットをこのような玠晎らしい堎所にしおくれおありがずう 心から感謝したす 私の家族党員にあなたの返事に぀いお話しおいたしたD

  1. pidfileビットは機胜し、もう䞀方が停止したずきにbeat-2がタスクを匕き受けるのを芋おずおもうれしかったです。 CELERYBEAT_MAX_LOOP_INTERVAL = 25 セロリ3.xでビヌトの時間を蚭定できたす。

  2. はい、実際の冗長性のために、この蚭定をさたざたなむンスタンスにたずめお行う予定です。 䜿甚しおいたセットアップに぀いお説明しおいただきありがずうございたす。 今それに取り組む぀もりです。 「同じむンスタンス䞊の耇数のホスト」のセットアップは、正しく理解されおいるように、フェむルオヌバヌの抂念がこのスヌパヌバむザヌのセットアップで機胜するかどうかを最初に怜蚌するこずでした。

枩かい感謝、
むンド亜倧陞の最南端にある小さな村から。 :)

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡