учебники, программирование, основы, введение в,

 

Время в Solaris. Управление системой с помощью Solaris Management Console

Время в сети очень важно, так как многие операции в сети должны грамотно синхронизироваться.
Например, очевидно, что при запуске резервного копирования через сеть, время на сервере, где расположен ленточный накопитель, и время на сервере, откуда производится копирование, должно быть одинаковым - это особенно важно при автоматизации копирования на ленту, и еще важнее - при организации последовательного копирования на несколько лент, если объема одной недостаточно для завершения копирования.
Еще один пример важности синхронизации времени - возможные проблемы при сохранении на файловом сервере файлов с тех клиентских машин, чье время отличается от серверного. Из-за этого на клиентских системах может возникать ложное восприятие "свежести" или "несвежести" файлов, хранящихся на сервере. Согласитесь, неприятно сохранить файл и тут же убедиться, что он датирован вчерашним днем. Приходится гадать, сохранен ли свежий файл в соседний каталог или на сервере просто сбита дата, или она неверна на клиентской машине.
Как узнать и установить системное время и дату?
Для того чтобы узнать, который час, в UNIX принято использовать команду date. Она сообщает и текущую системную дату, и время. Команда time предназначена для другой цели - она подсчитывает время, потраченное системой на выполнение команды. Попробуйте посредством команды
time "find / -name \* "

проверить, сколько процессорного времени займет составление и вывод полного списка файлов системы.
С помощью команды date можно не только узнать текущее время, но и установить его. Устанавливать системное время может только root.
Программа date понимает разные форматы дат, когда вы требуете установить дату. Наиболее стандартным является формат
date hhmm

или
date ссyyMMddhhmm.ss

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

без параметров выводит текущую дату и время, в формате, определяемом параметрами локализации (locale).

Как синхронизировать время?
В Solaris есть возможность установить сервер синхронизации времени, который будет отвечать на вопросы "который час?", поступающие от других машин. Клиент этого сервера - программа ntpdate. Она спрашивает время у сервера точного времени (также называемого сервером синхронизации времени) и директивно устанавливает время в своей системе. При небольших отклонениях времени от эталонного она вызывает функцию "мягкого изменения" времени, когда время не устанавливается определенным одномоментно, а часы системы ежесекундно "подталкиваются" на долю секунды вперед или назад.
Программу ntpdate можно использовать и без собственного эталонного сервера времени, поскольку существуют публичные серверы времени.
Посмотрим, как работает ntpdate - программа установки системной даты и времени:
date
Сбт 29 Май 2004 19:10:20

Установим заведомо неверное время:
date 1912
Сбт 29 Май 2004 19:12:00

Теперь запустим ntpdate и сообщим ей для ориентировки адреса двух эталонных серверов времени (они взяты из списка на www.ntp.org):
ntpdate tock.keso.fi ntp.psn.ru
29 May 19:10:31 ntpdate[10630]: step time server
194.149.67.130 offset -95.351227 sec

Повторим для надежности:
ntpdate tock.keso.fi ntp.psn.ru
29 May 19:10:39 ntpdate[10631]: adjust time server
194.149.67.130 offset -0.006045 sec

Как видим, вторая подвижка времени оказалась существенно меньше, чем первая: вначале часы были "возвращены" к правильному времени, а затем лишь слегка синхронизированы, причем в первом случае использовалась явная установка времени (step time server), а во втором - мягкая "подвижка" (adjust time server).
Программу ntpdate достаточно запускать только при старте системы, если только аппаратура компьютера исправна и таймер не требует постоянной коррекции.
Кроме программы ntpdate существуют и другие средства, предназначенные для синхронизации времени в сети. Программа ntpdate - это "клиентская" программа. В локальной сети организации имеет смысл установить по крайней мере один (а лучше - два, чтобы был запасной) сервер времени. Именно он будет опрашивать серверы слоя 2, а компьютеры локальной сети будут сверять свои часы по этому локальному серверу времени. В качестве такого сервера в Solaris используют демон xntpd.
Настройка сервера синхронизации времени
Алгоритм работы xntpd
Для синхронизации времени в сети был разработан специальный протокол NTP (Network Time Protocol), в настоящее время обычно используется версия 4 этого протокола, но серверы NTP обладают полной обратной совместимостью. Протокол предполагает существование нескольких "слоев" эталонных источников времени.
Как известно, в мире есть так называемые эталонные источники времени - цезиевые часы и радиосигналы точного времени со спутников. Такие эталонные источники, говоря языком протокола NTP, входят в слой 0 (stratum 0) и являются максимально точными из всех доступных эталонов времени.
К серверам слоя 0 обращаются серверы слоя 1. Работающие на последних демоны xntpd (или ntpd - в других системах UNIX) распространяют точное время дальше, к серверам слоя 2 (stratum 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.
Выбор эталонного сервера времени
Как мы уже знаем, чтобы обеспечить синхронизацию времени, в Интернете существуют "эталонные" серверы времени. Для получения показаний времени локальный сервер времени в своей сети следует настроить для обращений ко вторичным серверам (слой 2), так как нагрузка на главные серверы (слоя 1) очень велика. В России есть по крайней мере один устойчиво функционирующий эталонный сервер слоя 2 - ntp.psn.ru (IP-адрес 194.149.67.130). Он расположен в Пущино; вот его регистрационные данные с сервера www.ntp.org:
Location: Pushchino, Moscow region, Russia
Geographic Coordinates: 54:50N, 37:37E
Synchronization: NTP secondary (stratum 2), Alpha/Linux
Service area: Russia
Access policy: open access, please send a message to notify
Contact: clockmaster@psn.ru

Информация о других эталонных серверах времени и о режиме доступа к ним может быть получена по адресу http://www.ntp.org.
Для того чтобы использовать эталонный сервер времени, может требоваться регистрация или даже оплата этого сервиса. Однако в Сети достаточно много таких серверов с публичным доступом, и хорошим тоном считается отправить уведомительное письмо их администратору: просто для того, чтобы вежливо предупредить о том, что отныне еще один сервер времени будет получать информацию с их эталонного сервера.

Запуск сервера времени

Демон xntpd при старте читает файл /etc/inet/ntp.conf или принимает параметры из командной строки. Однако ему необходимо сообщить адрес эталонных серверов и (или) режим работы.
Если файл /etc/inet/ntp.conf не удается прочесть и с ключом -c не указан иной файл конфигурации, демон, если он был заранее скомпилирован с поддержкой NetInfo, прислушивается к широковещательным сообщениям в сети и пытается сам найти себе эталон времени. Маловероятно, что в этом его ждет успех, если сервер времени находится за фильтром пакетов (межсетевым экраном, firewall - что одно и то же).
Программа ntpq позволяет получать информацию о текущей конфигурации прямо от сервера времени и изменять настройки xntpd "на ходу", без перезапуска сервера.
В командной строке вызова xntpd доступны следующие ключи:
-a - включить аутентификацию (по умолчанию - выключена);
-A - выключить аутентификацию;
-b - синхронизироваться по широковещательным сообщениям NTP;
-c conffile - использовать указанный файл вместо /etc/inet/ntp.conf;
-d - включить режим отладки;
-e authdelay - указать явно время в секундах, которое требуется данной системе для вычисления ключа;
-f driftfile - указать путь к файлу со значением сдвига часов;
-k keyfile - указывает файл с ключами для аутентификации в NTP;
-l logfile - указывает файл протокола; по умолчанию протоколи- рование ведется через syslog();
-m - синхронизировать часы по multicast-сообщениям NTP на группу multicast-адресов 224.0.1.1; требует поддержки multicast в ядре;
-p pidfile - указывает файл, в который пишется PID процесса xntpd.

Файл конфигурации xntpd - ntp.conf

В файле /etc/inet/ntp.conf команды располагаются по одной в строке, за ключевым словом команды могут идти аргументы. Строки, начинающиеся со знака решетки (#), являются комментариями. Пустые строки игнорируются. Аргументы отделяются от команды и друг от друга пробелами.
Параметры настройки xntpd могут быть установлены в файле или из командной строки, ключи командной строки имеют преимущество перед установками в файле конфигурации.
Аргументы могут быть именами компьютеров или IP-адресами, а также спецификацией времени (числом с плавающей точкой) и текстовой строкой.
Рассмотрим пример конфигурации:

server ntp.cpsc.ucalgary.ca prefer
server ntp.my-provider.ru
server louie.udel.edu
driftfile /var/db/ntp.drift
        

Параметр server указывает, какие эталонные серверы времени следует использовать, они перечисляются по одному в каждой строке. Если один из серверов указан с модификатором prefer, как ntp.cpsc.ucalgary.ca в нашем примере, то ответу этого сервера отдается предпочтение перед остальными. Параметр server нельзя использовать в случае, если наш сервер определяет соседей, слушая широковещательные пакеты NTP.
Ответ даже от предпочитаемого сервера будет отброшен, если он значительно отличается от ответов других серверов. В ином случае он будет использоваться вне зависимости от других ответов. Модификатор prefer используется для тех серверов NTP, о которых известно, что они очень точны. Например, серверам из слоя 2 имеет смысл отдавать предпочтение перед серверами провайдера, филиала вашей фирмы или дружественной компании.
Параметр driftfile задает файл, который надо использовать для хранения смещения частоты системных часов. Файл требуется программе xntpd для автоматической компенсации естественного смещения часов. При этом обеспечивается правильная настройка часов, даже если компьютер на некоторое время отключается от внешнего источника синхронизации времени, что может быть вызвано сбоем сети или этого источника.
В файле, имя которого указанно в строке driftfile, хранится история ответов серверов NTP. Этот файл содержит служебную информацию для сервера NTP, и другие процессы не должны иметь доступа к этому файлу для записи в него.
Файл конфигурации /etc/inet/ntp.conf также определяет параметры доступа к нашему NTP-серверу. По умолчанию сервер NTP доступен любым хостам, которые могут к нему обратиться. При отсутствии фильтрации пакетов это означает свободный доступ из Интернета для всех.
Для ограничения группы компьютеров, имеющих право запрашивать время у xntpd, используется параметр restrict:

restrict 192.168.1.0 mask 255.255.255.0 nomodify
        

Такая установка разрешает обращаться к xntpd только компьютерам из сети 192.168.1.0 с маской сети 255.255.255.0, но запрещает им требовать от сервера NTP изменить его локальное время.
Директив restrict в файле /etc/inet/ntp.conf может быть несколько.
Демон xntpd также позволяет ввести аутентификацию для обращений к нему или настроить аутентификацию для обращения к тем эталонным серверам, которые ее требуют.
Если ваша сеть невелика, а требования к точности времени умеренные (часы могут спешить или отставать на 30 миллисекунд и немного больше), то xntpd может показаться не лучшим выбором. Для синхронизации часов только при загрузке системы достаточно использовать программу ntpdate.
Ее можно вызывать не только при загрузке системы. Если в процессе работы системные часы отклоняются несильно и высокая точность (30 мс или выше) не нужна, запускайте раз в два часа ntpdate для синхронизации с эталонным сервером из cron:

1 */2 * * * root /usr/sbin/ntpdate -b -s адрес_NTP-сервера 
        

Проверка настроек сервера времени

Для просмотра и изменения параметров xntpd используйте программу ntpq. В частности, для вывода информации об известных источниках точного времени запустите ее с ключом -p:

ntpq -p
remote refid st t when poll reach delay offset disp
===================================================================
ensb.cpsc.ucalg montpelier 2 u 26 64 1 189.36 2879.39 15875.0
    

Если надо проследить цепочку, по которой точное время добирается до вашей сети, пригодится программа ntptrace:

ntptrace ntp.cpsc.ucalgary.ca
ensb.cpsc.ucalgary.ca: stratum 2, offset 2.867748, synch
distance 0.05968
montpelier.ilan.caltech.edu: stratum 1, offset 2.863728,
synch distance 0.00113, refid ''
ntptrace localhost
localhost: stratum 16, offset 0.000014, synch distance
1.00270
    

Управление системой с помощью Solaris Management Console
Solaris Management Console (консоль управления Solaris) представляет собой графическую оболочку, написанную на языке Java и предназначенную для наглядного представления ряда настроек системы, а также для их изменения.
Часто системному администратору быстрее и проще внести изменения в настройки системы из командной строки, если речь идет о несложной модификации, а квалификация системного администратора позволяет ему быстро вспомнить и применить требуемую команду.
Solaris Management Console позволяет выполнять задачи системного администрирования с применением более наглядного интерфейса (не все системные администраторы и их ассистенты с легкостью обращаются с любыми командами в командной строке - попробуйте вспомнить без книги и man, какие ключи и какой порядок аргументов у команд setfacl или setquota).
Solaris Management Console - это модульное приложение, которое научено обращаться с низкоуровневыми утилитами управления системой. Редактируя список пользователей в SMC, можно не сомневаться, что в конечном счете будут (автоматически) запущены команды типа useradd или roleadd.
Применяя Solaris Management Console, вы сможете решить следующие задачи (см., демонстрирующий основное дерево объектов управления этой программы):

  • добавлять, изменять их свойства и удалять учетные записи пользователей;
  • добавлять, изменять их свойства и удалять учетные записи проектов;
  • устанавливать и удалять обновления системы (patches);
  • просматривать и модифицировать настройки сети;
  • управлять списком запланированных заданий;
  • монтировать устройства в файловую систему, включая экспортируемые серверами NFS каталоги;
  • управлять экспортом каталогов;
  • управлять отказоустойчивыми наборами дисков или их объединениями (RAID разных уровней, создание псевдоустройств).

Для выполнения этих действий SMC может потребовать от вас дополнительной аутентификации. Некоторые задачи может выполнять не только root, но и пользователи, исполняющие определенные роли в рамках концепции RBAC (см. лекцию 21).
При работе с SMC вы имеете возможность обращаться к настройкам как локального, так и удаленных компьютеров.
Программа Solaris Management Console работает не только в графическом, но и в текстовом режиме, и даже может быть вызвана из скрипта. При вызове графического интерфейса из командной строки достаточно дать команду
smc&

По команде smc запускается собственно консоль управления. При ее работе фактически используется еще два компонента: сервер SMC и программа smcboot, которая запускает этот сервер, как только к ней обратится с запросом консоль управления (при первом запуске smc). Серверы SMC могут быть запущены на одном или нескольких компьютерах для локального или удаленного управления ими.
Для того чтобы по приходе запроса от консоли SMC на компьютере стартовал сервер SMC, требуется, чтобы на этом компьютере была заранее запущена программа smcboot. Для ее запуска используется скрипт init.wbem:
/etc/init.d/init.wbem start

В системах до Solaris 8 включительно важно не допускать запуска этого скрипта при запущенном smcboot, так как это вызовет конфликт, который не сможет быть исправлен посредством рестарта smcboot. В Solaris Management Console 2.1 в Solaris 9 в скрипт уже добавлена проверка "не запущен ли уже smcboot?" и бояться повторного запуска скрипта не следует.
Самонастройка сервера и консоли SMC происходит в момент первого запуска и в Solaris Management Console 2.0 может занять много времени (более пяти минут). В версии 2.1 скорость настройки заметно увеличена. В этой версии вы можете наблюдать сообщения о самонастройке, если запустите из командной строки следующие команды подряд перед первым запуском консоли SMC:
/etc/init.d/init.wbem stop
Shutting down Solaris Management Console server on port 898.
/etc/init.d/init.wbem start
Starting Solaris Management Console server version 2.1.0.
endpoint created: :898
Solaris Management Console server is ready.

Консоль управления может загрузить наборы утилит (toolboxes) с сервера SMC. Эти наборы представляют собой описания групп утилит, доступных на этом (и, возможно, других) сервере (серверах). После того как набор утилит загружен, он отображается в окне консоли и может быть использован для вызова соответствующих программ из этого набора.
При работе из командной строки подкомандами smc могут быть следующие:
open - открыть окно консоли, это - действие по умолчанию;
edit - открыть окно консоли для редактирования доступных наборов утилит, запустить утилиты в этом режиме нельзя.
Ключами smc могут быть литеры (одна литера) или слова; ниже указаны некоторые ключи парами (литера/слово), то есть можно использовать либо литеру, либо слово в качестве соответствующего ключа. Перед аргументами, передаваемыми утилите, следует указывать два знака "минус" и отделять аргументы утилиты от них пробелом.
-B | - -toolbox набор - загрузить указанный набор утилит, набор может быть указан как имя файла или полный URL (). URL должен указывать на компьютер, где запущен SMC-сервер, если порт не указан явно, подразумевается порт 898.
-D | - -domain домен - выполнять управление указанным доменом, синтаксис указания домена - тип:/имя_компьютера/имя_домена, тип может быть nis, nisplus, ldap, dns или file. Этот ключ применим только для конкретной утилиты, запущенной в режиме командной строки.
-H | - -hostname host_name:port - соединяться с указанным компьютером и портом в предположении, что именно там запущен SMC-сервер.
-Jjava_option - передать исполняющей системе Java указанные параметры, например
smc -J-Dcom.example.boolean=true

-r | - -rolename role_name - явным образом указать роль; для того, чтобы с гарантией был спрошен и пароль, следует использовать ключ -p.
-t - запустить SMC в терминальном режиме; если графический дисплей недоступен, этот ключ будет подразумеваться по умолчанию.
- -trust - безоговорочно доверять коду, который загружен в консоль с сервера, имеет смысл при запуске из скриптов, когда некому ответить на вопрос "доверяете ли вы этому коду?".
-u | - -username user_name - указать иное имя пользователя для аутентификации в SMC; если ключ опущен, подразумевается тот же пользователь, что запускает программу.
При работе с smc могут быть полезны утилиты smccompile(1M), smcconf(1M), smcregister(1M).

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика