Leap second day today
В предыдущем посте я уже затрагивал тему секунды координации и подготовки к ней. Так как сегодня тот самый день, когда она будет внесена, я хотел бы пройтись по этой теме еще раз, чтобы напомнить о том, как убедиться в том, что эта ситуация будет корректно обработана. Добро пожаловать под кат.
И так, корректно сконфигурированные Stratum 1 ntp-сервера уже несколько часов рассылают соответствующие анонсы, соответственно, ситуация уже «устаканилась», и теперь при диагностике вашего ntp-сервера или клиента вы получите ясную картину.
Проверка анонса
В первую очередь, проверим, что ваше программное обеспечение корректно получило и обработало анонс секунды координации. Самым универсальным способом будет анализ ntp-трафика, используя, например, tcpdump. В результате вы увидите что-то такое:
11:56:41.692324 IP (tos 0xb8, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 76) 192.168.134.4.123 > 192.168.134.86.123: NTPv3, length 48 Server, Leap indicator: +1s (64), Stratum 1 (primary reference), poll 4s, precision -21 Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: GPS^@ Reference Timestamp: 3550020995.728319585 (2012/06/30 11:56:35) Originator Timestamp: 3550021001.680305123 (2012/06/30 11:56:41) Receive Timestamp: 3550021001.692303419 (2012/06/30 11:56:41) Transmit Timestamp: 3550021001.692318439 (2012/06/30 11:56:41) Originator - Receive Timestamp: +0.011998336 Originator - Transmit Timestamp: +0.012013342
Обратите внимание на Leap indicator: — если все хорошо, то в этом поле будет написано "+1s".
Если же вы используете классический ntpd, то можете проверить его состояние выполнив ntpq -c rv — наличие в ответе leap_add_sec или leap=01 означает, что все OK.
Ошибки в данном случае могут быть вызваны не очень удачным выбором ntp-серверов для синхронизации. К сожалению, с выбором легко ошибиться. Среди 13 наиболее известных российских Stratum 1 серверов на данный момент только 7 корректно анонсируют секунду координации.
Краткий обзор российских Stratum 1 ntp-серверов
Сервер | Наличие анонса на момент написания поста |
---|---|
ntp.aas.ru | - |
ntp.ab2b.ru | + |
time.bakulev.ru | - |
ntp.ix.ru | - |
ntp.mobatime.ru | - |
ntp0.ntp-servers.net | + |
ntp1.ntp-servers.net | + |
ntp2.ntp-servers.net | + |
ntp.sonur.ru | - |
ntp1.vniiftri.ru | + |
ntp2.vniiftri.ru | + |
ntp3.vniiftri.ru | + |
ntp4.vniiftri.ru | - |
Прошу использовать указанные выше сервера в соответствии Rules of Engagement и частными условиями предоставления услуг этих серверов.
Проверка ядра
Если у вас unix-подобная операционная система, стоит проверить, смог ли ntpd «донести» до ее ядра информацию о том, что в конце суток будет лишняя секунда. Дело в том, что ntpd может донести эту информацию до ядра, если используется kernel time discipline, то есть набор вызовов ntp_*.
В случае же, если вы запустили ntpd с ключем -x, указали директивой tinker step step равный 0 или больший 0,5 с, или же явно запретили kernel time discipline директивой disable kernel, kernel time discipline не будет использоваться, и лишняя секунда в сутках для ядра будет сюрпризом.
Проверить это можно запустив ntpdc -c kern или ntptime:
$ ntpdc -c kern pll offset: 2.7e-08 s pll frequency: 23.073 ppm maximum error: 0.001501 s estimated error: 0 s status: 2011 pll ins nano pll time constant: 3 precision: 1e-09 s frequency tolerance: 500 ppm $ /usr/sbin/ntptime ntp_gettime() returns code 1 (INS) time d3990b27.8eedaa5c Sat, Jun 30 2012 12:20:39.558, (.558314918), maximum error 2001 us, estimated error 0 us ntp_adjtime() returns code 1 (INS) modes 0x0 (), offset 0.026 us, frequency 23.073 ppm, interval 1 s, maximum error 2001 us, estimated error 0 us, status 0x2011 (PLL,INS,NANO), time constant 3, precision 0.001 us, tolerance 500 ppm,
Ключевым моментом здесь является наличие флага ins.
Автор: timothyz