Перед настройкой NTP рекомендуется установить текущую системную дату на значение, максимально приближенное к реальному времени. Для этого можно воспользоваться утилитой для ручной синхронизации времени – ntpdate.

sudo ntpdate 172.16.0.1

Команда date без параметров выводит текущее системное время.

Установка и настройка NTP

  1. Установка NTP происходит при первичной установке пакета ecss-node, в ходе которого будет задано несколько вопросов:
    • Спрашивается, хотите ли включить tos orphan режим? - режим для кластера, сам регулирует кто с кем синхронизируется (да/нет).
    • Точность времени кластера по Startum
    • Спрашиваются внешние сервера - типа ntp.ubuntu.com. Они указываются для нод, которые должны регулировать время и синхронизировать с внешним источником (указываются адреса через пробел).
    • Предлагается использовать настройки синхронизации с локальных серверов.
    • Спрашиваются локальные хосты, с которыми должна происходить синхронизация (указываются адреса через пробел).
    • Указываются сети, которые могут иметь доступ до ноды, чтобы другие ноды могли синхронизироваться (указываются сети вида адрес_сети|маска_сети через пробел).
    • Спрашивается какой точность по Startum выставить серверу ntp на данной машине.
  2. Ручная настройка сервиса

    В случае если требуется переконфигурировать текущие настройки NTP, то следует отредактировать файл /etc/ecss/ecss-ntp.conf.

    Для этого необходимо привести файл /etc/ecss/ecss-ntp.conf к следующему виду:

    Пример 1. В примере используется схема с резервированием. Система ECSS-10 развернута на двух серверах, которые синхронизируются между собой и NTP-сервером.

    Сервер 1:

    # Файл, который используется для хранения смещения частоты системных часов:
    driftfile /var/lib/ntp/ntp.drift
    
    # Файл логов (указывается при необходимости):
    logfile /var/log/ntp
    
    # Статистика синхронизации времени:
    statsdir /var/log/ntpstats/
    
    # Разрешает записывать статистику:
    # loopstats - статистика для петли (loopback)
    # peerstats - статистика пиров
    # clockstats - статистика драйвера времени
    statistics loopstats peerstats clockstats
    filegen loopstats file loopstats type day enable
    filegen peerstats file peerstats type day enable
    filegen clockstats file clockstats type day enable
    
    # Активируем Orphan mode - режим синхронизации времени для кластеров, устанавливаем для него стратум 5
    tos orphan 5
    
    # Описываем peer между серверами кластера - пир к соседнему серверу
    peer 192.168.1.2 minpoll 4 maxpoll 8
    
    # Интернет-сервер синхронизации
    # server xx.xx.xx.xx iburst
    # restrict xx.xx.xx.xx
    # INTERNET_SERVERS
    server ntp.ubuntu.com iburst ### INSTALLED AUTOMAT BY ECSS10
    restrict ntp.ubuntu.com ### INSTALLED AUTOMAT BY ECSS10
    
    # ограничение доступа к нашему серверу:
    # по умолчанию игнорируем все
    restrict -4 default kod notrap nomodify nopeer noquery limited
    restrict -6 default kod notrap nomodify nopeer noquery limited
    restrict source notrap nomodify noquery
    
    # Локальный доступ
    # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    # NETWORK
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap ### INSTALLED AUTOMAT BY ECSS10
    
    # Для локальных пользователей  ECSS-10 ограничения не устанавливаются:
    restrict 127.0.0.1
    restrict ::1
    
    #Для базового NTP-сервера разрешено все, кроме trap'ов и запросов:
    restrict ntp.ubuntu.com notrap noquery
    
    #Для второго NTP-сервера запрещены trap'ы:
    restrict 192.168.1.2 notrap

    Сервер 2:

    # Файл, который используется для хранения смещения частоты системных часов:
    driftfile /var/lib/ntp/ntp.drift
    
    # Файл логов (указывается при необходимости):
    logfile /var/log/ntp
    
    # Статистика синхронизации времени:
    statsdir /var/log/ntpstats/
    
    # Разрешает записывать статистику:
    # loopstats - статистика для петли (loopback)
    # peerstats - статистика пиров
    # clockstats - статистика драйвера времени
    statistics loopstats peerstats clockstats
    filegen loopstats file loopstats type day enable
    filegen peerstats file peerstats type day enable
    filegen clockstats file clockstats type day enable
    
    # Активируем Orphan mode - режим синхронизации времени для кластеров, устанавливаем для него стратум 5
    tos orphan 5
    
    # Описываем peer между серверами кластера - пир к соседнему серверу
    peer 192.168.1.1 minpoll 4 maxpoll 8
    
    # Интернет-сервер синхронизации
    # server xx.xx.xx.xx iburst
    # restrict xx.xx.xx.xx
    # INTERNET_SERVERS
    server ntp.ubuntu.com iburst ### INSTALLED AUTOMAT BY ECSS10
    restrict ntp.ubuntu.com ### INSTALLED AUTOMAT BY ECSS10
    
    # ограничение доступа к нашему серверу:
    # по умолчанию игнорируем все
    restrict -4 default kod notrap nomodify nopeer noquery limited
    restrict -6 default kod notrap nomodify nopeer noquery limited
    restrict source notrap nomodify noquery
    
    # Локальный доступ
    # restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    # NETWORK
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap ### INSTALLED AUTOMAT BY ECSS10
    
    # Для локальных пользователей  ECSS-10 ограничения не устанавливаются:
    restrict 127.0.0.1
    restrict ::1
    
    #Для базового NTP-сервера разрешено все, кроме trap'ов и запросов:
    restrict ntp.ubuntu.com notrap noquery
    
    #Для второго NTP-сервера запрещены trap'ы:
    restrict 192.168.1.1 notrap

    Возможные ситуации:

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

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

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

    Пример 2. В примере используется схема без резервирования. Orphan mode не используется.

    # Файл, который используется для хранения смещения частоты системных часов:
    driftfile /var/lib/ntp/ntp.drift
    
    # Файл логов (указывается при необходимости):
    logfile /var/log/ntp
    
    # Статистика синхронизации времени:
    statsdir /var/log/ntpstats/
    
    # Разрешает записывать статистику:
    # loopstats - статистика для петли (loopback)
    # peerstats - статистика пиров
    # clockstats - статистика драйвера времени
    statistics loopstats peerstats clockstats
    filegen loopstats file loopstats type day enable
    filegen peerstats file peerstats type day enable
    filegen clockstats file clockstats type day enable
    
    # Сервера локальной сети
    # peer ecssn
    # LOCAL_SERVERS
    peer 127.0.0.1 ### INSTALLED AUTOMAT BY ECSS10
    
    # интернет-сервера
    # server xx.xx.xx.xx iburst
    # restrict xx.xx.xx.xx
    # INTERNET_SERVERS
    server ntp.ubuntu.com iburst ### INSTALLED AUTOMAT BY ECSS10
    restrict ntp.ubuntu.com ### INSTALLED AUTOMAT BY ECSS10
    
    # ограничение доступа к нашему серверу:
    # по умолчанию игнорируем все
    restrict -4 default kod notrap nomodify nopeer noquery limited
    restrict -6 default kod notrap nomodify nopeer noquery limited
    restrict source notrap nomodify noquery
    
    # локалхост без параметров - значит разрешено все. Параметры идут только на запреты.
    restrict 127.0.0.1
    restrict ::1
    
    # Локальный доступ
    # restrict 192.168.23.0 mask 255.255.255.0 nomodify notrap
    # NETWORK
    restrict 192.168.18.0 mask 255.255.255.0 nomodify notrap ### INSTALLED AUTOMAT BY ECSS10
    
    # Локальный сервер позволяет поддерживать собственное время
    server  127.0.0.1
    # fudge   127.0.0.1 stratum 5
    # LOCAL_STARTUM
    fudge 127.0.0.1 stratum 5 ### INSTALLED AUTOMAT BY ECSS10
  3. Для применения обновленной конфигурации нужно перезапустить сервис NTP:

    sudo systemctl restart ntp.service
  4. Для просмотра информации о состоянии синхронизации используется команда ntpq –p. Если использовать дополнительный ключ –n, вместо имени сервера будет указан IP-адрес:

    Пример 1. Схема с резервированием.

    alpha@ssw2:~$ ntpq -p -n
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     10.100.100.133  172.16.0.1       5 u  264 1024  377    0.289   -4.324   1.606
    *172.16.0.1      193.125.143.173  3 u  584 1024  377    0.323   -3.448   0.594

    Пример 2. Схема без резервирования.

    ssw@ecss1:~$ ntpq -p -n
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    *172.16.0.1      93.185.187.89    3 u  385 1024  377    0.145    0.636   0.192

    Описание параметров:

    • remote – имя удаленного NTP-сервера;
    • refid – IP-адрес сервера, с которым производит синхронизацию удаленный сервер NTP;
    • st – stratum (уровень), число от 1 до 16, указывающее точность сервера;
    • t - тип удаленного сервера:
      • u - unicast,
      • l - local,
      • m - multicast,
      • b - broadcst;
    • when - интервал времени (в секундах), прошедший с момента получения последнего пакета от данного сервера;
    • poll – интервал между опросами (в секундах), значение варьируется;
    • reach – состояние доступности сервера, восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Если последние 8 попыток синхронизации с удаленным сервером были успешны, то параметр принимает значение 377;
    • delay – вычисленная задержка ответов от сервера (RTT) в миллисекундах;
    • offset – разница между временем локального и удаленного серверов;
    • jitter– джиттер, мера статистических отклонений от значения смещения (поле offset) по нескольким успешным параметрам запрос-ответ.

    Символ (*) возле IP-адреса сервера указывает на то, что сервер является активным и система синхронизирована с данным сервером.

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