Как заставить 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.