Ночью грохнулась база. Хорошо, что резервная, хорошо, что было кому ее достаточно быстро поднять. По итогам разбирательств выяснил, что причина была в нескольких удачных скачках вперед времени. Точно не помню, но один из скачков был больше 400 секунд. Соответственно, инстанс ASM, который в это время был достаточно сильно нагружен, сделал вывод, что если он столько времени бездействует, то он висит. Закрылся, а за ним закрылась и база. Выяснилось так же, что в системе были установлены одновременно и chronyd, и ntpd, которые друг друга попеременно выключали. Зачем было так сделано я не выяснял :) Просто выкинул ntpd и немного понастраивал chrony.conf
Общая идея такова, что один сервер в вашей локальной сети синхронизирует время с внешкой, а все остальные в локальной сети синхронизируют время с ним. Есть практика синхронизировать время с контроллерами домена, но, учитывая, что они, в свою очередь, синхронизируются с серверами MS, а те и сами блокируют РФ, и админы блокируют что ни попадя, чтобы не палить свою пиратку, в общем, рекомендую нормальный Linux-NTP, то есть chrony.
Вот результат для сервера:
Код:
pool pool.ntp.org iburst maxsources 5
driftfile /var/lib/chrony/drift
makestep 1 2
rtcsync
minsources 3
maxslewrate 500
allow 192.168.0.0/16
allow 10.10.0.0/16
local stratum 10
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony
По конфигу немного пояснений. Во-первых, без директив allow не включается сам сервер NTP в chrony, поставьте свои подсети, откуда пойдут подключения.
Очень важная директива pool, вместо привычной раньше server, она из пула берет сразу несколько адресов, в нашем случае достаточно и 5, вряд ли выйдут все разом из строя. Я в примере оставил универсальное значение, но имейте ввиду, что есть адрес ru.pool.ntp.org, который годится для России (не путайте, не содержит российские сервера), а есть еще 1.ru.pool.ntp.org, 2.ru.pool.ntp.org, 3.ru.pool.ntp.org, причем, выдает IPv6 мне только второй. Почему - не знаю, но оставил его. У меня они самые быстрые.
Поскольку все эти сервера от энтузиастов, то доверие к ним должно уравновешиваться количеством сверяемых серверов, поэтому
minsources 3
Дело даже не в целенаправленной порче, просто иногда прошивка GPS багованая или какой-то сбой.
И еще одна ключевая штука
maxslewrate 500
сама технология работы chrony заключается в том, что она разгоняет или замедляет часы таким образом, чтобы они догоняли или отставали до нужного времени. По умолчанию разгон может быть слишком большим. Этого хватает, чтобы не очень долго догонять, но может вызвать таймауты. Потому я поставил 500 ppm.
При старте сервиса первые две синхронизации будут резкими
makestep 1 2
определяет, что если время будет отличаться больше, чем на секунду, то chrony изменит его на правильное сразу.
Настройка клиента ничем особенно не отличается, вот пример конфига для него
Код:
server ИМЯ_СЕРВЕРА_ВЫШЕ iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony
То есть тут нацеливание на сервер NTP, который был выше, отключаем сервер NTP локально, убираем ограничения на скрорость синхронизации, поскольку на клиентской машине важнее иметь правильное время, чем плавно его изменять. Какой-нибудь oowriter переживет скачки времени.
Внимания заслуживает sourcedir, если вы раздаете адреса NTP соответствующей опцией DHCP, то можете ее включить, чтобы получать адрес NTP-сервера автоматически.