2011-02-02 2 views
2

Я хотел бы синхронизировать два события между двумя (или более) проводными сетевыми машинами Linux. Могу ли я использовать NTP для этого?Синхронизация событий с использованием NTP

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

Немного другой вопрос: если бы я использовал NTP, какой был бы лучший способ запланировать события? Cronjob или по сценарию? Могла ли я улучшить (вторую) синхронизацию, если бы я использовал библиотеку, такую ​​как this one.

И, наконец, кто-нибудь знает какие-либо программные пакеты синхронизации, которые подходят для синхронизации двух (или более) машин вместе, не обязательно синхронизируясь с сервером времени.

Спасибо за любую помощь.

ответ

2

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

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

+0

так что просто сделайте один сервер ntp? – devin

+1

Вам не обязательно нужно ntp. Если ваша цель - просто выполнить синхронизированное выполнение, вам потребуется только мастер, чтобы сообщить другим узлам, когда начать обработку.Тогда системные часы не влияют на выполнение синхронизации. – earldouglas

0

Что такое ping латентность между вашими хозяевами? Какое несоответствие времени начала между скоординированными процессами подходит для вас? Как начнутся процессы? Cron очень неточен, и время запуска для процессов также необходимо учитывать.

Если время ping для разных хостов сильно различается, я бы сделал что-то вроде этого.

  • Используйте надежный публичный сервер NTP для синхронизации часов на всех скоординированных хостах за несколько минут до события. Однако при частых событиях 3-4 синхронизации в день должно быть достаточно.

  • Использование низкоточного планировщика, такого как cron, на 2-3 минуты раньше времени, запустите простой скрипт оболочки оболочки, который будет wait() до тех пор, пока, например, За 15 секунд до события. Затем скрипт-оболочка запускает приложение tagert с приоритетом выше обычного.

  • В приложении нагрузка (доступ к диску и динамическое связывание происходит медленно), читает любые файлы данные необходимы, делает все трудоемкие расчеты и т.д. Затем она ждет, пока момент старта с субсекундной точностью, используя usleep() и ftime() или gettimeofday(), положить прямо перед fireLasersAtTheMoon() или что будет вашим целевым действием.

Очевидно, что имеет смысл синхронизировать так точно действия, которые являются естественными неточными, как сетевая связь. Если ваша сеть имеет предсказуемую задержку, вы просто измеряете ее с использованием времени округления ping и выполняете мастер-процесс на одном хосте для отправки команды запуска через ssh на другой хост (ы) с задержкой на учетную запись.

Смежные вопросы