Время в сети FreeBSD

Если база данных начинает вводить время, отстающее натри часа, или входящие электронные письма датируются завтрашним днем, вы узнаете об этом очень быстро. Время играет очень важную1 роль. Для управления системным временем есть три инструмента: часовой пояс, tzsetup(8); инструмент коррекции времени в сети ntpdate(8) и программа непрерывной коррекции времени ntpd(8). Для начала рассмотрим порядок изменения часового пояса, а потом перейдем к средствам сетевого протокола синхронизации времени (Network Time Protocol).

Задание часового пояса

Часовой пояс нетрудно установить с помощью tzsetup(8) – программы, управляемой с помощью меню. Она выполнит соответствующие изменения в системе. В крупных компаниях можно по умолчанию задавать среднее время по Гринвичу, а в небольших организациях – местное время. Введите команду tzsetup, укажите географическое расположение вашей компании и выберите соответствующий часовой пояс.

Сетевой протокол синхронизации времени

Сетевой протокол синхронизации времени (Network Time Protocol, NTP) – это способ синхронизации времени по сети. Вы можете заставить локальный компьютер синхронизировать время с атомными часами в исследовательской лаборатории или с часами вашего основного сервера. Компьютеры, предоставляющие услугу синхронизации времени, называются серверами времени и относятся к двум основным типам – уровня 1 и уровня 2 (Tier 1 и Tier 2).

Серверы времени уровня 1 напрямую подсоединяются к высокоточным устройствам, ведущим хронометраж, таким как атомные часы. Им положено быть точными до абсурда. Если вам нужна такая точность, то приобретите атомные часы. Если вас устаивает задержка, присущая передаче со скоростью света, то подойдут радиочасы, которые можно найти в недорогих устройствах GPS.

Серверы NTP уровня 2 подпитываются серверами уровня 1, предоставляя сервисы времени во всеобщее пользование. Точность времени, сообщаемого этими сервисами, составляет доли секунды. Большинству приложений этого более чем достаточно. Дополнительные поиски могут привести даже к серверам времени уровня 3, подпитываемым серверами времени уровня 2.

Разумеется, самое важное время – это момент «пора домой

Отличным источником информации о серверах времени может служить список по адресу http://www.pool.ntp.org. Эта группа собрала серверы NTP в круговые пулы через DNS, что позволяет упростить настройку NTP. Эти серверы времени сначала включаются в глобальный список, потом в списки по континентам и, наконец, в списки по странам. Например, если вы проживаете в Канаде, недолгий поиск на этом сайте приведет вас к серверам 0.ca.pool.ntp.org, 1.ca.pool.ntp.org и 2.ca.pool.ntp.org. Мы будем использовать эти серверы в примерах ниже, однако для настройки собственной службы времени вам следует выбрать серверы времени для своей страны.

Конфигурирование ntpd(8)

ntpd(8) периодически сверяет системное время с серверами времени из определенного списка. Опросив их, ntpd вычисляет разумное среднее значение и постепенно подгоняет системное время до соответствия среднему. Если значения на каком-то сервере времени существенно отличаются от остальных, то они не учитываются. Таким образом, вы получаете самое точное системное время, которое только возможно. При этом от того или иного сервера не требуется слишком много, а аппаратные средства находятся под контролем. Конфигурация демона ntpd(8) находится в файле /etc/ntpd.conf. Вот пример его содержимого:

server 1.са.pool.ntp.org server 2.са.pool.ntp.org server 3.са.pool.ntp.org

Данная система будет получать значения точного времени от трех серверов. Если в списке указать всего один сервер, демон ntpd(8) будет зависеть от часов этого единственного сервера и не сможет опознать появление проблем на сервере времени. Использование двух серверов гарантирует, что ваша система не будет знать точное время; если вы еще помните, при использовании NTP вычисляется среднее из значений, полученных от серверов, но значения, отстоящие далеко друг от друга, просто отбрасываются. Как механизм NTP сможет определить, какое время неверное, если у него будет всего два значения? Оптимальное число используемых серверов – три; если на одном из них появятся проблемы с точностью, ntpd обнаружит, что значение времени, поставляемое этим сервером, лишено смысла по сравнению с другими двумя серверами. (Это своего рода «власть большинства»: тот, чье мнение отличается от мнения большинства, лишается права голоса.)

Мгновенная коррекция времени

ntpd(8) прекрасно справляется с обеспечением достаточно высокой точности хода системных часов в течение длительного времени, но он корректирует локальные часы лишь в небольших пределах. Если же время в системе отличается от фактического на несколько часов или дней (что иногда случается при установке системы или после длительного отсутствия напряжения), вам наверняка потребуется установить точное время, прежде чем запускать любые приложения, работа которых в значительной мере зависит от точного времени. Демон ntpd(8) предоставляет такую возможность в виде команды ntpd -q.

Для однократной принудительной коррекции системных часов используйте команду ntpd -q. Она произведет подключение к серверам NTP, получит корректное время, установит системные часы и завершится.

# ntpd -q

ntpd : time set -76.976809s

В этой системе время отстало примерно на 77 секунд, но теперь синхронизировано с серверами NTP.

Не изменяйте время на рабочих серверах в произвольные моменты времени. В программах, работа которых зависит от точного времени, например в приложениях, управляемых базой данных, возникнут проблемы, если время вдруг скакнет вперед или назад.

Если у вас действительно очень хорошее аппаратное обеспечение с высокоточными часами, то применения команды ntpd -q на этапе загрузки вполне достаточно, чтобы решить все проблемы, связанные со временем. Однако такое аппаратное обеспечение есть далеко не у всех. Большинству приходится обходиться аппаратным обеспечением с весьма посредственными часами. В этом случае лучший способ обеспечить точность хода системных часов заключается в запуске демона ntpd(8), который постоянно будет мягко корректировать время.

Запуск ntpd(8) на этапе загрузки

Чтобы выполнить однократную синхронизацию времени во время загрузки и обеспечить последующую непрерывную коррекцию часов, следует определить следующие параметры в файле /etc/rc.conf:

ntpd_enable="YES" ntpd_sync_on_start="YES"

Распространение информации о времени

ntpd потребляет не слишком большой объем сетевого трафика, тем не менее, если каждый сервер в вашей сети станет обращаться к общедоступным серверам времени, возможен неоправданный расход сетевых ресурсов – как ваших, так и серверов-доноров. Это также может привести к небольшим расхождениям в показаниях часов на компьютерах в вашей сети.

Чтобы этого не случилось, рекомендую настроить единый авторитетный сервер времени в вашей сети. Этот сервер должен синхронизироваться с группой серверов NTP в Интернете. А все остальные серверы в вашей сети должны синхронизировать время с этим локальным сервером NTP. При таком подходе все часы в сети будут достаточно точно синхронизированы между собой. Любые ошибки в показаниях часов

будут происходить либо сразу во всей сети (что может служить признаком появления проблем на сервере времени), либо на одном сервере (что свидетельствует о возникшей проблеме на данном конкретном сервере). Вам не придется просматривать все файлы протоколов, пытаясь определить, не вызвано ли отклонение показаний ваших системных часов проблемами на каком-либо общедоступном сервере времени. Такую политику лучше проводить в жизнь с применением правил брандмауэра; позволяя только одному локальному серверу времени взаимодействовать с внешними серверами NTP и оставляя лишь один возможный источник проблем со временем.

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий