Поделиться через


Общие сведения о блокировке файлов и типах блокировки в Azure NetApp Files

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

Типы блокировки

Существует несколько типов блокировок NFS, которые включают:

Общие блокировки: Общие блокировки могут использоваться несколькими процессами одновременно и могут выдаваться только в том случае, если в файле нет монопольных блокировок. Эти механизмы блокировки предназначены для операций только чтения, но также могут использоваться для записи (например, с базой данных).

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

Делегации: Делегирования используются только с NFSv4.x и назначаются при включении параметров сервера NFS, а клиент поддерживает делегирования NFSv4.x. Делегирования позволяют кэшировать операции на стороне клиента, создавая "мягкую" блокировку файла, используемого клиентом. Это повышает производительность определенных рабочих нагрузок, уменьшая количество вызовов между клиентом и сервером и похожими на блокировку SMB. Azure NetApp Files в настоящее время не поддерживает делегирования NFSv4.x.

Блокировки диапазона байтов: Вместо блокировки всего файла блокировка диапазона байтов блокирует только часть файла.

Поведение блокировки зависит от типа блокировки, версии клиентской операционной системы и используемой версии NFS. Не забудьте проверить блокировку в вашей среде, чтобы оценить ожидаемое поведение.

Блокировка NFSv3

NFSv3 использует вспомогательные протоколы, такие как диспетчер сетевых блокировок (NLM) и монитор состояния сети (NSM), для координации блокировки файлов между клиентом и сервером NFS. Эти вспомогательные протоколы определены в RFC-1813, к которому соответствует Azure NetApp Files.

NLM помогает установить и освободить блокировки, а NSM уведомляет участников сети о перезагрузке сервера. При блокировке NFSv3 при перезагрузке клиента сервер должен освободить блокировки. Когда сервер перезагружается, клиент напоминает серверу о блокировках, которые были у него.

Замечание

В некоторых случаях механизмы блокировки NFS не взаимодействуют должным образом (например, в случае сбоя сети), а устаревшие блокировки остаются на сервере и должны быть удалены вручную. Дополнительные сведения об этой задаче см. в статье об устранении неполадок с блокировками файлов.

Блокировка NFSv4.x

NFSv4.x использует модель блокировки на основе аренды, интегрированную в протокол NFS. Это означает, что нет вспомогательных служб, которые нужно поддерживать или о которых нужно беспокоиться; все блокировки инкапсулируются в процессе обмена NFSv4.x.

Azure NetApp Files поддерживает механизм блокировки файлов NFSv4.x, сохраняя состояние всех блокировок файлов в модели арендного типа. В соответствии с RFC 8881 Azure NetApp Files будет "определять единый период аренды для всех состояний, удерживаемых клиентом NFS. Если клиент не продлит аренду в течение определенного периода, всё состояние, связанное с арендой клиента, может быть высвобождено сервером.

Это означает, что клиент может продлить аренду явным образом или неявно, выполнив операцию, например чтение файла. Кроме того, Azure NetApp Files определяет льготный период, который является периодом специальной обработки, при которой клиенты пытаются восстановить состояние блокировки во время восстановления сервера.

Срок Определение
Аренда Период времени, в течение которого Azure NetApp Files безвозвратно предоставляет клиенту блокировку.
Льготный период Период времени, в течение которого клиенты пытаются восстановить состояние блокировки во время восстановления сервера в случае сбоя сервера.

Как Azure NetApp Files обрабатывает блокировки NFSv4.x

Azure NetApp Files предоставляет блокировки по запросу клиента на условиях аренды. Сервер Azure NetApp Files проверяет арендное соглашение каждого клиента на предмет изменений каждые 30 секунд. В случае перезагрузки клиента клиент может восстановить все допустимые блокировки с сервера после перезапуска. Если сервер Azure NetApp Files перезагружается, при перезапуске он не выдает новые блокировки клиентам в течение 45 секунд. По истечении этого времени блокировка может быть выдана запрашивающим клиентам. Если блокировка не может быть восстановлена в течение указанного льготного периода, срок действия блокировки истекает самостоятельно. Это поведение отличается от блокировки NFSv3, так как не будет устаревших блокировок, которые необходимо вручную разбить.

Установка блокировок вручную на клиенте

Чтобы проверить блокировки NFS, клиент должен сообщить серверу NFS установить блокировку. Однако не все приложения используют блокировки. Например, приложение "vi" не блокирует файл. Он создает скрытый файл буфера с помощью соглашения об именовании точек в той же папке, а затем фиксирует запись в этот файл при закрытии приложения. Затем старый файл удаляется и файл буфера переименовывается в имя файла.

Однако существуют служебные программы для ручного установления блокировок. Например, flock может блокировать файлы.

Чтобы установить блокировку файла, сначала запустите exec, чтобы назначить числовый идентификатор.

# exec 4<>v4user_file

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

# flock

Usage:
 flock [options] <file|directory> <command> [command args]
 flock [options] <file|directory> -c <command>
 flock [options] <file descriptor number>

Options:
 -s  --shared             get a shared lock
 -x  --exclusive          get an exclusive lock (default)
 -u  --unlock             remove a lock
 -n  --nonblock           fail rather than wait
 -w  --timeout <secs>     wait for a limited amount of time
 -E  --conflict-exit-code <number>  exit code after conflict or timeout
 -o  --close              close file descriptor before running command
 -c  --command <command>  run a single command string through the shell

 -h, --help     display this help and exit
 -V, --version  output version information and exit

# flock -n 4

Чтобы разблокировать файл.

# flock -u -n 4

Ручная блокировка файлов позволяет тестировать взаимодействия при открытии и редактировании файлов, а также проверять функциональность прерывания блокировки в Azure NetApp Files.

Дальнейшие шаги