Европейский Университет в Санкт-Петербурге
Опубликован: 19.10.2005 | Доступ: свободный | Студентов: 1745 / 155 | Оценка: 4.31 / 3.82 | Длительность: 18:28:00
Лекция 16:

Время в Solaris. Управление системой с помощью Solaris Management Console

< Лекция 15 || Лекция 16: 1234

Как синхронизировать время?

В Solaris есть возможность установить сервер синхронизации времени, который будет отвечать на вопросы "который час?", поступающие от других машин. Клиент этого сервера - программа ntpdate. Она спрашивает время у сервера точного времени (также называемого сервером синхронизации времени ) и директивно устанавливает время в своей системе. При небольших отклонениях времени от эталонного она вызывает функцию "мягкого изменения" времени, когда время не устанавливается определенным одномоментно, а часы системы ежесекундно "подталкиваются" на долю секунды вперед или назад.

Программу ntpdate можно использовать и без собственного эталонного сервера времени, поскольку существуют публичные серверы времени.

Посмотрим, как работает ntpdate - программа установки системной даты и времени:

date
Сбт 29 Май 2004 19:10:20

Установим заведомо неверное время:

date 1912
Сбт 29 Май 2004 19:12:00

Теперь запустим ntpdate и сообщим ей для ориентировки адреса двух эталонных серверов времени (они взяты из списка на http://www.ntp.org):

ntpdate tock.keso.fi ntp.psn.ru
29 May 19:10:31 ntpdate[10630]: step time server
194.149.67.130 offset -95.351227 sec

Повторим для надежности:

ntpdate tock.keso.fi ntp.psn.ru
29 May 19:10:39 ntpdate[10631]: adjust time server
194.149.67.130 offset -0.006045 sec

Как видим, вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были "возвращены" к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (step time server), а во втором - мягкая "подвижка" (adjust time server).

Программу ntpdate достаточно запускать только при старте системы, если только аппаратура компьютера исправна и таймер не требует постоянной коррекции.

Кроме программы ntpdate существуют и другие средства, предназначенные для синхронизации времени в сети. Программа ntpdate - это "клиентская" программа. В локальной сети организации имеет смысл установить по крайней мере один (а лучше - два, чтобы был запасной) сервер времени. Именно он будет опрашивать серверы слоя 2, а компьютеры локальной сети будут сверять свои часы по этому локальному серверу времени. В качестве такого сервера в Solaris используют демон xntpd.

Настройка сервера синхронизации времени

Алгоритм работы xntpd

Для синхронизации времени в сети был разработан специальный протокол NTP (Network Time Protocol), в настоящее время обычно используется версия 4 этого протокола, но серверы NTP обладают полной обратной совместимостью. Протокол предполагает существование нескольких " слоев " эталонных источников времени.

Как известно, в мире есть так называемые эталонные источники времени - цезиевые часы и радиосигналы точного времени со спутников. Такие эталонные источники, говоря языком протокола NTP, входят в слой 0 ( stratum 0) и являются максимально точными из всех доступных эталонов времени.

К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd - в других системах UNIX) распространяют точное время дальше, к серверам слоя 2 ( stratum 2). Именно к серверам слоя 2 обращаются обычные серверы точного времени из локальных сетей самых разных организаций.

Другими словами, сервер времени xntpd в нашей локальной сети представляет собой сервер слоя 3: вся совокупность таких серверов в локальных сетях и образует слой 3. Номер слоя фактически означает дистанцию (число промежуточных серверов времени ) от данного компьютера до эталонного источника точного времени. Важно отметить, что серверы времени одного слоя не общаются между собой.

Каждый NTP-сервер использует один или несколько источников точного времени, полностью полагаясь на них. Эти источники указываются в файле /etc/inet/ntp.conf. При старте xntpd отправляет им запрос, уточняя текущее время.

Каждый из серверов времени, которым мы доверяем, опрашивается несколько раз для получения достоверной статистики задержки передачи пакета. Если указано несколько серверов, время с каждого из них запрашивается многократно. Как правило, 5 минут уходит на опрос каждого сервера для получения показаний времени, которые следует расценивать как достаточно точные.

Запрос к серверу времени выполняется так:

  • клиент (например, наш xntpd ) указывает в отправляемом серверу пакете свое текущее системное время и отправляет этот пакет;
  • сервер времени получает пакет, вкладывает в него время передачи пакета, вычисленное как разность между временем отправки и временем получения пакета сервером. Затем он вкладывает в этот же пакет свое текущее системное время и отправляет пакет обратно;
  • клиент получает пакет и запоминает свое локальное время получения пакета.

Теперь клиент имеет возможность рассчитать задержку передачи пакета как половину от " времени передачи туда и обратно минус время обработки пакета сервером".

Если разница между эталонным и текущим системным временем не превышает 128 миллисекунд, то xntpd подстраивает частоту системных часов так, чтобы они догнали или затормозились до эталонного времени. Подстройка происходит довольно медленно и плавно.

Если разница превышает 1000 секунд, xntpd полагает, что имеет место фатальный сбой времени на локальной машине и завершается с предсмертным воплем, который запишется в /var/adm/messages.

Если разница находится в пределах между 128 миллисекундами и 1000 секундами, то xntpd по умолчанию выставляет время сразу же, просто вызывая функцию settimeofday().

Таким образом, коррекция времени может быть постепенной и резкой. При резкой коррекции системное время изменяется быстрым скачком, одномоментно. Можно запретить такое изменение демону xntpd, указав при запуске ключ -x. Особенно не рекомендуется изменять время резко, если часы спешат, поскольку ряд приложений, зависимых от времени (например, СУБД), могут в результате сохранить неверные данные. Впрочем, при постоянной работе сервера xntpd, как и при регулярном опросе такого сервера с помощью ntpdate, сильное расхождение времени нашего сервера и эталона исключено. Не следует использовать в качестве сервера времени компьютеры со сбоями аппаратуры или разряженной (неисправной) батарейкой CMOS (x86). Кроме того, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: иначе он не сможет обеспечить быстрый ответ и корректную обработку запроса.

Для общения между собой серверы времени используют UDP порт 123.

Выбор эталонного сервера времени

Как мы уже знаем, чтобы обеспечить синхронизацию времени, в Интернете существуют "эталонные" серверы времени. Для получения показаний времени локальный сервер времени в своей сети следует настроить для обращений ко вторичным серверам ( слой 2), так как нагрузка на главные серверы ( слоя 1) очень велика. В России есть по крайней мере один устойчиво функционирующий эталонный сервер слоя 2 - http://ntp.psn.ru (IP-адрес 194.149.67.130). Он расположен в Пущино; вот его регистрационные данные с сервера http://www.ntp.org:

Location: Pushchino, Moscow region, Russia
Geographic Coordinates: 54:50N, 37:37E
Synchronization: NTP secondary (stratum 2), Alpha/Linux
Service area: Russia
Access policy: open access, please send a message to notify
Contact: clockmaster@psn.ru

Информация о других эталонных серверах времени и о режиме доступа к ним может быть получена по адресу http://www.ntp.org.

Для того чтобы использовать эталонный сервер времени, может требоваться регистрация или даже оплата этого сервиса. Однако в Сети достаточно много таких серверов с публичным доступом, и хорошим тоном считается отправить уведомительное письмо их администратору: просто для того, чтобы вежливо предупредить о том, что отныне еще один сервер времени будет получать информацию с их эталонного сервера.

< Лекция 15 || Лекция 16: 1234
Владислав Поднебесов
Владислав Поднебесов
Россия, Якутск, Якутский государственный инженерно-технический институт, 2007