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

Насколько опасен асинхронный режим NFS при наличии RAID BBU и UPS?

У меня есть сервер NFSv3 и около 15 клиентов. Я ищу плюсы и минусы, позволяющие async на стороне сервера. Я читал об этом, но мне это все еще немного непонятно. Я знаю, что это может привести к повреждению данных, если сервер выйдет из строя во время операции записи. Однако я также читал, что клиент хранит кеш той же операции и может при необходимости восстановить его. Мои вопросы:

На всех машинах установлена ​​ОС Ubuntu 10.04.

Я пытался найти здесь аналогичный вопрос, который недоступен. я прочитал домашняя страница NFS и быстро просмотрел книгу «Управление NFS и NIS», 2-е издание.

Так что за NFSv3 spec говорит, что в основном для следующих двух операций с данными NFS

  • ЗАПИСЬ со стабильным набором бит
  • COMMIT

серверу разрешено возвращать успех клиенту только после того, как данные достигли стабильного хранилища. Это то, что реализует сервер Linux NFS с опцией экспорта по умолчанию «синхронизация». С помощью «async» сервер может обмануть и вернуть успешный результат, даже если данные не находятся в стабильном хранилище.

То есть потенциальная проблема с повреждением async в основном заключается в следующем

  1. Сервер возвращает успех для операции WRITE или COMMIT
  2. Клиент видит успех и в какой-то момент удаляет страницы из собственного кеша (зачем тратить место на хранение, если они уже находятся в хранилище сервера, думает он)
  3. Сервер выходит из строя, в результате чего теряются данные, которые не были сохранены в стабильном хранилище.
  4. Клиент повторно подключается к серверу, но, поскольку нет журнала, какие данные были записаны или нет, он не может точно знать, какие данные были потеряны.

Теперь последний момент является серьезным, поскольку нет способа узнать, какие данные были потеряны / повреждены или нет.

OTOH, если клиент выйдет из строя, любые грязные данные в клиентском кеше (которые не были сброшены) будут потеряны, но клиентский программист может обойти это (т.е. только после того, как fsync () или close () вернет успех, может программист предполагает, что данные находятся в стабильном хранилище).

Нет. Асинхронный экспорт означает, что сервер сообщает клиенту: «Я сохранил то, что вы мне дали, в стабильном хранилище, теперь вы можете перестать беспокоиться об этом» еще до того, как он попытается записать данные на ваш RAID.

Чтобы немного расширить это, поскольку у вас есть BBU карты RAID, вы получите гораздо более быструю производительность NFS, включив кеш записи. BBU предназначен для сохранения данных в кэше после отключения питания. Я бы не стал включать асинхронный режим в продакшене. Как утверждает автор выше, это отдельная часть цепочки.

Я рекомендую эту статью о ZFS, которая включает неплохую часть общей информации о NFS и производительности:

https://blogs.oracle.com/roch/entry/nfs_and_zfs_a_fine

что именно произойдет, если мой сервер выйдет из строя (т.е. потеряет ли он данные, ожидающие записи, повредит ли это файловая система и т. д.) ?;

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

janneb написал хорошее объяснение того, что означает сбой в контексте сервера NFS.

что произойдет, если и сервер, и клиент выйдут из строя одновременно (например, сбой / отказ питания и отказ ИБП справиться с этим) ?;

Вы проверяете любые важные данные.

что делать, если сервер вылетает, а у меня RAID BBU. Восстановится ли сервер безопасно ?;

Нет. Асинхронный экспорт означает, что сервер сообщает клиенту: «Я сохранил то, что вы мне дали, в стабильном хранилище, теперь вы можете перестать об этом беспокоиться», прежде чем он даже попытается записать данные на ваш RAID.

есть ли способ обнаружить такое повреждение (возможно, что-то похожее на fsck) ?;

Как говорит Яннеб, нет.

что, если ИБП корректно завершит работу сервера? Могу ли я тогда повредить данные ?;

Нет, потому что в этом случае сервер NFS будет записывать все данные в стабильное хранилище.