Синхронизация на времето на Solaris

Онлайн времето е много важно, тъй като много онлайн операции трябва да бъдат правилно синхронизирани.

Друг пример за важността на синхронизирането на времето са възможни проблеми при запазване на файлове на файловия сървър от тези клиентски машини, чието време се различава от времето на сървъра. Това може да доведе до фалшиви възприятия за „свежестта“ или „остарялото“ на файловете, съхранявани на сървъра в клиентски системи. Съгласете се, неприятно е да запишете файла и веднага да се уверите, че той е от вчера следобед. Трябва да се запитаме дали нов файл е бил запазен в близката директория или датата е просто съборена на сървъра или датата е неправилна на клиентската машина.

Как да намерите и зададете системния час и дата

За да разберете колко е часът, в UNIX е обичайно да използвате командата date. Той отчита както текущата система, така и датата и часа. Командата time служи за различна цел - отчита времето, необходимо на системата за изпълнение на командата. Опитвам

за да проверите колко време на процесора ще отнеме за съставяне и показване на пълен списък със системни файлове.

Използвайки командата за дата, можете не само да разберете текущото време, но и да го зададете. Само root може да зададе системното време .

Програмата за дати разбира различни формати за дата, когато трябва да зададете дата, най-стандартният формат е

  • ss - 19 или 20 (cc - от "век" - век);
  • yy - година (98 ако 1998, или 67 ако 2067);
  • ММ - месец;
  • dd - ден от месеца;
  • hh - час;
  • mm - минути;
  • ss - секунди.

без параметри извежда текущата дата и час, във формата, определен от параметрите за локализация (локал).

Как да синхронизирате времето

Solaris има възможността да настрои сървър за синхронизация на времето, който да отговаря на въпросите "колко е часът?" от други машини. Клиентът на този сървър е програмата ntpdate. Тя иска времето от точен сървър за време (наричан още сървър за синхронизация на времето) и директно задава времето в нейната система. С малки отклонения на времето от референтния, той извиква функцията на „мека промяна“ на времето, когато времето не е зададено в определен момент и системният часовник се „избутва“ напред или назад за частица от секундата на всеки второ.

Програмата ntpdate може да се използва без собствен сървър за референтно време, тъй като има сървъри за публично време.

Нека да видим как работи ntpdate - програмата за задаване на системна дата и час:

Нека зададем умишлено грешното време:

Нека повторим за надеждност:

Очевидно втората смяна на времето се оказа значително по-малка от първата: първоначално часовникът беше "върнат" към правилното време, а след това само леко синхронизиран, а в първия случай изрична настройка на времето (стъпков сървър ), а във втория - мека "смяна" (коригиране на сървъра за време).

Достатъчно е да стартирате програмата ntpdate само при стартиране на системата, ако компютърният хардуер е в изправност и таймерът не изисква постоянна корекция.

В допълнение към програмата ntpdate има и други инструменти, предназначени да организират синхронизацията на времето в мрежата. Програмата ntpdate е програма "клиент". Има смисъл да инсталирате поне един (за предпочитане два, за да има резервен) сървър за време в локалната мрежа на организацията. Той е този, който ще анкетира сървърите от слой 2 и компютрите в локалната мрежа ще проверят часовника си спрямо този локален сървър за време. Solaris използва демона xntpd като такъв сървър. .

Конфигурация на сървър за синхронизиране на времето

Алгоритъм на xntpd работа

За синхронизиране на времето в мрежата е разработен специален протокол NTP (протокол за мрежово време), в момента се използва главно версия 4 на този протокол, но NTP сървърите са напълно съвместими с обратна връзка. Протоколът предполага съществуването на няколко "слоя" от референтни източници на време.

Както знаете, в света съществуват така наречените референтни източници на време - цезиеви часовници и радиосигнали с точно време от спътници. Такива референтни източници, на езика на протокола NTP, са включени в слой 0 (слой 0) и са най-точните от всички налични стандарти за време.

Сървърите на слой 0 са достъпни от сървъри от слой 1. Демонът на xntpd на последния (или ntpd в други UNIX системи) разпространява точното време по-нататък до сървъри от слой 2 (слой 2). Сървърите от ниво 2 са достъпни от обикновени сървъри за време от локални мрежи на различни организации.

С други думи, xntpd сървърите за време в нашата локална мрежа представляват сървър от слой 3: целият набор от такива сървъри в локални мрежи образуват слой 3. Номерът на слоя всъщност означава разстоянието (брой междинни сървъри за време) от този компютър до референтният източник на точното време. Важно е да се отбележи, че сървърите за време от един и същи слой не комуникират помежду си.

Всеки NTP сървър използва един или повече точни източници на време, разчитайки изцяло на тях. Тези източници са посочени във файла /etc/inet/ntp.conf. При стартиране xntpd им изпраща заявка, като посочва текущото време.

Всеки от времевите сървъри, на които се доверяваме, е анкетиран няколко пъти, за да получи надеждна статистика за латентността на пакетите. Ако са посочени няколко сървъра, времето от всеки от тях се изисква многократно. Обикновено са необходими 5 минути за анкетиране на всеки сървър, за да се получи време за отчитане, което трябва да се счита за достатъчно точно.

Заявката към сървъра за време се прави по следния начин:

  • клиентът (например нашият xntpd) посочва текущото си системно време в пакета, изпратен до сървъра, и изпраща този пакет;
  • времевият сървър получава пакета, затваря времето за предаване на пакета, изчислено като разлика между времето, в което е изпратен, и времето, когато сървърът е получил пакета. След това той поставя текущото си системно време в същия пакет и изпраща пакета обратно;
  • клиентът получава пакета и си спомня местното време на получаване на пакета.

Клиентът вече може да изчисли латентността на пакета като половината от "времето за двупосочно пътуване минус времето за обработка на сървъра за пакета".

Ако разликата между референтното и текущото системно време не надвишава 128 милисекунди, тогава xntpd регулира честотата на системния часовник, така че да навакса или забави референтното време. Настройката е доста бавна и плавна.

Ако разликата е повече от 1000 секунди, xntpd приема, че има локален неуспех във времето на локалната машина и излиза със смъртен писък, който ще бъде записан в/var/adm/messages .

Ако разликата е между 128 милисекунди и 1000 секунди, тогава xntpd по подразбиране настройва часа незабавно, просто като извика функцията settimeofday () .

Както можете да видите, корекцията на времето може да бъде постепенна и рязка. С рязка корекция, системното време се променя едновременно с бърз скок. Можете да деактивирате тази промяна за демона xntpd, като посочите превключвателя –x при стартиране. Ако часовникът бърза, особено не се препоръчва рязко да променяте времето, тъй като редица зависими от времето приложения (като СУБД) могат да запишат неправилни данни в резултат. Въпреки това, с постоянната работа на xntpd сървъра, както и с редовното анкетиране на такъв сървър с помощта на ntpdate, се изключва силно несъответствие между времето на нашия сървър и референцията. Не използвайте компютри с хардуерни неизправности или разредена (дефектна) CMOS батерия (x86) като сървър за време. В допълнение, сървърът за време не трябва да бъде силно натоварен с компютърни задачи, изискващи много ресурси: той няма да може да осигури бърз отговор и правилна обработка на заявките.

Сървърите за време използват UDP порт 123, за да комуникират помежду си.