0

間に合う必要がある DB クラスターを実行しています。悲しいことに、私の VM ホスティング業者は、そのような DB ノードを持つ VM を別のホストに移動していて、時間が 1 秒以上足りないことがあります。その後、DB ノードがシャットダウンし、systemd によって再起動されます。

私のsystemdファイルにはこれが含まれています:

ExecStartPre=-+/usr/bin/chronyc -a makestep
ExecStart=/usr/local/bin/.......

このようなタイムラグがデータベースをシャットダウンした直後に、これが私の時間を同期することを期待していました。しかし、私のログが原因で、違いが認識されて修正されるまでに最大 7 分かかりました。私のデータベースは、再起動するたびにギャップを検出し、再びシャットダウンしました。最後に、この chronyd ログを取得します。

Nov 16 10:25:51 dc3-sirius chronyd[164166]: System clock was stepped by 0.000020 seconds
Nov 16 10:26:07 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:26:23 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:26:39 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:26:55 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:27:11 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:27:27 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:27:43 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:27:59 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:28:15 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:28:31 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:28:47 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:28:59 dc3-sirius chronyd[164166]: Source 81.169.199.94 replaced with 212.71.244.243
Nov 16 10:29:03 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:29:19 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:29:32 dc3-sirius chronyd[164166]: Selected source 109.230.227.90
Nov 16 10:29:35 dc3-sirius chronyd[164166]: System clock was stepped by 0.003850 seconds
Nov 16 10:29:51 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:30:07 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:30:23 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:30:39 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:30:55 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:31:11 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:31:27 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:31:43 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:31:59 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:32:13 dc3-sirius chronyd[164166]: Can't synchronise: no majority
Nov 16 10:32:15 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:32:31 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:32:33 dc3-sirius chronyd[164166]: Selected source 109.230.227.90
Nov 16 10:32:33 dc3-sirius chronyd[164166]: System clock wrong by 1.101260 seconds, adjustment started
Nov 16 10:32:48 dc3-sirius chronyd[164166]: System clock was stepped by 1.003151 seconds
Nov 16 10:33:04 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:33:21 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:33:37 dc3-sirius chronyd[164166]: System clock was stepped by -0.000000 seconds
Nov 16 10:33:51 dc3-sirius chronyd[164166]: Selected source 162.159.200.123
Nov 16 10:33:53 dc3-sirius chronyd[164166]: System clock was stepped by 0.409613 seconds

ご覧のとおり、7 分を超えてからクロックの同期を開始しました。

私のDBは10:25:51に問題を検出しました。このことから、データベースを再起動するたびにクロックを再同期するために、上記のコマンドが数回実行されました。しかし、最終的に時計を修正するには、10:32:33 と 10:33:53 まで必要でした。

時計を強制的に直接同期させ、数分後に同期させる方法はありますか?

4

1 に答える 1

1

私は最終的に chrony を維持し、(DB ノードによって検出された) タイムラグが発生した場合に即時の時刻同期を強制する解決策を見つけました。解決策は、システムの再起動をシミュレートして、chronyd サービスを再起動することでした。

データベースの systemd ファイルを次のように変更しました。

ExecStartPre=-+systemctl restart chronyd
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/cockroach start ...

/etc/chrony.confファイルに次の行を追加しました。

initstepslew 0.5 pool.ntp.org
makestep 0.5 -1

これにより、タイム オフセットが 0.5 秒より大きい場合、再起動時に chronyd が強制的に時刻を再同期します。

これにより、最終的にシステムが直接再同期され、データベースノードがすぐに再起動されます。

chrony.confオプションの詳細については、こちらを参照してください。

于 2022-03-01T13:12:03.217 に答える