Skip to main content
Skip to content

Смещение часов с неуправляемых NTP-серверов

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

Симптомы

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

  • Пользователи не могут выполнять вход или сеансы завершаются раньше, чем ожидалось.
  • GitHub Connect не удается подключиться, или страница лицензии возвращает ошибку сервера.
  • GitHub Actions задания не запускаются или маркеры отклоняются как недопустимые.
  • /var/log/github/exceptions.log содержит ошибки, связанные с утверждением срока действия маркера, слишком далеко в будущем, например 'Expiration time' claim ('exp') is too far in the future.
  • Метки времени в веб-интерфейсе, в журналах или фиксациях не соответствуют ожидаемому времени.

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

Причины

GitHub Enterprise Server позволяет синхронизировать часы с серверами протокола NTP через порт UDP 123. Он должен достичь по крайней мере одного из них, непрерывно.

Настроенный сервер перестает быть доступен по обычным причинам.

  • Брандмауэр или группа безопасности блокирует исходящий UDP-порт 123, который легко пропустить, так как остальная часть экземпляра работает.
  • Внутренний сервер времени удаляется или переименовывается, а экземпляр по-прежнему указывает на старый адрес.
  • Имя узла больше не разрешается.
  • Настроен только один сервер, поэтому ничего не нужно возвращать, когда он исчезает.

Если настроенный сервер не может быть достигнут, хрония продолжает работать с локальными системными часами без внешней коррекции, сообщая резервный страт 10, который GitHub Enterprise Server настраивает. Это не аппаратные часы, которые являются отдельным устройством, управляемым вне хронологии.

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

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

Подтверждение проблемы

  1. SSH в административную оболочку. Дополнительные сведения см. в разделе Доступ к административной оболочке (SSH).

  2. Вывод списка источников времени и их состояния.

    sudo chronyc sources -v
    

    Чтение столбца MS слева от каждого источника. Означает ? , что хронология не использует этот источник. Само по себе не является доказательством сетевой проблемы, так как тот же маркер отображается для сервера, который сам несинхронизирован, и для источника, который еще не предоставил достаточно измерений.

    То, что идентифицирует неустранимый источник, является вспомогательным доказательством в той же строке. В выходных данных ниже, это означает, Reach что ни один из последних опросов не получил ответ, и LastRx это -означает, что выборка никогда не прибыла.0 Ни один сервер никогда не ответил.

    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^? ntp1.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp2.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    

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

  3. Проверьте, с каким экземпляром фактически синхронизирован.

    sudo chronyc tracking
    

    Идентификатор ссылки с пустым именем в квадратных скобках вместе со стратом 10, означает, что экземпляр отказался от своих настроенных серверов и использует собственные часы.

    Reference ID    : 7F7F0101 ()
    Stratum         : 10
    System time     : 0.000000000 seconds fast of NTP time
    

    Стратум подсчитывает количество шагов экземпляра из эталонных часов, а экземпляр всегда сообщает один из следующих серверов. Конкретное значение 10 : это резервная GitHub Enterprise Server настройка для того, когда источник недоступен, поэтому он отображается вместе с неназванным идентификатором ссылки является сигналом.

    Здоровый экземпляр называет сервер, который он следует, и сообщает стратум выше этого сервера.

    Reference ID    : D9723B03 (ntp1.example.com)
    Stratum         : 3
    System time     : 0.000079420 seconds fast of NTP time
    

System time измеряется на серверах, после чего экземпляр выполняется следующим образом, поэтому, когда он выполняет собственные часы, значение не имеет смысла. Он считывает почти нулю независимо от того, насколько далеко часы дрейфовали.

  1. Измеряйте смещение для себя, сравнивая часы экземпляра с источником, которым вы доверяете.

    date -u
    

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

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

    sudo chronyc sourcestats -v
    

Устранение проблемы

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

  1. Проверьте, на каких серверах настроен экземпляр, в разделе "Время" консоли управления. Дополнительные сведения см. в разделе Настройка синхронизации времени.

  2. Убедитесь, что экземпляр может связаться с ними. Исходящий порт UDP 123 должен быть открыт для каждого сервера в каждой группе брандмауэра и безопасности между экземпляром и сервером. Дополнительные сведения см. в разделе Сетевые порты.

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

  4. Подтвердите, что chrony снова выбрал источник. Теперь один из них должен быть помечен *как ненулевой Reach.

    sudo chronyc sources -v
    
  5. Исправьте смещение, созданное во время несинхронизации экземпляра. NTP исправляет небольшие несоответствия самостоятельно, но большая разница нуждается в следующей команде. Дополнительные сведения см. в разделе Настройка синхронизации времени.

    sudo chronyc -a makestep
    
  6. Убедитесь, что часы теперь согласны с источником, которым вы доверяете. Это проверка, которая говорит, что смещение на самом деле исчезло, а не все еще исправляется.

    date -u
    
  7. Повторите все, что не удалось.

Предотвращение повторения

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

Связь Служба поддержки GitHub

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

Если вы уже открыли запрос, присоединение пакета поддержки помогает Служба поддержки GitHub быстрее диагностировать проблему. Дополнительные сведения см. в разделе Предоставление данных в поддержку GitHub.

Дополнительные материалы