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

Обновлено: 04.07.2024

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

Платформа Azure основана на инфраструктуре, работающей под управлением Windows Server 2016. В Windows Server 2016 реализованы улучшенные алгоритмы коррекции времени и синхронизации локальных часов с временем в формате UTC. Функция "Точное время" в Windows Server 2016 значительно улучшила работу службы VMICTimeSync, которая регулирует точность времени в виртуальных машинах и на сервере. К числу улучшений относится более точное исходное время при запуске или восстановлении виртуальной машины, а также коррекция задержки при прерывании.

Краткий обзор службы времени Windows см. в этом видео.

Дополнительные сведения см. в статье Точное время в Windows Server 2016.

Обзор

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

Узлы Azure синхронизированы с внутренними серверами времени Майкрософт, которые получают время от принадлежащих Майкрософт устройств Stratum 1 с антеннами GPS. Виртуальные машины Azure могут получать точное время от узла (время узла) непосредственно с сервера времени или использовать эти способы в сочетании.

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

Взаимодействие виртуальной машины с узлом также может влиять на показания часов. Во время обслуживания с сохранением памяти виртуальные машины приостанавливаются на срок до 30 секунд. Например, до начала обслуживания часы виртуальной машины показывают 10:00:00, и приостановка длится 28 секунд. Когда виртуальная машина возобновляет работу, ее часы по-прежнему показывают 10:00:00, то есть отстают на 28 секунд. Чтобы скорректировать это отклонение, служба VMICTimeSync отслеживает происходящее в узле и обновляет часы истинного времени в виртуальных машинах Linux.

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

  • Проверка подлинности будет завершаться сбоем. Протоколы безопасности, такие как Kerberos, или технологии, зависящие от сертификатов, требуют согласования времени в системах.
  • Очень трудно понять, что случилось в системе, если журналы (или другие данные) рассогласованы по времени. Одно и то же событие будет представляться как произошедшее в разное время, что усложняет корреляцию.
  • Если часы идут неверно, могут происходить ошибки при выставлении счетов.

Варианты настройки

Для синхронизации времени необходимо, чтобы на виртуальной машине Linux была запущена служба синхронизации времени, а также источник точных данных о времени, по которым выполняется синхронизация. Обычно в качестве службы синхронизации времени используется ntpd или chronyd, хотя существуют и другие общедоступные службы синхронизации времени, которые также можно использовать. В качестве источника данных о точном времени можно использовать узел Azure или внешнюю службу времени, доступ к которой осуществляется через общедоступный Интернет. Сама по себе служба VMICTimeSync не обеспечивает непрерывную синхронизацию времени между узлом Azure и виртуальной машиной Linux, а только после приостановки обслуживания узла, как описано выше.

Традиционно большинство образов Azure Marketplace с Linux настраиваются одним из двух способов:

Чтобы проверить правильность синхронизации ntpd, выполните команду ntpq -p .

С начала 2021 года в новейшие образы Azure Marketplace с Linux вносятся изменения с целью использования chronyd в качестве службы синхронизации времени, а chronyd настроен на синхронизацию с узлом Azure, а не внешним источником времени NTP. Время узла Azure обычно является лучшим источником времени для синхронизации, так как он очень точно и надежно работает и доступен без переменных сетевых задержек, характерных для использования внешнего источника времени NTP через общедоступный Интернет.

VMICTimeSync используется параллельно и выполняет две функции:

  • Немедленное обновление часов истинного времени виртуальной машины Linux после события обслуживания узла
  • Создание экземпляра источника истинного времени для аппаратного обеспечения по протоколу точного времени (PTP) IEEE 1588 в качестве устройства /dev/ptp, которое передает точное истинное время с узла Azure. Можно настроить синхронизацию chronyd с этим источником истинного времени (в новейших образах Linux эта конфигурация установлена по умолчанию). Дистрибутивы Linux с ядром версии 4.11 или новее (или версией 3.10.0-693 или новее для RHEL/CentOS 7) поддерживают устройство /dev/ptp. Для ядер предыдущих версий, которые не поддерживают /dev/ptp для передачи истинного времени с узла Azure, доступна только синхронизация с внешним источником истинного времени.

Разумеется, конфигурацию по умолчанию можно изменить. Образ предыдущих версий, настроенный на использование ntpd и внешнего источника времени, можно настроить на использование chronyd и устройства /dev/ptp для передачи времени с узла Azure. Аналогично, образ, использующий время узла Azure через устройство /dev/ptp, можно настроить для использования внешнего источника времени NTP, если этого требуют приложения или рабочая нагрузка.

Средства и ресурсы

Есть ряд основных команд, позволяющих проверить конфигурацию синхронизации времени. Подробные сведения об оптимальных способах настройки синхронизации времени для определенного дистрибутива Linux можно найти в документации к нему.

Службы интеграции

Проверьте, загружена ли служба интеграции (hv_utils).

Должно отображаться примерно следующее:

Проверка источника времени PTP

В более новых версиях Linux в рамках поставщика VMICTimeSync доступен источник времени PTP, соответствующий узлу Azure. В более ранних версиях Red Hat Enterprise Linux или CentOS 7.x можно скачать службы интеграции Linux и использовать их для установки обновленного драйвера. Когда источник времени PTP доступен, устройство Linux отображается как /dev/ptp x.

Проверьте доступные источники времени PTP.

В этом примере возвращается значение ptp0. Мы используем его для проверки имени часов. Чтобы проверить устройство, определите имя часов.

Должно быть получено значение hyperv , означающее узел Azure.

В виртуальных машинах Linux с включенной функцией ускорения сети в списке может отображаться несколько устройств PTP, так как драйвер Mellanox mlx5 также создает устройство /dev/ptp. Поскольку порядок инициализации может отличаться при каждом запуске Linux, устройством PTP, соответствующим узлу Azure, может быть /dev/ptp0 или /dev/ptp1, что усложняет настройку chronyd с корректным источником истинного времени. Для решения этой проблемы в новых версиях образов Linux имеется правило udev, которое создает символьную ссылку /dev/ptp_hyperv к той записи /dev/ptp, которая соответствует узлу Azure. Необходимо настроить использование этой символьной ссылки в chrony вместо /dev/ptp0 или/dev/ptp1.

chrony

В Ubuntu версии 19.10 и выше, Red Hat Enterprise Linux и CentOS 8.x для средства chrony настроено использование источника времени PTP. В старых выпусках Linux вместо chrony используется управляющая программа NTP (ntpd), которая не поддерживает источники PTP. Чтобы использовать PTP в этих выпусках, необходимо вручную установить и настроить chrony (в chrony.conf) с помощью следующей инструкции:

Если доступен/Дев/ptp_hyperv символьную ссылку, используйте его вместо/dev/ptp0, чтобы избежать путаницы с устройством/Дев/ПТП, созданным драйвером Mellanox mlx5.

Сведения о Стратум не передаются автоматически с узла Azure в гостевой компьютер Linux. В приведенной выше строке конфигурации указывается, что источник времени узла Azure должен рассматриваться как Стратум 2, что, в свою очередь, приводит к тому, что гостевой компьютер Linux сообщает себя как Стратум 3. Вы можете изменить параметр Стратум в строке конфигурации, если хотите, чтобы гостевой компьютер Linux мог сообщить о себе по-другому.

В нашем примере chrony будет обновлять время, если смещение превысит 1 секунду. Чтобы применить изменения, перезапустите службу chronyd:

Дополнительные сведения об NTP в Ubuntu см. в статье, посвященной синхронизации времени.

Дополнительные сведения об NTP в Red Hat см. в статье, посвященной настройке NTP.

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

systemd

В SUSE и Ubuntu версии 19.10 и ниже синхронизация времени настраивается с помощью systemd. Дополнительные сведения об Ubuntu см. в статье, посвященной синхронизации времени. Дополнительные сведения о SUSE см. в разделе 4.5.8 статьи с заметками о выпуске SUSE Linux Enterprise Server 12 с пакетом обновления 3 (SP3).


Возможно, вы слышали это слово много раз, а также, возможно, работали с ним.

Тем не менее, я расскажу вам ясно в этой статье о настройке NTP-сервера и NTP-клиента

О настройке Chrony NTP Client мы узнаем позже.

Что такое NTP-сервер?

NTP означает сетевой протокол времени.

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

Он будет сохранять одинаковое время (точное время) для всех систем, которые подключены к NTP-серверу через NTP или клиент Chrony.

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

Он использует протокол пользовательских дейтаграмм (UDP) на порту номер 123 для отметок времени отправки и получения.

Это клиент / серверное приложение.

Он отправляет и получает временные метки с использованием протокола пользовательских дейтаграмм (UDP) на порту 123.

Что такое NTP-клиент?

NTP-клиент синхронизирует свои часы с сетевым сервером времени.

Что такое Chrony ?

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

Зачем нам нужен NTP сервер?

Чтобы все серверы в вашей организации были синхронизированы с точным временем выполнения заданий, основанных на времени.

Чтобы прояснить это, я расскажу вам сценарий.

Скажем, например, у нас есть два сервера (Server1 и Server2).

Server1 обычно выполняет пакетные задания в 10:55, а затем Server2 необходимо выполнить другое задание в 11:00 на основании отчета о завершении задания Server1.

Если обе системы используют в разное время (если одна система опережает другие, другие отстают от этой конкретной), мы не сможем это сделать.

Для этого нам нужно настроить NTP.

Надеюсь, это убрало ваши сомнения по поводу необходимости NTP.

В этой статье мы будем использовать следующую настройку, чтобы проверить работу NTP

СТОРОНА NTP-СЕРВЕРА: Как установить NTP-сервер на Linux?

Не существует разных пакетов для NTP-сервера и NTP-клиента, так как это модель клиент / сервер.

Пакет NTP доступен в официальном репозитории дистрибутива, поэтому используйте его для установки.

Для системы Fedora используйте DNF для установки ntp.

Для систем Debian / Ubuntu используйте команду APT-GET или APT для установки ntp.

Для систем на основе Arch Linux используйте Pacman для установки ntp.

Для систем RHEL / CentOS используйте команду YUM для установки ntp.

Для системы openSUSE Leap используйте Zypper для установки ntp.

Как настроить NTP-сервер на Linux?

После установки пакета NTP убедитесь, что вы раскомментировали следующую конфигурацию в файле /etc/ntp.conf на стороне сервера.

Мы разрешили только клиентам подсети 192.168.1.0/24 получать доступ к NTP-серверу.

Поскольку брандмауэр по умолчанию включен в дистрибутивах на основе RHEL 7, разрешите использование сервера / службы ntp.

Для системы на основе Debian нам нужно запустить ntp вместо ntpd.

Для systemctl систем

СТОРОНА КЛИЕНТА NTP: Как установить клиент NTP в Linux?

Как я уже упоминал ранее в этой статье.

Не существует специального пакета для NTP-сервера и клиента. Итак, установите этот же пакет на клиенте.

Для системы Fedora используйте DNF для установки ntp.

Для систем Debian / Ubuntu используйте команду APT-GET или APT для установки ntp.

Для систем на основе Arch Linux используйте Pacman для установки ntp.

Для систем RHEL / CentOS используйте команду YUM для установки ntp.

Для системы openSUSE Leap используйте Zypper для установки ntp.

Для системы на основе Debian нам нужно запустить ntp вместо ntpd.

Для systemctl систем.

Для системы на основе Debian нам нужно запустить ntp вместо ntpd.

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

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

Выполните следующую команду, чтобы получить текущий статус ntpd.

Наконец, запустите команду date

Если вы наблюдаете значительное смещение по времени на выводе NTP, выполните следующую команду, чтобы синхронизировать часы вручную с NTP-сервера.

Оригинал: How to Synchronize Time with NTP in Linux
Автор: Matei Cezar
Дата публикации: 20 апреля 2018 года
Перевод: А. Кривошей
Дата перевода: декабрь 2018 г.

Network Time Protocol (NTP) - это протокол, используемый для автоматической синхронизации системных часов компьютера по сети. Машина может выставлять системные часы по Coordinated Universal Time (UTC), а не по местному времени.

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

В большинстве систем Linux команда ntpdate не устанавливается по умолчанию. Чтобы установить ее, выполните приведенную ниже команду.

Пример команды ntpdate:

Проверка времени и даты в Linux

Чтобы просто запросить время сервера и не устанавливать часы, используя непривилегированный порт для отправки пакетов, чтобы обойти брандмауэры, выполните команду ntpdate со следующими флагами:

Отправка запроса NTP-серверу

Всегда старайтесь запрашивать и синхронизировать время с ближайшими NTP-серверами, доступными для вашей зоны. Список пулов серверов NTP можно найти по следующему адресу:

В новых дистрибутивах Linux, которые используют Systemd, вы также можете синхронизировать время через файл timesyncd.conf. Просто откройте файл для редактирования.

И добавьте или раскомментируйте следующие строки после оператора [Time], как показано ниже:

Синхронизация времени с NTP-сервером

После редактирования файла введите команду timedatectl, чтобы активировать сборку клиента NTP в systemd.

Linux синхронизация времени NTP

Часы в компьютере далеко не идеальны. Через несколько дней, недель или месяцев они перестают отображать правильное время. Они могут показывать «10:30», тогда как на самом деле «10:33». На старых компьютерах было обычной практикой периодически переустанавливать часы компьютера вручную. Но после того, как интернет-соединения стали повсеместными, современные операционные системы начали автоматически настраивать часы с помощью NTP-серверов.

В статье я покажу, как синхронизировать время в Linux в дистрибутивах Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaro, CentOS, Elementary ОС, Zorin OS и т.д.

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

Как включить синхронизацию времени в Linux

К счастью, большинство Linux-дистрибутивов по умолчанию синхронизируют время. Если вы не замечали, что часы вашего компьютера расходятся с часами телефона, тогда наверняка ваш дистрибутив использует NTP-клиент / демон.

Синхронизировать время в Linux с systemd

В большинстве дистрибутивов Linux используется systemd, а вместе с ним и демон systemd-timesyncd. Это означает, что у вас уже есть NTP-клиент, предварительно установленный в Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaro и других. На этих дистрибутивах (и других основанных на них, например, Elementary ОС, Zorin OS) чтобы проверить, включена ли синхронизация NTP запустите команду:

Ntp Linux Проверка статуса Ntp на ОС Systemd

Если вы видите Network time on: no , выполните следующую команду, чтобы включить синхронизацию времени NTP.

Это все, что вам нужно сделать в этих дистрибутивах.

Синхронизировать время в Linux без systemd

Для примера возьмем MX Linux. Запуск команды timedatectl показывает, что сетевое время включено, но systemd-timesyncd не используется. Как же синхронизировать время в таких дистрибутивах без systemd?

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

В MX Linux вы увидите результат, подобный тому, что вы видите на следующем снимке экрана.

Синхронизация времени Linux проверка Ntp Client

Это означает, что время не синхронизируется с высокой точностью (например, миллисекунды или микросекунды), но оно достаточно точно для большинства.

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

Если по какой-то причине вы хотите установить ntp или ntpdate в операционных системах с systemd, сначала отключите ntp-клиент systemd.

Конечно, приведенная выше команда не нужна в несистемных дистрибутивах.

Установить клиент ntpdate

Это подходит для домашних компьютеров, ноутбуков и других устройств, которые не постоянно подключены к Интернету.

На Debian, Ubuntu, Linux Mint, Zorin и других дистрибутивах, основанных на них, запустите:

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

В Fedora ntpdate устарела, поэтому рекомендуется вместо этого использовать демон ntpd (см. Следующую главу). То же самое рекомендуется для всех других дистрибутивов по двум причинам:

  • Иногда они не включают ntpdate в отдельный пакет, а связывают его с ntpd из следующего раздела.
  • Они не автоматизируют запуск ntpdate автоматически при каждом сетевом подключении. Вы должны вставить ntpdate самостоятельно в скрипт, который автоматически запускается после подключения к сети.

В этом случае имеет смысл установить ntpd, как указано в следующей главе.

Установить ntpd Daemon

В Debian, Ubuntu, Zorin, Mint и других дистрибутивах, основанных на Debian или Ubuntu, запустите:

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

Читайте также: