複数のRHEL7.1vm(KVM)上のVoltDBクラスターに奇妙な痛みを伴う問題があります。
時刻は、VMとそのハイパーバイザーの間で単一のローカルマスターNTPサーバー-chronyを使用して同期されます。マスターサーバーは外部ntpプールと同期します。
VoltDBによって生成されたランダムエラーがあります:
致命的[メイン]ホスト:クロックスキューは120で、100ミリ秒の制限を超えています。 NTPが実行されていることを確認してください。
Chrony configは、VoltDBのntpdのパフォーマンスガイドに従って可能な限りセットアップされています ここ 。
「google-fu」で高低を検索しましたが、VoltDBがクロックスキューエラーをどのように判断するかについての答えが見つからないようです 。
私が見つけることができる唯一の最も近いものは、このJavaコード: voltdb/SocketJoiner.Java githubの603行目以降です。
skew = System.currentTimeMillis() - currentTimeBuf.getLong();
VoltDBが正確なタイミングのためにJava関数呼び出し--System.nanoTime()を代わりに使用しないのはなぜだろうか。
どんな助けや洞察も素晴らしいでしょう。
起動時に、VoltDBはクラスターの最初のノードからクラスターのすべての参加ノードにラウンドトリップメッセージを送信します。このメッセージは、各ノードの現地時間を照会します。
参加しているノードごとに、その現地時間と最初のノードの現地時間の差が計算されます。これにはクロックスキューが含まれますおよびネットワーク遅延。実際、クロックスキューとネットワーク遅延が互いに打ち消し合う可能性はありますが、可能性はほとんどありません。
VoltDBは、参加しているすべてのノードで、クロック間の最大差を報告します。
この場合、VoltDBは、参加ノードと最初に起動したノード(スタートアップリーダー)を含むノードのペアについて、比較されたクロックの差が120msであったことを示しています。これは、NTP同じデータセンターにあります。
ノード間のpingを使用してネットワーク遅延を確認できますが、VoltDBを実行するように設定したものと同じネットワークインターフェイスを使用していることを確認してください。