Как заставить chrony синхронизироваться СЕЙЧАС?

Я запускаю кластер БД, который должен успеть. К сожалению, иногда мой хостер виртуальной машины перемещает виртуальную машину с таким узлом БД на другой хост, и тогда времени не хватает секунды или больше. Затем мой узел БД отключается и перезапускается системой systemd.

Мой файл systemd содержит это:

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

Я ожидал, что это синхронизирует мое время сразу после того, как такая задержка отключит базу данных. Но из-за моих журналов потребовалось до 7 минут, прежде чем разница была обнаружена и исправлена. Моя база данных обнаруживала разрыв при каждом перезапуске и снова закрывалась. Наконец, я получаю этот журнал хронида:

      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 минут:

Моя БД обнаружила проблему в 10:25:51. Исходя из этого, указанная выше команда выполнялась несколько раз для повторной синхронизации часов перед каждым перезапуском базы данных. Но потребовалось время до 10:32:33 и 10:33:53, чтобы окончательно исправить часы.

Любая идея, как я могу заставить часы синхронизироваться напрямую, а не через много минут?

1 ответ

Наконец-то я нашел решение для сохранения хронии, а также принудительной синхронизации времени в случае задержки (обнаруженной узлом БД). Решение заключалось в перезапуске службы хронид — имитации перезагрузки системы.

Я изменил свой системный файл базы данных, чтобы он выглядел так:

      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

Это заставляет chronyd повторно синхронизировать время при перезапуске, если смещение времени превышает 0,5 секунды.

Это, наконец, заставляет мою систему повторно синхронизироваться напрямую, а затем немедленно перезапускать узел базы данных.

Вы можете посмотреть здесь, чтобы найти больше информации об опциях chrony.conf.

Другие вопросы по тегам