Monday, April 1, 2019

Настройка реализации NTP chrony.

Оригинал - портал RedHat.


КОНФИГУРАЦИЯ NTP С ПОМОЩЬЮ CHRONY.

В Линукс-системах протокол ntp реализован в виде службы, работающей в пространстве пользователя. Этот демон обновляет показания системных часов ядра. Системные часы могут брать время из разных источников. Обычно это TSC - Time Stamp Counter - регистр подсчета времени в ЦПУ. Он подсчитывает количество тактов со времени последнего сброса процессора. TSC очень быстрый, имеет высокое разрешение и работает непрерывно.

В репозиториях (обычно) есть выбор между ntpd и chronyd.

1.1 ОБЩИЕ СВЕДЕНИЯ О CHRONY.

Это реализация протокола NTP, позволяющая:

▪ синхронизировать системные часы с серверами ntp;
▪ синхронизировать системные часы с эталонными часами, например, с приемником GPS;
▪ синхронизировать системные часы с показаниями, введенными вручную;
▪ chrony можно использовать в качестве сервера времени для локальной сети.

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

Обычно точность синхронизации по сети интернет составляет несколько миллисекунд, в локальной сети - в пределах десятков микросекунд. Выставление временных меток на пакетах сетевой картой (hardware timestamping) или аппаратные эталонные часы (приёмник GPS) могут увеличить точность синхронизации между двумя машинами до уровня меньше микросекунды.

Chrony состоит из chronyd - демона пространства пользователя - и chronyc - консольной программы, используемой для мониторинга производительности демона и изменения различных параметров во время его работы.

1.2 РАЗНИЦА МЕЖДУ NTPD И CHRONYD.

* Хрони может успешно работать в условиях прерывающегося доступа к эталонным часам, а ntpd требуются регулярные запросы к часам для корректной работы.
* Хрони нормально работает в сетях, которые долго находятся в перегруженном состоянии.
* Обычно Хрони производит синхронизацию быстрее и точнее.
* Chronyd быстро адаптируется к внезапным скачкам частоты часов, возможным, например, при изменении температуры кварцевого тактового генератора. Ntpd требует больше времени для адаптации.
* Хрони по умолчанию настроен так, чтобы не изменять время после того, как часы были синхронизированы при старте системы, чтобы не повлиять на корректную работу других программ. Ntpd тоже можно сконфигурировать таким образом, но он при этом использует другие методы настройки часов, что имеет недостатки, включая снижение точности часов.
* Chronyd может изменять частоту часов Линукс-системы в более широком диапазоне, что позволяет ему работать даже на машинах со сломанными или нестабильными часами. Например, на виртуальных машинах.
* Chronyd меньше, потребляет меньше памяти и отправляет сигналы прерывания процессору только при необходимости, что способствует энергосбережению.


Что может chrony и не может ntpd:

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

* chronyd поддерживает определение погрешности часов реального времени, например, часов, которые следят за временем, когда компьютер выключен. Хрони может использовать эти данные при загрузке системы, чтобы выставить исправленное системное время. Эта возможность на данный момент доступна только в Линукс.

* chronyd поддерживает обработку hardware timestamping в Линукс, что позволяет добиться высочайшей точности синхронизации в локальных сетях


Что может  ntpd и не может chrony:

*  ntpd поддерживает все режимы работы протокола NTPv4, включая broadcast, multicast и manycast для клиента и сервера. Заметьте, что режимы  broadcast и multicast изначально, даже при наличии авторизации, уступают в безопасности и точности обычному режиму клиента и сервера. Поэтому их не следует использовать без крайней необходимости.
*  ntpd поддерживает протокол асимметричной аутентификации Autokey (где не надо предварительно распределять открытые ключи серверов). Этот протокол оказался уязвимым и, вероятно, будет заменён на NTS.
*  ntpd имеет драйверы для различных эталонных часов, а хрони использует другие программы, например gspd, для доступа к показаниям эталонных часов через SHM или SOCK.

1.3 ЧТО ВЫБРАТЬ: NTPD ИЛИ CHRONY?

Chrony, кроме систем, которые управляются или отслеживаются программами, не поддерживающими хрони, или аппаратные эталонные часы которых не совместимы с хрони. Например, системы, осуществляющие аутентификацию пакетов по протоколу Autokey. Но этот протокол признан ненадежным, поэтому имеет смысл использовать схемы с симметричными ключами, которые поддерживаются и ntpd, и chrony. При этом хрони поддерживает более сильные хэш-функции SHA256 и SHA512, а ntpd - только MD5 и SHA1.


2. СВЕДЕНИЯ О КОНФИГУРАЦИИ И РАБОТЕ CHRONY.

2.1 CHRONYD И CHRONYC

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

2.2 КОМАНДЫ КОНФИГУРАЦИИ

По умолчанию конфиг chronyd - /etc/chrony.conf. Параметр -f позволяет указать другой файл в качестве конфига. Полный список директив находится по ссылке: http://chrony.tuxfamily.org/manual.html#Configuration-file.

Ниже приведены некоторые команды конфигурации хрони:

* Комментарии 
начинаются со знаков #,%,;,!
* allow
можно указать хост, подсеть или сеть, с которых разрешены соединения с машиной, работающей в качестве сервера NTP. По умолчанию все соединения запрещены. Имеются в виду соединения от клиентов NTP с запросами.
Примеры:

 allow 192.0.2.0/24 - разрешить запросы из сети

 allow 2001:0db8:85a3::8a2e:0370:7334 - разрешить доступ по IPv6.

Чтобы позволить клиентский доступ, нужно открыть порт udp 123 на фаерволле:

 firewall-cmd --zone=public --add-port=123/udp - для red hat.

 firewall-cmd --permanent --zone=public --add-port=123/udp - открыть на постоянной основе.

* cmdallow
Аналогично директиве allow, но позволяет доступ не только клиентов NTP, но и возможность удаленно давать команды chronyc. Синтаксис аналогичен. Также существуют директивы cmddeny all и cmdallow all.


* dumpdir
Путь к каталогу, куда будет сохраняться история измерений времени между перезапусками демона (подразумевается, что системные часы не корректировались, когда он не был запущен). Если нужно учитывать такую корректировку (с помощью директивы dumponexit в конфиге или команды dump chronyc), каталог для хранения журнала задается командой dumpdir.

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

*hwtimestamp
Активация и обработка hardware timestamp. Подробнее - см. crony.conf(5) в мануалах.

*local

Это ключевое слово, с помощью которого с точки зрения клиентов, присылающих запросы, всё выглядит так, будто chronyd  синхронизируется с реальным временем, даже если у него в данный момент нет источника синхронизации. Обычно этот ключ используется на "мастер-компьютерах" в изолированных  сетях, где машины синхронизируются друг с другом, а на мастере время вводится вручную.

Пример: local stratum 10

Значение 10 означает, что до эталонных часов столько хопов, что время на данной машине ненадежно. Если компьютер когда-либо имел доступ к машине, которая в конечном счёте синхронизируется с эталонными часами, то значение stratum у него будет почти наверняка меньше 10. Таким образом, выставление значения 10 командой local не дает спутать локальное время данной машины с реальным временем, если к нему вдруг постучатся клиенты, имеющие связь с реальными серверами.

*log

В качестве параметров задаётся, какую информацию нужно заносить в логи. Список параметров:

- measurements 
Записывает необработанные измерения NTP и сопутствующую информацию в файл measurements.log.

- statistics
Записывать данные обработки регрессии в файл statistics.log.

-tracking
Записывает изменения в оценке диапазона системного отставания или опережения времени в файл tracking.log.

-rtc
Лог системных часов реального времени.

-refclocks
Записывает "сырые" и обработанные показания эталонных часов в файл refclocks.log.

-tempcomp
Записывает показания температурных датчиков и частоты компенсации в файл tempcomp.log.

Файлы записываются в каталог, указанный как logdir.

Пример:

log measurements statistics tracking

-logdir
Позволяет указать каталог, куда будут записываться файлы логов. Например:
logdir /var/log/chrony

-makestep
Обычно хрони заставляет систему постепенно корректировать погрешность времени, ускоряя или замедляя часы по необходимости. В некоторых случаях системные часы показывают настолько неточное время, что такой процесс корректировки будет длиться долго (время будет скорректировано через несколько минут после загрузки системы). Эта директива заставляет chronyd изменять системное время в случае, если разница между системным и эталонным временем больше порогового значения, но только если показания часов обновлялись со времени старта chronyd не более определённого количества раз(отрицательное количество означает отсутствие лимита). Это особенно полезно при использовании эталонных часов,так как директива initstepslew работает только с источниками NTP.

Пример: makestep 1000 10

Сдвиг системного времени, если разница с реальным больше 1000 секунд, но только для первых 10 обновлений со старта chronyd.

-maxchange
Устанавливает максимальную погрешность, которую может корректировать демон. Проверка происходит после определенного количества обновлений времени, так как сразу после запуска системы она может быть большая. Если погрешность больше определенного порога, хрони проигнорирует её заданное количество раз, после чего завершит работу (при отрицательном количестве раз работа демона не будет завершена), отправив сообщение в системный журнал.

пример: maxchange 1000 1 2

После первой коррекции времени, chronyd будет проверять погрешность каждый раз, обновляя время. Он проигнорирует, если погрешность 2 раза превысит 1000 секунд, после чего в следующий раз завершит работу.

-maxupdateskew
Один из методов, которым хрони определяет, насколько системные часы опережают или отстают от эталонных. Кроме того, он вычисляет оценку границ погрешности. Если диапазон погрешности слишком велик, значит измерения ещё не проводятся корректно, и оценка коэффициента увеличения или уменьшения показаний ненадёжна. Параметр maxupdateskew - это пороговое значение для определения надёжности оценки. По умолчанию он равен 1000 миллионных долей (от базового показателя) - ppm (parts per million).

Синтаксис: maxupdateskew skew-in-ppm

Типичные значения смещения в миллионных долях (skew-in-ppm) - 100 для сетей dial-up, 5-10 для компьютеров в LAN. Надо заметить, что это не единственный способ защиты от использования некорректно вычисленных значений. Chronyd всегда следит за оценкой коэффициента смещения и граничными значениями погрешности. Когда после очередного получения показаний источника времени генерируется новая оценка, основная оценка корректируется по взвешенному алгоритму. Поэтому если если основная оценка надёжна, а новая генерируется с большим разбросом граничных значений, то существующая оценка не заменяется на новую.

-minsources
Директива устанавливает минимальное количество источников, необходимое для работы алгоритма выбора источника до того, как локальные часы будут скорректированы.

Синтаксис: minsources number-of-sources

По умолчанию количество источников 1. Увеличение числа источников повысит надёжность, так как разные источники сверяют показания друг с другом.

-noclientlog
Директива не принимает аргументы и означает, что попытки доступа со стороны клиентов не должны записываться в лог. Обычно они регистрируются, что позволяет сообщать статистические данные, используя клиентские команды chronyc.

-reselectdist
Когда хрони выбирает источник для синхронизации из доступных ему, он предпочитает тот, до которого меньше расстояние синхронизации. Чтобы избежать слишком частого переключения между источниками с близкими значениями расстояния, к значениям для источников, не выбранных в данный момент, добавляется фиксированное число. Это число определяется параметром reselectdist. По умолчанию  100 микросекунд.

Синтаксис: reselectdist dist-in-seconds

-stratumweight
Обозначает, сколько будет добавлено к расстоянию синхронизации для каждого слоя, когда демон будет выбирать источник синхронизации.

Синтаксис: stratumweight dist-in-seconds

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

-rtcfile
Директива определяет имя файла, в котором chronyd будет хранить параметры, связанные с отслеживанием точности системных часов реального времени. 

Синтаксис: rtcfile /var/lib/chrony/rtc

Демон пишет данные в этот файл при завершении работы и при получении команды writertc от утилиты chronyc. Данные - это ошибки rtc в некоторую эпоху, в эпоху в секундах с 1.01.1970 и скорость, с которой rtc отстают или опережают время синхронизации. Поддерживаются не все часы реального времени, так как их код специфичен для системы. Если используется директива rtcfile, то часы rtc нельзя настраивать вручную, так как это повлияет на необходимость хрони измерять скорость дрифта часов реального времени, если они будут настраиваться через случайные интервалы времени.

-rtcsync
Директива раскомментирована в конфиге по умолчанию. Ядро получает информацию о том, что системные часы синхронизируются, и обновляет показания rtc каждые 11 минут.

2.3 ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ
Chronyc получает доступ к chronyd двумя способами:

▪ IPv4
▪ Сокеты межпроцессного взаимодействия Unix, доступные локально пользователям root и chrony.

По умолчанию используются сокеты. Путь по умолчанию: /var/run/chrony/chronyd.sock. Если соединение не удаётся установить, например, когда непривилегированный пользователь запускает chronyc, то chronyc пытается связаться с 127.0.0.1, а затем - с ::1.

По сети доступны только команды отслеживания, не влияющие на поведения демона хрони:
activity
manual list
rtcdata
smoothing
sources
sourcestats
tracking
waitsync

Список машин, с которых chronyd будет принимать эти команды, можно сконфигурировать с помощью директивы cmdallow в конфиге хрони или команды cmdallow утилиты chronyc. По умолчанию команды принимаются только с локалхоста (127.0.0.1 или ::1).

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

ПРОЦЕДУРА УДАЛЕННОГО ДОСТУПА CHRONYC К CHRONYD

1. Разрешите доступ с адресов IPv4 & IPv6, добавив в файл /etc/chrony.conf строку:
bindcmdaddress 0.0.0.0 
или
bindcmdaddress :

2. Разрешите команды с удаленного хоста, подсети или сети с помощью директивы cmdallow.

Пример: cmdallow 192.168.1.0/24

3. Откройте порт 323 в фаерволле:

firewall-cmd --zone=public --add-port=323/udp

или 

firewall-cmd --permanent --zone=public --add-port=323/udp - для постоянного открытия.

Заметьте, что директива allow даёт только доступ по протоколу NTP, тогда как cmdallow позволяет удаленно давать команды. Можно сделать эти изменения временными, используя локально запущенный chronyc. Чтобы изменения сохранялись после перезапуска демона, нужно отредактировать конфигурационный файл.


3. ИСПОЛЬЗОВАНИЕ CHRONY

3.1 УСТАНОВКА
В некоторых версиях RHEL 7 он стоит по умолчанию. Если нет, надо поставить из репозитория:

yum install chrony

Расположение по умолчанию для демона и утилиты командной строки: /usr/sbin/chronyd и /usr/bin/chronyc.


3.2 ПРОВЕРКА СТАТУСА CHRONYD
Для systemd введите следующую команду:

 $systemctl status chronyd

chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago

В остутствие sytemd можно, например, дать любую команду chronyc. Если демон не активен, он ответит  "Cannot talk to daemon".

3.3 ЗАПУСК CHRONYD

Для systemd введите от рута:

#systemctl start chronyd

Чтобы хрони запускался автоматически при старте системы: 

# systemctl enable chronyd

Если systemd вам не нужен, тогда нужно использовать для старта что-то типа 
/usr/local/sbin/chronyd -r -s

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

if [ -f /usr/local/sbin/chronyd -a -f /etc/chrony.conf ]; then
  /usr/local/sbin/chronyd -r -s
  echo "Start chronyd"
fi

Источник - https://chrony.tuxfamily.org/doc/2.1/manual.html, пример для системы Slackware.

* Если в Slackware 14.2 не работает скрипт /etc/rc.d/rc.chrony, то прописать в rc.loal строку: "chronyd -u chrony"

* Можно внести команду прямо в инициализационный скрипт для нужного вам ранлевела и т.п.

3.4 ОСТАНОВКА ДЕМОНА
Для systemd:

# systemctl stop chronyd

Чтобы демон не запускался автоматически:

# systemctl disable chronyd

3.5 ПРОВЕРКА, СИНХРОНИЗИРОВАН ЛИ CHRONYD

Используйте команды tracking, sources и sourcestats

3.5.1 ПРОВЕРКА, КАК ДЕМОН СЛЕДИТ ЗА ВРЕМЕНЕМ

$ chronyc tracking


Reference ID    : CB00710F (foo.example.net)
Stratum         : 3
Ref time (UTC)  : Fri Jan 27 09:49:17 2017
System time     :  0.000006523 seconds slow of NTP time
Last offset     : -0.000006747 seconds
RMS offset      : 0.000035822 seconds
Frequency       : 3.225 ppm slow
Residual freq   : 0.000 ppm
Skew            : 0.129 ppm
Root delay      : 0.013639022 seconds
Root dispersion : 0.001100737 seconds
Update interval : 64.2 seconds
Leap status     : Normal

Значение записей:

Reference ID - reference ID и имя (или IP-адрес) сервера, с которым синхронизирован демон в данный момент, если они доступны.  reference ID - это шестнадцатеричное число, чтобы избежать путаницы с адресами IPv4.

Stratum - слой показывает, сколько хопов до компьютера с эталонными часами. Это будет машина слоя 1, то есть в примере до него 2 хопа: какой-нибудь a.b.c является машиной 2-го слоя синхронизируется со слоем 1.

Ref time - это время utc, когда производилась последняя обработка показаний эталонного источника.

System time - обычно хрони никогда не сдвигает время системных часов, потому что любой скачок времени может иметь неблагоприятные последствия для прикладных программ. Вместо этого ошибки системных часов корректируются некоторым ускорением или замедлением системных часов, пока ошибка не будет устранена. После этого системные часы возвращаются к нормальной  скорости. Вследствие этого существует период времени, когда системные часы (опрашиваемые другими программами с помощью системного вызова gettimeofday() или командой шелла date) будут давать показания, несоответствующие оценке текущего времени, которую даёт chronyd (которую он сообщает клиентам NTP, если работает в режиме сервера). Значение в этой строке отображает описанную разницу.

Last offset - приблизительная погрешность системных часов со времени последнего обновления показаний.

RMS offset - долгосрочное среднее значение погрешности.

Frequency - это скорость, с которой системные часы отклонялись бы от эталонного времени, если бы хрони не корректировал их. Выражается в ppm - миллионных долях. Например, значение 1 ppm означает, что когда системные часы считают, что прошла 1 секунда, на самом деле прошла  1.000001 секунда реального времени.

Residual freq - "остаточная частота" выбранного в данный момент эталонного источника. Отражает разницу между  тем, какая должна быть частота по показаниям эталонного источника, и реальной частотой. Этот параметр не всегда равен 0, так как к частоте применяется процедура сглаживания. Каждый раз при получении показаний эталона вычисляется новое значение Residual freq, и оценочная точность этой разности сравнивается со значением следующего параметра - skew. Для новой частоты вычисляется средневзвешенное значение, при этом веса зависят от значений точности. Если показания эталона приходят регулярно, разница с течение времени будет сведена к нулю.

Skew - оценочная погрешность частоты.

Root delay - это суммарная задержка сетевого пути до машины слоя 1, с которой в конечном счёте синхронизируется компьютер, измеряется в наносекундах. В определённых чрезвычайных ситуациях задержка может принимать отрицательные значения. Такое может быть в симметричной одноранговой сети, где машины не отслеживают частоты друг друга,  и задержка чрезвычайно мала по сравнению со временем оборота на каждом компьютере.

Root dispersion - общая дисперсия, накопленная всеми узлами по пути до машины слоя 1. Дисперсия обусловлена разрешением системных часов, статистической вариацией измерений и т.д. Единица измерения - наносекунда.

Leap status - статус скачка. Может принимать значения Normal, Insert second, Delete second, Not synchronised.


3.5.2 ПРОВЕРКА ИСТОЧНИКОВ
Команда sources отображает информацию об источниках времени, к которым у chronyd есть доступ в данный момент. Если дать команду с аргументом -v (verbous), то в заголовке появятся дополнительные строки.

  210 Number of sources = 3
               MS Name/IP address         Stratum Poll Reach LastRx Last sample
               ===============================================================================
               #* GPS0                          0   4   377    11   -479ns[ -621ns] +/-  134ns
               ^? foo.example.net               2   6   377    23   -923us[ -924us] +/-   43ms
               ^+ bar.example.net               1   6   377    21  -2629us[-2619us] +/-   86ms

Значения полей:

М - режим сервера. ^ обозначает сервер, = - это пир, и # означает локальные эталонные часы.

S - состояние источника времени. * - источник, с к-рым демон синхронизирован в данный момент; + - приемлемые источники, объединённые с выбранным источником; "-" - приемлемые источники, исключенные алгоритмом объединения; ? - источники, с которыми была потеряна связь, или пакеты от них не проходят все проверки; также знак отображается в начале, пока не получено по крайней мере 3 выборки из источника.  х - часы, которые демон считает ложными (falseticker), т.к. их показания противоречат большинству остальных источников. ~ - время источника сильно колеблется.

Name/IP address - имя, айпишник или reference ID источника.

Stratum - слой, которому принадлежит источник по последним трём показаниям от него. Stratum 1 - это компьютер с локальными эталонными часами. Компьютер, синхронизирующийся с с машиной слоя 1 имеет stratum 2; с машиной слоя 2 - слой 3 и т.д.

Poll - частота опроса источника, это логарифм по основанию 2 от интервала в секундах. Таким образом, значение 6 означает, что показания источника снимаются каждые 64 секунды. В зависимости от условий, демон автоматически изменяет частоту опроса.

Reach - это число полученных пакетов в восьмеричной форме. Счетчик состоит из 8 бит, и его значение обновляется после каждого полученного или пропущенного пакета от источника. Значение 377 показывает, что последних 8 передач завершились получением корректного ответа.

LastRx - сколько прошло времени с момента получения последних показаний эталона. Обычно в секундах. Буквы m,h,d,y - это соответственно минуты, часы, дни и годы. Значение 10 лет означает, что от данного источника показания ещё не приходили.

Last sample - показывает расхождение между локальными часами и источником в момент последнего снятия показаний эталона. Число в квадратных скобках показывает реальное измеренное расхождение. После него может быть указание на единицы измерения: ns - наносекунды; us - микросекунды; ms - миллисекунды; s - секунды. Число слева от скобок - исходные показания, скорректированные с учетом поправок, примененных к локальным часам с того момента.  Число после знака "+/-" -  индикатор предела погрешности измерения. Положительное расхождение означает, что локальные часы опережают источник.

3.5.3 ПРОСМОТР СТАТИСТИКИ ИСТОЧНИКОВ
Команда sourcestats отображает информацию о скорости дрейфа и оценке смещения для каждого из проверяемых в данный момент демоном источников. Аргумент -v - подробность вывода.

~]$ chronyc sourcestats
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
===============================================================================
abc.def.ghi                11   5   46m     -0.001      0.045      1us    25us

Значения столбцов:

 Name/IP Address - имя или адрес сревера NTP (или пира) или reference ID эталонных часов, к которым относятся остальные поля.

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

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

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

 Frequency - оценочная частота расхождения с сервером, в ppm. В данном случае оценка отставания часов компьютера от сервера: 1*10^9.

 Freq Skew - оценочные границы погрешности частоты расхождения с сервером, ppm.

 Offset - оценочное смещение эталона.

 Std Dev - расчетное стандартное отклонение выборки. 

  3.6 РУЧНАЯ НАСТРОЙКА СИСТЕМНЫХ ЧАСОВ

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

# chronyc makestep

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

4. НАСТРОЙКА CHRONY В РАЗЛИЧНЫХ ОКРУЖЕНИЯХ

4.1 НАСТРОЙКА В ИЗОЛИРОВАННОЙ СЕТИ
В сетях, где вообще нет выхода в интернет, один компьютер выбирается в качестве главного сервера времени (мастер). Остальные машины запрашивают время у мастера или друг у друга. Drift file мастера нужно заполнить вручную средним значением скорости дрейфа системных часов. После перезагрузки мастера он будет запрашивать время у окружающих систем и установит своё системное время, вычислив среднее значение. После этого он возобновляет настройку на основании файла дрейфа. Drift file обновляется автоматически, если дать команду settime. 

Открыв текстовый редактор от рута, внесите в файл /etc/chrony.conf на системах, выбранных в качестве мастера, следующие изменения:

server master
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
log measurements statistics tracking
keyfile /etc/chrony.keys
commandkey 24
local stratum 10
initstepslew 20 master
allow 192.0.2.123

где 192.0.2.123 - адрес мастера, а master - имя хоста. Клиенты с данной конфигурацией будут проводить повторную синхронизацию мастера в случае его перезагрузки. 

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

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

Чтобы использовать несколько серверов с одинаковой конфигурацией, которые будут синхронизироваться друг с другом, и не сбивать с толку клиентов, которые опрашивают эти сервера, используйте параметр orphan директивы local. Каждый должен быть сконфигурирован для запросов к остальным серверам с использованием директивы local. Это гарантирует, что в качестве эталона будет использоваться только сервер с наименьшим reference ID, а другие серверы будут синхронизироваться с ним. Если этот сервер упадёт его место займёт следующий.

5. ИСПОЛЬЗОВАНИЕ CHRONYC ДЛЯ КОНТРОЛЯ ЗА CHRONYD.

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

# chronyc 

отобразится приглашение:

chronyc>

чтобы увидеть список доступных команд, наберите list (или help - у меня, например, list не работает).

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

chronyc command

Примечание: изменения, сделанные с помощью chronyc, не сохранятся после перезапуска демона. Для внесения постоянных изменений нужно модифицировать файл /etc/chrony.conf

6. ИСПОЛЬЗОВАНИЕ CHRONY С АППАРАТНЫМИ ВРЕМЕННЫМИ МЕТКАМИ.

6.1 ЧТО ТАКОЕ HARDWARE TIMESTAMPING.
Это функция, поддерживаемая некоторыми сетевыми картами (NIC): они выставляют точное время входящим и исходящим пакетам. Обычно временные метки ntp создаются ядром и демоном хрони, используя показания системных часов. Если есть возможность выставления аппаратных меток, сетевая карта использует свои собственные часы для генерации показаний времени в момент, когда пакет покидает физический или канальный уровень. При использовании совместно с NTP аппаратное выставление меток может значительно повысит точность синхронизации. Лучше всего, когда и клиенты, и серверы выставляют время аппаратно. В идеале может быть достигнута точность, превышающая одну микросекунду. 

Есть ещё один протокол синхронизации времени, который использует аппаратные метки - это PTP. В отличие от NTP, PTP полагается на показания сетевых коммутаторов и маршрутизаторов.

6.2 ОПРЕДЕЛЕНИЕ, ПОДДЕРЖИВАЕТСЯ ЛИ HARDWARE TIMESTAMPING.
Введите команду:

# ethtool -T ethX
Интерфейс можно использовать для генерации временных меток совместно с NTP, если в выводе будут строки:

SOF_TIMESTAMPING_TX_HARDWARE
SOF_TIMESTAMPING_TX_SOFTWARE
HWTSTAMP_FILTER_ALL

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

Timestamping parameters for eth0:
Capabilities:
        hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
        software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
        hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
        software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
        software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
        hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
        off                   (HWTSTAMP_TX_OFF)
        on                    (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
        none                  (HWTSTAMP_FILTER_NONE)
        all                   (HWTSTAMP_FILTER_ALL)
        ptpv1-l4-sync         (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
        ptpv1-l4-delay-req    (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
        ptpv2-l4-sync         (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
        ptpv2-l4-delay-req    (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
        ptpv2-l2-sync         (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
        ptpv2-l2-delay-req    (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
        ptpv2-event           (HWTSTAMP_FILTER_PTP_V2_EVENT)
        ptpv2-sync            (HWTSTAMP_FILTER_PTP_V2_SYNC)
        ptpv2-delay-req       (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)

6.3 АКТИВАЦИЯ HARDWARE TIMESTAMPING.
Используйте директиву hwtimestamp в файле /etc/chrony.conf. Директиве можно передать в качестве параметра как единичный интерфейс, так и шаблон "*", означающий активацию аппаратных меток на всех интерфейсах, которые их поддерживают. Используйте шаблон, если никакие другие приложения вроде ptp4l не используют аппаратные метки на данном интерфейсе.

Пример использования директивы hwtimestamp:

hwtimestamp eth0
hwtimestamp eth1
hwtimestamp * 


6.4 КОНФИГУРАЦИЯ ИНТЕРВАЛА МЕЖДУ ЗАПРОСАМИ КЛИЕНТОВ.
Интервал по умолчанию (64-1024 секунд) подходит для серверов в интернете. Для локальных серверов и использования аппаратных временных меток нужно указать более короткий интервал, чтобы минимизировать погрешность системных часов.

Следующая директива в файле /etc/chrony.conf задаёт для локального сервера NTP интервал между запросами 1 секнду:

server ntp.local minpoll 0 maxpoll 0

6.5 РЕЖИМ ЧЕРЕДОВАНИЯ.
Серверы NTP не являются аппаратными - это обычные компьютеры с запущенным на них софтом NTP, таким, как chrony, и временная метка присваивается отправленному пакету только после его отправления. Это не даёт серверу сохранять метки в тех пакетах, которым они соответствуют. Чтобы клиенты NTP могли получать метки, сгенерированные после отправления, сконфигурируйте их для использования в режиме чередования с помощью параметра xleave директивы server:

server ntp.local minpoll 0 maxpoll 0 xleave

6.6 НАСТРОЙКА СЕРВЕРА ДЛЯ РАБОТЫ С БОЛЬШИМ КОЛИЧЕСТВОМ КЛИЕНТОВ.
Конфигурация  по умолчанию позволяет максимум нескольким тысячам клиентов одновременно использовать режим чередования. Чтобы настроить сервер для большего количества клиентов, увеличьте значение директивы clientloglimit в конфигурационном файле. Эта директива указывает максимальный объем памяти, выделяемой для журналирования доступа клиентов к серверу.

clientloglimit 100000000

6.7 ПРОВЕРКА, РАБОТАЕТ ЛИ АППАРАТНОЕ ВЫСТАВЛЕНИЕ МЕТОК.
Чтобы убедиться, что функция успешно активирована на сетевой карте, проверьте системный журнал. Там должно быть сообщение от chronyd для каждой карты, на которой был активирован hardware timestamping. Пример:

chronyd[4081]: Enabled HW timestamping on eth0
chronyd[4081]: Enabled HW timestamping on eth1 

Если chronyd сконфигурирован для использования в качестве клиента или пира NTP, можно получать сведения о режимах присвоения временных меток отправленным и входящим пакетам, а также о режиме чередования для каждого источника времени NTP, используя команду ntpdata интерфейса chronyc:

# chronyc ntpdata

Remote address  : 203.0.113.15 (CB00710F)
Remote port     : 123
Local address   : 203.0.113.74 (CB00714A)
Leap status     : Normal
Version         : 4
Mode            : Server
Stratum         : 1
Poll interval   : 0 (1 seconds)
Precision       : -24 (0.000000060 seconds)
Root delay      : 0.000015 seconds
Root dispersion : 0.000015 seconds
Reference ID    : 47505300 (GPS)
Reference time  : Wed May 03 13:47:45 2017
Offset          : -0.000000134 seconds
Peer delay      : 0.000005396 seconds
Peer dispersion : 0.000002329 seconds
Response time   : 0.000152073 seconds
Jitter asymmetry: +0.00
NTP tests       : 111 111 1111
Interleaved     : Yes
Authenticated   : No
TX timestamping : Hardware
RX timestamping : Hardware
Total TX        : 27
Total RX        : 27
Total valid RX  : 27

Проверка стабильности поступления показаний эталона:

# chronyc sourcestats
Если работает аппаратное присвоение меток, при нормальной нагруженности сети стабильность должна быть в пределах десятых или сотых долей наносекунды. Этот показатель отображен в столбце Std Dev вывода команды sourcestats:

210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
ntp.local                  12   7    11     +0.000      0.019     +0ns    49ns

6.8 НАСТРОЙКА МОСТА PTP-NTP.
Если в сети есть грандмастер, работающий с высокоточным протоколом PTP (Precision Time Protocol), но нет коммутаторов или роутеров с поддержкой PTP, то можно настроить компьютер, чтобы он выступал в роли слейва PTP и сервера NTP слоя 1. На такой машине должно быть 2 или более сетевых карт, а также он должен находиться территориально близко к грандмастеру или быть связанным с ним напрямую. Это гарантирует высокую точность синхронизации в сети.

Настройте программы  ptp4l and phc2sys из пакета linuxptp, чтобы использовать одну сетевую карту для синхронизации часов по протоколу PTP. Сконфигурируйте  chronyd для настройки системного времени на второй сетевой карте следующим образом:

bindaddress 203.0.113.74
hwtimestamp eth1
local stratum 1 

No comments:

Post a Comment