Nara-auto.ru

Автосервис NARA
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Синхронизация времени в Solaris

Синхронизация времени в Solaris

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

Например, очевидно, что при запуске резервного копирования через сеть время на сервере, где расположен ленточный накопитель, и время на сервере, откуда производится копирование , должно быть одинаковым – это особенно важно при автоматизации копирования на ленту, и еще важнее – при организации последовательного копирования на несколько лент, если объема одной недостаточно для завершения копирования.

Еще один пример важности синхронизации времени – возможные проблемы при сохранении на файловом сервере файлов с тех клиентских машин, чье время отличается от серверного. Из-за этого на клиентских системах может возникать ложное восприятие «свежести» или «несвежести» файлов, хранящихся на сервере. Согласитесь, неприятно сохранить файл и тут же убедиться, что он датирован вчерашинм днем. Приходится гадать, сохранен ли свежий файл в соседний каталог, или на сервере просто сбита дата, или дата неверна на клиентской машине.

Как узнать и установить системное время и дату

Для того, чтобы узнать, который час, в UNIX принято использовать команду date . Она сообщает и текущую системную дату, и время. Команда time предназначена для другой цели – она подсчитывает время, потраченное системой на выполнение команды. Попробуйте

для проверки, как много времени процессора займет составление и вывод полного списка файлов системы.

С помощью команды date можно не только узнать текущее время, но и установить его. Устанавливать системное время может только root .

Программа date понимает разные форматы дат, когда вы требуете установить дату, наиболее стандартным является формат

  • сс – 19 или 20 ( cc – от «век» – century);
  • yy – год (98, если 1998, или 67, если 2067);
  • MM – месяц;
  • dd – число месяца;
  • hh – час;
  • mm – минуты;
  • ss – секунды.

без параметров выводит текущую дату и время, в формате, определяемом параметрами локализации (locale).

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

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

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

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

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

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

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

Очевидно, что вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были «возвращены» к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (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). Кроме этого, сервер времени не должен быть сильно нагруженным ресурсоемкими задачами компьютером: он не сможет обеспечить быстрый ответ и корректную обработку запроса.

Команда time синхронизация времени

Не принципиально в каком часовом поясе сервер, и что показывают часы. Их показания всегда можно скорректировать. Но, согласитесь, что гораздо приятней, когда сервер находится в вашей временной зоне и/или в зоне большинства посетителей вашего сайта.

В этой статье на примере CentOS (RedHat Linux) я покажу как удаленно изменить время на сервере с операционной системой Linux. Она будет полезна всем кто администрирует Linux server.

Какие часы бывают в Linux

Немного теории. В любом компьютере есть два вида часов. Одни аппаратные (ЧРВ — часы реального времени или RTC — real time clock), которые работают даже при выключенном блоке питания, на это у них есть батарейка на материнской плате. Другие программные, то есть часы операционной системы. Показания этих часов могут различаться. При этом программные часы опираются на показания аппаратных при старте операционной системы. А в дальнейшем могут синхронизироваться через интернет с эталонными и корректировать ход аппаратных.

В большинстве случаев если компьютер работает под управлением операционной системой Windows показания аппаратных и программных часов совпадают. В linux же чаще всего аппаратные часы настраивают по гринвичу (времени нулевого меридиана), а программные по необходимому смещению для часового пояса где расположен сервер.

Абсолютное большинство программ (приложений и сервисов) в своей работе опираются на показания системных (программных) часов.

Для чего нужно корректировать часы

  • Чтобы избежать вчерашних новостей и публикаций завтрашнего дня. К примеру часы вашего сервера идут по времени Хабаровска, а основные посетители из Европы (разница UTC+11). В такой ситуации вечерний посетитель увидит «завтрашние» даты на сайте. Так как когда в Европе вечер, то в Хабаровске утро следующего дня.
  • Чтобы было удобно настраивать задания Cron.
  • Чтобы время создания файлов совпадало с фактическим и не вводило Вас в заблуждение.

Как настроить время вашего сервера

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

Приведенный пример для случая когда аппаратные часы идут по UTC, а сервер настроен на Московский часовой пояс. Особых пояснений требует опция —utc вывод времени производится (формируется) с условием, что аппаратные часы идут по времени UTC. То есть показания должны совпадать с желаемым временем на сервере. Опция же —localtime наоборот показывает время аппаратных часов без всяких поправок.

Несколько полезных команд установки времени аппаратных часов

Устанавливаем время аппаратных часов равное системному:

Устанавливаем время системных часов на основании ЧРВ:

Устанавливаем время равное указанному:

Значение временной зоны

Данные временной зоны для аппаратных часов в Centos хранятся в файле /etc/sysconfig/clock.

Для московской временной зоны в случае когда аппаратные часы идут по UTC он имеет следующее содержимое:

Где ZONE — это наш часовой пояс, UTC говорит о том, что аппаратные часы сервера идут по универсальному времени UTC, ARC в значении false — значит используется нормальное значение века (эпохи) UNIX.

Подробнее по конфигурации файла /etc/sysconfig/clock в CentOS можно почитать в официальной документации.

Системные часы операционной системы CentOS

Для системных (программных) часов CentOS используется команда date.

Приведенный пример для случая когда операционная система использует Московский часовой пояс. Здесь опция —utc говорит, что необходимо показать время нулевого меридиана, то есть без поправок на часовой пояс.

Изменение временной зоны (часового пояса) в CentOS

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

В начале, сделаем резервную копию существующего файла временной зоны (часового пояса).

Затем, создаем ссылку на необходимую временную зону.

где Europe/Moscow необходимая временная зона. Полный список доступных часовых поясов смотрим в каталоге /usr/share/zoneinfo/.

При необходимости можно установить значение времени вручную:

где MM – месяц, DD – день, hh – час, mm – минуты.

То есть чтобы задать, к примеру, 18 марта 20 часов 15 минут, нужно ввести следующее:

Более подробно о команде date, можно почитать в мануале, выполнив команду:

Настройка сервера времени ntp

Со временем часы могут убегать или отставать, поэтому время от времени их нужно синхронизировать с эталонными. Для этого в CentOS используется демон ntpd.

Установим демон ntpd если его нет в системе:

Однократно синхронизируем время:

Если получили что-то вроде the NTP socket is in use, exiting — значит ntpd демон уже запущен. В этом случае остановим его:

Настраиваем работу ЧРВ в BIOS на время по UTC:

Этой командой мы присвоили значение времени аппаратных часов равным системному времени. Как вы помните, системные часы мы синхронизировали командами выше.

Проверим содержимое файла /etc/sysconfig/clock чтобы система после загрузки правильно выставляла местное время. Для Москвы он должен содержать следующее:

Настраиваем демон ntpd на автозагрузку при старте операционной системы:

Запускаем демон синхронизации времени:

Проверяем системное время командой:

Оно должно совпадать с реальным.

Проверим, синхронизируется ли системное время с серверами эталонного времени (ntp server) и все ли там в порядке командой ntpq -p:

Демон ntpd включает в ядре Linux режим «11 minute mode». В этом режиме каждые 11 минут синхронизируются системные и аппаратные часы. По-умолчанию он (режим «11 minute mode») выключен и включается только когда какой-то сервис попросит включить этот режим. Демон ntpd как раз его и (режим «11 minute mode») включает. Так что дополнительно синхронизировать аппаратные часы по значению системных нет необходимости.

🐹 CentOS 7: Настройка синхронизация времени по Network Time Protocol. Утилита chrony.

Chrony — это гибкая реализация протокола сетевого времени — Network Time Protocol (NTP). Используется для синхронизации системных часов с различных NTP-серверов, эталонных часов или с помощью ручного ввода.

Также можно его использовать как сервер NTPv4 для синхронизации времени других серверов в той же сети. Chrony предназначен для безупречной работы в различных условиях, таких как прерывистое сетевое подключение, перегруженные сети, изменение температуры, что может повлиять на отсчет времени в обычных компьютерах.

Chrony поставляется с двумя программами:

  • chronyc — интерфейс командной строки для службы Chrony;
  • chronyd — служба, которая может быть запущена во время загрузки системы.

1.1. Установка программы.

Внимание! В CentOS 7 данная утилита уже идет в комплекте даже при минимальной комплектации установщика. Устанавливать отдельно в CentOS 7 утилиту chrony не надо.

Для CentOS 8 из официальных репозиториев убрали ntp и ntpdate, поэтому для синхронизации времени нужно использовать chrony.

Основные преимущества chrony:

  • высокая скорость и точность синхронизации;
  • корректная работа при отсутствии доступа к эталонным часам (ntpd требуются регулярные запросы);
  • по умолчанию не меняет сразу время при синхронизации, чтобы не нарушить работу программ.

Проверим есть ли на нашем сервере автоматическая синхронизация — статус службы по обновлению времени через интернет.

Для этого можно использовать указанную выше команду timedatectl без параметров.

В данном ответе CentOS 7 уже имеет синхронизацию и настроена корректно. Устанавливать утилиту chrony не надо.

Утилита timedatectl также позволяет изменить время:

# timedatectl set-time ‘2019-11-27 17:51:00’

Если по каким-либо причинам chrony у вас не установлена, то ответ будет такой, как на картинке-примере ниже. В этом случае для синхронизации времени нужно установить и использовать chrony.

Если у вас она не стоит, что видно по скриншоту, то установим и настроим вручную:

# yum -y install chrony

Как и любой другой сервис, после установки chrony нужно включить и добавить в автозагрузку:

# systemctl start chronyd
# systemctl enable chronyd

1.2. Проверка работы программы.

Для проверки статуса chrony используется следующая команда.

# systemctl status chronyd

Проверяем, нормально ли запустился:

Все в порядке, сервис настроен и работает. После запуска он автоматически синхронизирует время. Теперь наши часы будут автоматически синхронизироваться с сервером времени в интернете.

1.3. Проверка синхронизации.

Чтобы проверить, синхронизирован ли chrony на самом деле. Как и у ntp, у chrony есть интерфейс командной строки chronyc. Мы будем использовать его программу командной строки chronyc, которая имеет опцию отслеживания для предоставления соответствующей информации.

Перечисленные пункты содержат следующую информацию:

  • Reference ID — идентификатор и имя, с которым компьютер в настоящее время синхронизирован.
  • Stratum — количество переходов к компьютеру с установленными основными часами.
  • Ref time — это время по Гринвичу, в которое было выполнено последнее измерение из эталонного источника.
  • System time — задержка системных часов от синхронизированного сервера.
  • Last offset — расчетное смещение последнего обновления часов.
  • RMS offset — долгосрочное среднее арифметическое значения смещения.
  • Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm, то есть ч/м (частей на миллион).
  • Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой.
  • Skew — расчетная погрешность, связанная с погрешностью частоты.
  • Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер.
  • Leap status — это статус, который может иметь одно из следующих значений: нормальное, добавить второй, удалить второй или не синхронизироваться.

1.4. Источники синхронизации.

Чтобы проверить информацию об источниках chrony, можно выполнить следующую команду:

1.5. Настройка параметров.

Конфигурационный файл chrony — /etc/chrony.conf .

В нем нужно указать список NTP серверов, которые нужно использовать для синхронизации.

Конфигурационный файл chrony находится по адресу /etc/chrony.conf .

Пример конфигурационного файла может выглядеть примерно так:

Приведенная выше конфигурация содержит следующую информацию:

  • server — данная директива описывает NTP-сервер, с которым необходимо синхронизироваться.
  • stratumweight — какую задержку следует добавить к источнику синхронизации для каждой группы. Значение по умолчанию: 0,0001.
  • driftfile — расположение и имя файла, содержащего данные смещения.
  • makestep — эта директива заставляет chrony постепенно корректировать любое смещение во времени путем снижения скорости или замедления хода часов по мере необходимости.
  • logdir — путь к файлу журнала chrony.

Если нужно немедленно перейти к настройке системных часов и игнорировать текущие настройки, воспользуйтесь следующей командой:

3.6. Остановка работы программы.

Остановить работу сервиса можно вот такой обычной командой:

# systemctl stop chrony

Убрать из автозапуска этой командой:

# systemctl disable chrony

2. Возможные ошибки и их устранение.

2.1. Проблема с Local/RTC временем.

Необходимо, что бы Local/RTC время было одинаковым.

При выводе результатов работы команды timedatectl , к результату постоянно приписывается абзац:

Внимание: система настроена на считывание времени RTC в локальном часовом поясе. Этот режим не может быть полностью поддержан. Это создаст различные проблемы с изменением часового пояса и переходом на летнее время. Время RTC никогда не обновляется, оно полагается на внешние средства для его поддержания.

Если оффлайн часы сильно убегают значит не выставлен машинный таймер. Будем чинить!

Переключимся на сохранение локального, а не глобального (UTC) времени в BIOS.

# timedatectl set-local-rtc 1

Потом обновляем машинный таймер:

# hwclock —utc —systohc

И будет всё точно как швейцарские часы!

Проверить успешность переключения этой же командой без параметров:

Как видно предупреждение исчезло!

2.2. Ошибка ручной синхронизации времени (timedatectl).

Аналогичная ошибка может возникать и при работе с утилитой timedatectl:

# timedatectl set-time ‘2019-11-27 17:51:00’

Теперь нужно отключить автоматическую синхронизацию в самой утилите timedatectl :

# timedatectl set-ntp 0

И выполнить команду по установке конкретного времени:

# timedatectl set-time ‘2019-11-27 17:51:00’

Всё стало хорошо!

2.3. Ошибка: Operation not permitted.

Так при ручной синхронизации, часто бывают ошибки вида:

28 Nov 10:12:39 ntpdate[897482]: sendto(185.217.191.98): Operation not permitted

В этом случае проверьте правила firewalld или iptables, и убедитесь, что у вас на сервере открыт UDP порт 123. Так же некоторые хосты синхронизации могут быть недоступны в момент проверки.

Синхронизация времени в Ubuntu 16.04

Точное хронометрирование – очень важный аспект корректной работы многих современных программ. Из-за неправильного времени на сервере могут возникнуть ошибки, и данные могут быть повреждены (например, при обновлении БД или логировании).

В Ubuntu 16.04 синхронизация времени встроена и включена по умолчанию; за неё отвечает сервис timesyncd. Данное руководство ознакомит вас с базовыми командами для управления временем, научит проверять состояние timesyncd и устанавливать другие сервисы сетевого времени.

Требования

  • Сервер Ubuntu 16.04.
  • Пользователь с доступом к sudo (руководство нужно выполнить в сессии этого пользователя).

Все необходимые инструкции можно найти здесь.

Основные команды для управления временем

date – основная команда для определения времени на сервере. Любой пользователь может использовать её, чтобы узнать дату и время:

date
Wed Apr 26 17:44:38 UTC 2017

Обычно по умолчанию серверы используют часовой пояс UTC (Coordinated Universal Time) – это всемирное координированное время. UTC последовательно устанавливает время на серверах и минимизирует ошибки в случае если сервера инфраструктуры находятся в разных часовых поясах.

Чтобы изменить часовой пояс, используйте команду timedatectl.

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

Перемещаться вниз по списку можно с помощью клавиши пробела, а вверх – с помощью b. Выберите часовой пояс, запишите его и нажмите q, чтобы закрыть список.

Используйте следующую команду, указав в ней требуемый часовой пояс:

sudo timedatectl set-timezone America/New_York

Примечание: Вместо America/New_York укажите необходимый часовой пояс.

Убедитесь, что пояс изменился:

date
Wed Apr 26 13:55:45 EDT 2017

Аббревиатура часового пояса будет отражать новое значение.

Управление сервисом timesyncd

До недавнего времени за синхронизацию времени отвечал демон ntpd. Он подключал сервер к пулу серверов NTP, что обеспечивало точное хронометрирование.

Теперь Ubuntu вместо ntpd по умолчанию использует timesyncd. Сервис timesyncd подключается к тем же серверам времени и работает примерно таким же образом, но он легче ntpd и интегрирован с systemd.

Узнать состояние timesyncd позволяет команда timedatectl.

timedatectl
Local time: Wed 2017-04-26 17:20:07 UTC
Universal time: Wed 2017-04-26 17:20:07 UTC
RTC time: Wed 2017-04-26 17:20:07
Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

Команда выведет местное время, универсальное время (если вы используете часовой пояс UTC, оно будет совпадать с местным временем) и дополнительную информацию о состоянии сетевого времени. Строка «Network time on: yes» означает, что сервис timesyncd включен, а «NTP synchronized: yes» указывает, что время было успешно синхронизировано.

Если сервис timesyncd отключен, введите:

sudo timedatectl set-ntp on

После этого снова запросите состояние timesyncd. В строках Network time on и NTP synchronized должно быть значение yes.

Переход с timesyncd на ntpd

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

Прежде чем установить ntpd, отключите timesyncd:

sudo timedatectl set-ntp no

Убедитесь, что timesyncd отключился:

В выводе должна быть строка:

Network time on: no

Теперь можно установить ntp:

sudo apt-get install ntp

Демон ntpd запускается автоматически после установки. Запросите состояние ntpd:

sudo ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.ubuntu.pool.n .POOL. 16 p — 64 0 0.000 0.000 0.000
1.ubuntu.pool.n .POOL. 16 p — 64 0 0.000 0.000 0.000
2.ubuntu.pool.n .POOL. 16 p — 64 0 0.000 0.000 0.000
3.ubuntu.pool.n .POOL. 16 p — 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p — 64 0 0.000 0.000 0.000
-makaki.miuku.ne 210.23.25.77 2 u 45 64 3 248.007 -0.489 1.137
-69.10.161.7 144.111.222.81 3 u 43 64 3 90.551 4.316 0.550
+static-ip-85-25 130.149.17.21 2 u 42 64 3 80.044 -2.829 0.900
+zepto.mcl.gg 192.53.103.108 2 u 40 64 3 83.331 -0.385 0.391

ntpq – это инструмент запросов для ntpd. Флаг –p запрашивает данные о серверах NTP, к которым подключается ntpd. Ваш вывод будет отличаться, но в нём всё равно должен быть стандартный пул Ubuntu.

На установку соединения ntpd потребуется несколько минут.

Заключение

Теперь вы умеете управлять системным временем сервера Ubuntu.

Больше информации можно найти в документации NTP или на сайте проекта NTP Pool.

голоса
Рейтинг статьи
Читайте так же:
Как регулировать карбюратор мотоблок нева
Ссылка на основную публикацию
Adblock
detector