[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по управлению системой: Сети и средства связи


Диспетчер сетевой блокировки

Диспетчер сетевой блокировки работает совместно с Сетевой файловой системой (NFS), поддерживая управляющий файл и блокировку записей сетевых баз данных, принятую в System V. Диспетчер сетевой блокировки (rpc.lockd) и монитор состояния сети (rpc.statd) - это демоны сетевых служб. Демон rpc.statd - это процесс пользовательского уровня, а демон rpc.lockd реализован как набор нитей ядра (по аналогии с сервером NFS). Оба демона необходимы для выполнения ядром основных сетевых функций.

Примечание: NFS не поддерживает обязательную или принудительную блокировку.

Архитектура Диспетчера сетевой блокировки

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

В отличие от системы NFS, не сохраняющей данные о состоянии, Диспетчер сетевой блокировки неявно хранит информацию о состоянии. Иначе говоря, Диспетчер сетевой блокировки должен запоминать, есть ли в настоящее время блокировка для клиента. В мониторе состояния сети rpc.statd применен простой протокол, позволяющий Диспетчеру сетевой блокировки отслеживать состояние остальных компьютеров сети. Обладая подробной информацией о состоянии, Диспетчер сетевой блокировки может поддерживать согласованное состояние в среде NFS, которая сама по себе таким свойством не обладает.

Процесс блокировки сетевых файлов

Когда приложению необходимо заблокировать локальный файл, оно направляет свой запрос ядру с помощью функций lockf, fcntl и flock. Затем ядро обрабатывает запрос на блокировку. В том случае, если приложение на клиенте NFS запрашивает блокировку для удаленного файла, Диспетчер сетевой блокировки генерирует вызов удаленной процедуры (RPC).

Когда клиент получает начальный запрос на удаленную блокировку, он с помощью демона rpc.statd регистрирует этот запрос на сервере. То же самое верно и для диспетчера сетевой блокировки на сервере. При получении начального запроса от клиента, сервер зарегистрирует его на клиенте с помощью монитора состояния локальной сети.

Процесс восстановления после сбоя

Демон rpc.statd в каждой системе уведомляет о своей работе демоны rpc.statd других систем. При получении извещения о выходе из строя или восстановлении другого компьютера, программа-демон rpc.statd уведомляет об этом свой демон rpc.lockd.

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

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

Программа-демон rpc.statd хранит имена хостов в /etc/sm и /etc/sm.bak, позволяя отслеживать те хосты, которые нужно уведомлять во время восстановления клиента.

Запуск диспетчера сетевой блокировки

По умолчанию сценарий /etc/rc.nfs запускает демоны rpc.lockd и rpc.statd вместе с остальными демонами NFS. Если NFS уже запущена, проверьте, работают ли демоны rpc.lockd и rpc.statd, выполнив инструкции из раздела Получение текущего состояние демонов NFS. Оба демона должны иметь состояние активен. Если программы-демоны rpc.lockd и rpc.statd не активны и, следовательно, не запущены, выполните следующие действия:

  1. Откройте файл /etc/rc.nfs в любом текстовом редакторе.
  2. Найдите следующие строки:

    if [ -x /usr/sbin/rpc.statd ]; then
           startsrc -s rpc.statd
    fi
    if [ -x /usr/sbin/rpc.lockd ]; then
           startsrc -s rpc.lockd
    fi
    
  3. Если в начале каких-либо из этих строк есть знак #, удалите его. Затем сохраните и закройте файл. Затем запустите демоны rpc.statd и rpc.lockd , следуя инструкциям из раздела Запуск демонов NFS.

    Примечание: Соблюдайте указанную последовательность. Первым всегда нужно запускать демон statd.
  4. Если NFS запущена и записи в файле /etc/rc.nfs не содержат ошибок, то остановите и снова запустите демоны rpc.statd и rpc.lockd согласно инструкциям из разделов Завершение работы демонов NFS и Запуск демонов NFS.

    Примечание: Соблюдайте указанную последовательность. Первым всегда нужно запускать демон statd.

Если демоны rpc.statd и rpc.lockd не запускаются, обратитесь к разделу Устранение неполадок диспетчера сетевой блокировки.

Устранение неполадок диспетчера сетевой блокировки

Если в системе клиента получено следующее сообщение:

clnttcp_create: RPC: Ошибка удаленной системы - Соединение отклонено
rpc.statd:нет связи с statd на {сервер}

локальная система пытается информировать о процессе восстановления другую систему. При перезагрузке системы или перезапуске демонов rpc.lockd и rpc.statd имена систем перемещаются из файла /etc/sm в файл /etc/sm.bak , а демон rpc.statd пытается проинформировать все системы из файла /etc/sm.bak о необходимости восстановления.

Если демон rpc.statd может установить связь с указанным компьютером, то его запись удаляется из файла /etc/sm.bak. Если демон rpc.statd не может установить связь сразу, он повторяет попытки через фиксированный интервал. В каждом случае, если компьютер не отвечает, отправляется приведенное выше сообщение. В том случае, если необходима целостность блокировки, демон будет продолжать попытки; однако это может оказать неблагоприятное воздействие на время выполнения операций блокировки. Действия будут зависеть от состояния целевого компьютера (компьютер совсем не отвечает или время от времени переходит в рабочее состояние). Для того, чтобы это сообщение больше не появлялось, выполните следующие действия:

  1. Убедитесь в том, что демоны statd и lockd в системе сервера запущены, выполнив инструкции из раздела Получение текущего состояния демонов NFS. (Демоны должны находиться в активном состоянии.)
  2. Если демоны не запущены, запустите демоны rpc.statd и rpc.lockd согласно инструкциям из раздела Запустите демоны NFS.

    Примечание: Соблюдайте указанную последовательность. Первым всегда нужно запускать демон statd.

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

Существует и другой способ исправления:

  1. Остановите в системе клиента демоны rpc.statd и rpc.lockd согласно инструкциям из раздела Завершение работы демонов NFS.
  2. В системе клиента удалите запись целевой системы из каталога /etc/sm.bak командой:

    rm /etc/sm.bak/имя-целевой-системы
    

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

  3. Запустите в системе клиента демоны rpc.statd и rpc.lockd согласно инструкциям из раздела Запуск работы демонов NFS.

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

  1. Проверьте связь между клиентом и сервером командой ping. Если оба компьютера запущены, и сеть нормально работает, то проверьте для каждого компьютера имена хостов, указанные в файле /etc/hosts. Для того чтобы клиент и сервер узнавали друг друга, необходимо, чтобы имена хостов в их записях точно совпадали. Если преобразование адресов хостов выполняет сервер имен, то убедитесь в том, что его данные в точности соответствуют данным файла /etc/hosts.
  2. Проверьте, работают ли демоны rpc.lockd и rpc.statd в обеих системах, выполнив инструкции из раздела Получение текущего состояние демонов NFS. Оба демона должны находиться в состоянии активен.
  3. Если они не активны, запустите демоны rpc.statd и rpc.lockd согласно инструкциям из раздела Запуск демонов NFS.
  4. Если же демоны активны, рекомендуется перезапустить их как на сервере, так и на клиенте. Для этого завершите все приложения, запрашивающие блокировку.
  5. Затем остановите демоны rpc.statd и rpc.lockd в обеих системах, выполнив инструкции из раздела Завершение работы демонов NFS.
  6. Снова запустите демоны rpc.statd и rpc.lockd, сначала на сервере, а затем в системе клиента, выполнив инструкции из раздела Запуск серверов NFS.

    Примечание: Соблюдайте указанную последовательность. Первым всегда нужно запускать демон statd.

Если после выполнения описанной процедуры ошибка не будет исправлена, запустите демон lockd в режиме отладки. Для этого выполните следующие действия:

  1. Затем остановите демоны rpc.statd и rpc.lockd в обеих системах, выполнив инструкции из раздела Завершение работы демонов NFS.
  2. Запустите демон rpc.statd в системах клиента и сервера, выполнив инструкции из раздела Запуск демонов NFS.
  3. Запустите на сервере и клиенте демон rpc.lockd следующей командой:

    /usr/sbin/rpc.lockd -d1
    

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


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]