Рейтинг:2

Высокоскоростная сетевая запись с хранилищем большой емкости

флаг pf

У меня есть NAS под управлением Samba с пулом ZFS 20T с одним vdev raid1 с двумя вращающимися дисками ржавчины. У меня сейчас 16G RAM в машине. Хранилище используется для постоянно растущего постоянного резервного архива видеоматериалов. Это один раз запись, один раз чтение для обработки, а затем, возможно, резервное копирование.

Я регулярно закидываю на этот NAS файлы 40GiB. Я собираюсь обновить свою гигабитную сеть до 10GbE, чтобы сделать этот процесс менее болезненным. Однако я подозреваю, что буду ограничен скоростью записи базовых дисков.

Насколько я понимаю, ZIL и SLOG ускоряют только синхронную запись, поэтому добавление nvme SSD в качестве SLOG не повлияет на мой вариант использования, поскольку я считаю, что Samba использует асинхронную запись по умолчанию.

Я не уверен, что настройка samba для синхронной записи и добавление SLOG на nvme SSD сделают то, что мне нужно. Я понимаю, что это сопряжено с риском потери данных в случае отказа диска или отключения питания.Это приемлемо, так как я храню файлы на исходном компьютере достаточно долго, чтобы повторно передать их в случае краткосрочной потери данных. Износ SSD вызывает беспокойство, но типичные диски имеют 300 ТБВт или около того, чего достаточно, чтобы заполнить мой никогда не удаляемый NAS 15 раз или за 75 лет при текущей скорости генерации данных, я согласен с этим и купите новый SSD, если/когда SSD сломается. Это допустимые оговорки. Обычно я бы просто попробовал и протестировал, но в настоящее время дефицит всего я хотел бы знать заранее, что мне нужно купить для этого.

Я знаю, что могу добавить больше виртуальных устройств RAID 1 в пул, чтобы получить пул RAID 10, но это слишком дорого, шасси Midtower не может поддерживать такое количество дисков, оно значительно перерасходует ресурсы пула вместе с существующими дисками и будет потреблять больше энергии, чем время держать всю эту ржавчину вращающейся.

Какие у меня есть варианты для достижения скорости записи свыше 10 Гбит/с в этот пул zfs для данных объемом не менее 40 ГБ, помимо добавления в пул большего количества вращающейся ржавчины в стиле рейда 10?

Рейтинг:3
флаг us

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

В случае с ZFS смысл ZIL/SLOG состоит в том, чтобы действовать как быстрое временное постоянное хранилище, которое допускает синхронный режим, то есть гарантирует, что запись является окончательной. В противном случае файловой системе пришлось бы напрямую записывать блоки на жесткий диск, что делает синхронный режим медленным.

В вашем случае, если вы хотите обеспечить полную скорость записи 40 ГБ данных, вам следует увеличить размер оперативной памяти, чтобы покрыть размер файла.

Однако, поскольку FS сразу же начинает запись на жесткие диски, вам не нужно 40 ГБ памяти, чтобы получить полную скорость для записи. Например, когда клиент записал 20 ГБ данных, 10 ГБ могут находиться в кеше ОЗУ, а остальные 10 ГБ уже на жестком диске.

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

флаг pf
Я думал, что буфер записи на основе ОЗУ ограничен некоторым размером. Вы говорите, что ZFS с радостью сожрет всю системную память в качестве кеша записи? Это звучит удивительно для меня, поскольку это может вызвать всевозможные странные проблемы с производительностью, если вы не оставите достаточно оперативной памяти для запуска новых процессов...
Рейтинг:2
флаг ca

Я понимаю, что это связано с риском потери данных в случае сбоя диска. или питание отключается. Это приемлемо, так как я сохраняю файлы на исходная машина достаточно длинна для повторной передачи в случае краткосрочных данных потеря

Если вы можете допустить потерю до 5 секунд записи, вы можете просто настроить ZFS на игнорировать синхронизировать запросы командой zfs set sync=disabled tank

Заставить все записи проходить через SLOG, даже очень быстрый, никогда быстрее, чем обход запросов синхронизации. SLOG — это не классический кеш с обратной записью, который поглощает записи для их перевода на более медленный уровень. Скорее, это способ обеспечить постоянство с низкой задержкой путем временного хранения синхронизируемой записи (и Только их) в промежуточной быстрой памяти. Через несколько секунд те же записи будут перенесены из основной памяти в основной пул. SLOG никогда не читается, пока не произойдет сбой (и восстановление).

Тем не менее, с одним зеркальным vdev на основе жесткого диска вы никогда не сможете насытить канал 10 Гбит/с. Для последовательной записи со скоростью ~ 1 ГБ/с вам нужно по меньшей мере 10 HDD в raidz2 или 12+ HDD в зеркале+страйпинг. Или, что еще лучше, вам нужен пул, состоящий только из твердотельных накопителей. Это еще до того, как рассматривать вещи как рекордный размер, компрессия, и т.д.

РЕДАКТИРОВАТЬ, чтобы уточнить задания SLOG:

Чтобы свести к минимуму задержку для синхронных записей, ZFS использовала так называемый журнал намерений ZFS (ZIL). Вкратце: каждый раз, когда поступает синхронизирующая запись, ZFS немедленно записывает их во временную область пула, называемую ZIL. Это позволяет записям немедленно возвращаться, позволяя вызывающему приложению продолжать работу. Через несколько секунд при фиксации транзакции любые записи, записанные в ZIL, отправляются в основной пул. Это делает нет означает, что ZIL читается при каждой фиксации; скорее, данные для записи поступают из основного кэша DRAM ARC. Другими словами, ZIL — это своего рода «журнал с опережением», который обеспечивает быстрое сохранение данных для записываемых данных синхронизации.

На самом деле это означает, что записи синхронизации дублируются: они записываются обе на ЗИЛ и основной пул. Введите SLOG (отдельное лог-устройство): устройство, предназначенное для синхронизация только пишет - т.е. освобождает основной пул от ZIL-трафика. Быстрый SSD SLOG важен из-за того, что жесткие диски очень медленны для синхронной записи. SLOG не является классическим кэшем с обратной записью, потому что:

  • он поглощает только синхронные записи, полностью игнорируя обычные записи;
  • он реплицирует только те данные, которые уже кэшировано в ARC.

Объединение двух пунктов означает, что большой SLOG в основном расточительный, потому что для него требуется только 3-кратный максимальный размер транзакции ZFS. Другими словами, SLOG объемом 2-4 ГБ достаточно для большинства случаев, а больший SLOG полезен только в определенных конфигурациях.

Такой SLOG является ключом к обеспечению более низкой задержки для случайных записей синхронизации, но, хотя он может поглощать очень небольшие всплески последовательных записей синхронизации, это не его основная функция. Другими словами, вы можете видеть ZIL/SLOG как постоянный фрагмент ARC. Следствием этого является то, что вы не можете рассчитывать на запись десятков ГБ и сокрытие низкой скорости основного пула через SLOG, потому что это означает, что у вас уже есть десятки ГБ грязных данных. внутри вашего ARC на основе оперативной памяти.

Параметр синхронизация = отключена указать ZFS угрожать всем операциям записи, даже синхронным, как при обычной асинхронной записи. Это позволит обойти любые данные ZIL/SLOG и если вы можете принять окно потери данных 5 с, это самая быстрая настройка, которую вы когда-либо могли бы достичь - даже по сравнению с очень быстрым SLOG, таким как Optane или RAMdrive. Хорошая вещь о синхронизация = отключена заключается в том, что он не отключает синхронную запись для собственных метаданных ZFS и, таким образом, не подвергает риску вашу файловую систему. Это не означает, что вы можете использовать его легкомысленно: как неоднократно говорилось, вы должны быть уверены, что понимаете его последствия (вы можете потерять последние секунды несинхронизированных данных в случае сбоя/отключения питания).

С другой стороны, классический кэш обратной записи на основе SSD, как lvmcache и bcache могут (более или менее) эффективно использовать сотни ГБ кэш-памяти SSD для маскировки задержки/пропускной способности основного пула, особенно потому, что они находятся полноценные кэши с обратной записью, которым не нужно, чтобы их данные находились внутри основной памяти (наоборот, основная память смывается через эти кэши SSD).

Причина использования ZFS заключалась в том, что (большая) основная системная память — это ваш реальный кеш чтения/записи, а SLOG — это средство для уменьшения задержки для случайных синхронных записей.

djdomi avatar
флаг za
или просто добавьте SATA-SSD для кэширования около 500 МБ/с или NVME для 1 ГБ/с++++++++
shodanshok avatar
флаг ca
@djdomi нет, как объяснялось выше, диск SLOG ** не ** является кэш-диском с обратной записью. Для того, что вы предлагаете, следует использовать lvmcache или bcache без участия ZFS.
djdomi avatar
флаг za
нет, но Зил может это сделать
shodanshok avatar
флаг ca
@djdomi снова, нет: ZIL - это журнал намерений ZFS, а SLOG - это просто устройство, предназначенное для выполнения обязанностей ZIL (а не использующее основной пул).
djdomi avatar
флаг za
как бы он ни назывался, на Zfs изначально существует кеш записи, и это все еще факт, и для него можно использовать ssd
shodanshok avatar
флаг ca
@djdomi хорошо, я предлагаю вам прочитать документацию. Например: https://www.servethehome.com/what-is-the-zfs-zil-slog-and-what-makes-a-good-one/
флаг pf
Эта цепочка комментариев именно о том, почему я задаю вопрос, поскольку я продолжаю находить противоречивую информацию, и руководство, которое я прочитал, требует точного понимания ожидаемых преимуществ в моем случае. Я был бы рад, если бы путаница могла быть прояснена.
shodanshok avatar
флаг ca
@ЭмилиЛ. Я обновил свой ответ, посмотрите.
флаг pf
Я никогда не говорил, что у меня есть пул raidz, мой пул состоит из одного рейд1 vdev. Мне не нужна последовательная запись 10Gbps, мне нужно 10Gbps для 40GiB. Мой пул составляет 20T с двумя дисками, получение такой емкости с SSD выходит за рамки бюджета.
shodanshok avatar
флаг ca
У вас есть (значительно больше) 40 ГБ ОЗУ? Если это так, вы можете (от)настроить ZFS, заставив ее хранить много ГБ данных в кэше ARC в течение длительного времени, но это было бы ужасно как с точки зрения безопасности данных, так и с точки зрения производительности (вы будете страдать от *минутных* зависаний). когда ZFS, наконец, решит сбросить грязные страницы в постоянное хранилище). Для такой нагрузки ZFS не лучший выбор, и raidz vs зеркало ничего не меняет. Я бы предпочел попробовать `lvmcache` в режиме обратной записи, но в этом случае имейте в виду, что сбой устройства кэширования приведет к потере данных (другими словами: вам необходимо зеркалировать устройства кэширования).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.