Для работы сложной инфраструктуры, когда много сервисов работают одновременно очень важно иметь в пределах общего IT пространства одинаковое время на всех серверах. Самое удобное это делать с помощью автоматической синхронизацией с серверами точного времени. В большинстве случаев можно пользоваться общедоступными серверами, которых довольно много в интернете. Но в случае организации замкнутой среды, да и вообще для тех кто предпочитается все контролировать, хорошим вариантом будет организация своего собственного сервера точного времени, а лучше двух, для надежности.
Использовать для своей синхронизации они будут сервера из того же интернета, и для достижения большей точности (stratum 2 и выше) будем выбирать наиболее точные и надежные. Список серверов по регионам можно подсмотреть тут http://support.ntp.org/bin/view/Servers/StratumOneTimeServers . Как правило стабильных открытых серверов со stratum 1 (непосредственно подключенных к источнику точного времени) не так много и нагрузка на них довольно большая. Поэтому создания своего сервера для синхронизации это в том числе пусть снять лишнюю нагрузку с них и получить свой стабильный сервер для точного времени.
Для настройки возьмем старый, добрый сервер NTP. Не важно на какой версии ОС вы будете ее ставить, конфиг одинаков везде. Выложу сразу итоговую конфигурацию и потом расскажу что к чему и зачем.
interface listen 10.11.12.2 interface listen 188.8.88.8 interface drop 10.11.12.1 interface drop 188.8.88.8 interface ignore wildcard interface drop lo server 91.226.136.139 server 195.91.239.8 server 95.140.94.2 server 77.234.201.218 server 77.37.146.85 driftfile /var/lib/ntp/ntp.drift logconfig =all logfile /var/log/ntpd.log restrict default ignore restrict 127.0.0.1 restrict 91.226.136.139 noquery notrap restrict 195.91.239.8 noquery notrap restrict 95.140.94.2 noquery notrap restrict 77.234.201.218 noquery notrap restrict 77.37.146.85 noquery notrap restrict 10.11.12.0 mask 255.255.255.0 nomodify notrap restrict 10.14.0.0 mask 255.255.0.0 nomodify notrap
Итак, что есть что
interface listen 10.11.12.2 interface listen 188.8.88.8 interface drop 10.11.12.1 interface drop 188.8.88.8 interface ignore wildcard interface drop lo
В этом блоке мы определяем на каких интерфейсах и адресах мы разрешим работать NTP, а где запрещаем если надо.
server 91.226.136.139 server 195.91.239.8 server 95.140.94.2 server 77.234.201.218 server 77.37.146.85
Здесь прописываем сервера к которым мы будем обращаться за синхронизацией, среди них есть несколько stratum 1 так, итоговый stratum нашего сервера будет на уровне 2.
driftfile /var/lib/ntp/ntp.drift logconfig =all logfile /var/log/ntpd.log
Внутренние настройки NTP по поводу того где будет лежать логи, drift-файл и уровень логирования
restrict 91.226.136.139 noquery notrap restrict 195.91.239.8 noquery notrap restrict 95.140.94.2 noquery notrap restrict 77.234.201.218 noquery notrap restrict 77.37.146.85 noquery notrap restrict 10.11.12.0 mask 255.255.255.0 nomodify notrap restrict 10.14.0.0 mask 255.255.0.0 nomodify notrap
Настройки того кому можно и как обращаться к данному серверу, кому попало лазать не следует, раз мы делаем приватный сервер только для своих. В случае желания сделать открытый сервер для всех настройки будут уже совсем другие. Но это история для другой статьи совсем.
Запускаем сервер и смотрим что он выдает по своим пирам, у меня после некоторого времени работы получилось примерно так
#ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== +n44.time2.d6.hs .GPS. 1 u 1019 1024 377 44.560 -5.584 3.620 *195.91.239.8 .PPS. 1 u 880 1024 377 8.200 1.835 0.801 -95.140.94.2 194.190.168.1 2 u 700 1024 377 8.407 5.305 0.647 -glavhost.com 194.190.168.1 2 u 939 1024 377 8.340 4.098 46.622 +broadband-77-37 46.46.152.214 2 u 793 1024 377 9.088 0.569 0.432
Теперь можно настроить клиента, как ни удивительно но это опять таки будет NTP
Для клиентов конфиг выглядит вот таким образом:
server 10.11.12.2 prefer server 10.11.13.2 prefer driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntpd.log
restrict default ignore restrict 127.0.0.1 restrict 10.11.12.2 noquery notrap restrict 10.11.13.2 noquery notrap restrict 10.11.12.0 mask 255.255.248.0 nomodify notrap
Урезанная версия конфига нашего верхнего сервера, где в качестве пиров для получения точного времени указаны сервер (ы) который мы настроили перед этим. Дав ему поработать немного, чтобы синхронизироваться и выполнив ntpq
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +10.11.12.2 195.91.239.8 2 u 947 1024 377 0.157 1.241 1.148 *10.11.13.2 195.91.239.8 2 u 847 1024 377 0.158 -0.689 0.194
Как то так. Как видно, наши корневые сервера определяются как stratum 2, что в общем-то неплохо и для большинства задач хватает, если вам требуется точность на уровне stratum 1, что в общем-то маловероятно, то нужно приобретать устройство GPRS, Glonass или любое другое имеющее возможность получать данные о точном времени, и которое можно подключить к серверу и получать с него данные. Но это совсем другая задача.