Назад | Перейти на главную страницу

Сервер Linux NFS отказывается от блокирующих блокировок

Так что у меня проблема. Это ужасная, ужасная проблема.

У меня есть набор серверов Linux NFS (в кластере NFS / CIFS с использованием CTDB), которые отказываются от блокировок… только когда блокировка блокирует. Если это неблокирующий вызов, он работает нормально.

См. Поток трафика ниже:

Блокировка вызова блокировки:

  9.414674   10.10.1.40 -> 10.10.1.14   NLM 282 V4 LOCK Call FH:0xf6b3519c svid:5 pos:0-0  nlm.lock.caller_name == "centos-ad2012r2"  nlm.exclusive == 1  nlm.block == 1
  9.415002   10.10.1.14 -> 10.10.1.40   NLM 106 V4 LOCK Reply (Call In 39) NLM_BLOCKED  nlm.stat == 3
 18.613965   10.10.1.40 -> 10.10.1.14   NLM 274 V4 CANCEL Call FH:0xf6b3519c svid:5 pos:0-0  nlm.lock.caller_name == "centos-ad2012r2"  nlm.exclusive == 1  nlm.block == 1
 18.614003   10.10.1.40 -> 10.10.1.14   NLM 266 V4 UNLOCK Call FH:0xf6b3519c svid:5 pos:0-0  nlm.lock.caller_name == "centos-ad2012r2"
 18.614675   10.10.1.14 -> 10.10.1.40   NLM 106 V4 CANCEL Reply (Call In 55) NLM_DENIED  nlm.stat == 1
 18.614889   10.10.1.14 -> 10.10.1.40   NLM 106 V4 UNLOCK Reply (Call In 56)  nlm.stat == 0

Вызов неблокирующей блокировки:

 47.476050   10.10.1.40 -> 10.10.1.14   NLM 282 V4 LOCK Call FH:0xf6b3519c svid:6 pos:0-0  nlm.lock.caller_name == "centos-ad2012r2"  nlm.exclusive == 1  nlm.block == 0
 47.476647   10.10.1.14 -> 10.10.1.40   NLM 106 V4 LOCK Reply (Call In 102)  nlm.stat == 0
 51.908995   10.10.1.40 -> 10.10.1.14   NLM 266 V4 UNLOCK Call FH:0xf6b3519c svid:6 pos:0-0  nlm.lock.caller_name == "centos-ad2012r2"
 51.909700   10.10.1.14 -> 10.10.1.40   NLM 106 V4 UNLOCK Reply (Call In 112)  nlm.stat == 0

Клиент - Centos 6.5

Сервер - это Scientific Linux 6.2

Базовая файловая система - Lustre. Проблема может иметь ту же причину, что и эта другая проблема:

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