クラウド (AWS、Heroku、またはセルフマネージド VMS) で大規模なノード クラスターを実行したいと考えています。そのクロックは、事前に定義された許容範囲を念頭に置いて同期する必要があります。おそらく200ミリ秒の許容範囲を探しています。つまり、250 個のノードがある場合、250 個のノード間の最大クロック差が 200 ミリ秒を超えることはありません。世界に対する実際の日付/時刻はあまり気にしません。ソリューションはフォールト トレラントでなければならず、どのシステムのクロックの精度にも依存する必要はありません。実際、どのクロックもそれほど正確ではない可能性があります。
要件は十分に強く、何らかの理由で特定のノードのクロック同期が信頼できないと判断された場合、クロックの非同期化のためにクラスターからノードを削除することをお勧めします。そのため、障害が疑われる場合は、そのノードのある種の制御されたシャットダウンを実行できるようにしたいと考えています。
NTP のようなものを使いたいのですが、NTP の既知の問題 twikiによると:
NTP は、仮想マシン内で実行するようには設計されていません。これには、高精度で処理されるクロック割り込みへの応答時間を備えた、高分解能のシステム クロックが必要です。これらの要件を満たすことができる既知の仮想マシンはありません。
そして、同じ twiki が状況に対処するためのさまざまな方法 (ホスト OS で ntp を実行するなど) を説明していますが、AWS または horoku を使用して環境を十分に変更して準拠することができるとは思いません。回避策。
私が VM で実行していなかったとしても、ntp を実行してきた長年の経験を持つ信頼できる運用管理者は、時々ローカル クロックのずれが原因で、ntp が同期をドロップする可能性があり、ドロップする (または単純に時刻を間違える) ことを教えてくれます。頻繁に発生するわけではありませんが、実際に発生します。マシンを増やすと、これが発生する可能性が高くなります。私の知る限り、自分がどれだけ離れているかを検出するには、ntpd を停止し、クエリ モード コマンドを実行して、再度起動する必要があり、応答を得るまでに長い時間がかかる場合があります。
要約すると、主な目標は次のとおりであるクロック同期が必要です。
- 運用制御が制限されている VM (つまり、「クラウド サービス プロバイダー」) で適切に実行されます。
- すべての参加者間で約 200 ミリ秒のクラスター内の時間許容誤差
- 不良ノードを検出し、積極的に対応する機能
- 耐障害性 (単一障害点なし)
- スケーラブル (ノードを追加しても倒壊することはありません。n^2 は絶対に避けてください)
- 何百ものノードをサポートできます
- どのノードも、他のどのノードよりも優れた時間の概念を持っていると見なされるべきではありません
- 一斉にドリフトする限り、クラスター全体が (合理的な範囲内で) ドリフトしても問題ありません。
説明からすると、ここではBerkeley Algorithmが正しい選択のように思えますが、それは既に実装されていますか?
あると便利:
- 最小限の構成 (参加するノードの自動登録) -- 新しいノードを起動するために重要
- クロック同期に参加しているノードと相対時間オフセットをレポートする HTML ダッシュボードまたは (REST?) API
- きれいなグラフ?