LINUX.ORG.RU
ФорумAdmin

Как правильно настроить ZFS и избавиться от тормозов

 


1

3

Всем привет! Я долго сопротивлялся, думая что «и так сойдет», но момент настал. Я в целом рандомный эникейщик, но дёрнуло меня собрать сервер для знакомых видеомонтажников на убунте. Делал это всё я первый раз, ранее с linux дел не имел, но было интересно. Сервер на Xeon v4 камне, 20 ядер. вполне приличный, как мне кажется, камушек. 256ГБ ДДР4 памяти. И вот им нужен объем и чтобы быстро по 10G Ethernet тудой-сюдой собирать проект на TV. Файлы все в основном большого размера, ну как… камера мотор… стоп снято. несколько секунд-минут видоса. Внутри сервака стоят 8 по 16ТБ SAS хардов. подключены к SAS-контрольке(по-моему 6G), но в ней не было RAID-уровней кроме 0 и 1(или вообще только 1), поэтому диски пришлось инициализировать каждый по одному и потом в убунте из них создать ZFS-пул. Создано, чтение-запись. всё хорошо. для кэша я в ZFS поменял ARC 1 уровня до 200 гигов. и поставил 5 ssd самсунг pm893 960gb в l2arc. вышло почти 5тб. Их я объединил в программный рэйд0 и создал в пуле соответствующую запись. кэш Online, всё хорошо. Насколько оно попадает в тот или иной кэш мне неизвестно, потому что мне сходу было тяжело разобраться в записях и прочитать их осмысленно. но прирост скорости монтажники почувствовали, на этом я и успокоился. Чуть позже к серваку приросла дисковая полка на 24 диска по 16ТБ, полка SAS, диски все SAS, но и тут гладко не вышло. диски покупались в 2 захода. получилось что первая партия на 144тб с 4К форматом, а остальные без него(не смогли найти идентичных в продаже). LSI MR9286CV-8e отказался создавать всех в один raid6. в итоге вышло как вышло. 144тб и 208тб и в убунте объединены во второй ZFS пул. этот пул - долговременное хранилище. архив, можно сказать. с него читают чтобы выкачать по FTP через файлзиллу и в общем то всё. основной движ в офисе происходит с тех 8 дисков, что стоят напрямую в серваке.

С предысторией я закончил. теперь к сути: когда сервер работает довольно долго (ну, положим… 20 дней), то начинаются какие то сложности со скоростью доступа. Свежезагруженный убунт дает по 10г сети скорость чтения/записи порядка 800 МБ/с через встроенную в davinci resolve прогу-бенчмарк диска. и всем это нравится. монтируется афигенно быстро, сразу 2-3-4 машины используют этот сервак и короче счастье. А вот по прошествии какого то времени начинаются странные странности. то падает чтение, а запись норм. то наоборот. то перестают подгружаться данные в проект. он их видит, но в давинчи передавать отказывает и висит-висит… вчера вот не удалось монтировать монтаж на одной из машин. проект видно, данные по самбе читаются и записываются, с авторизацией проблемы нет, а монтаж просто прекращается не начавшись. проверили что монтаж работает локалФС - локалФС, и локалФС - сервер(но не в обратную сторону).

Короче, я решил спросить совета у тех кто съел собак на тему ZFS. Понятно, что там и сям какие то костыли, и вообще нужно бы всё переделать, поменять IBM serveraid m5110 на что-то с лицензией raid5 и вообще чтобы 12G было. но в момент сборки сервера это прям был мега-ограниченный бюджет, поэтому и собирал это тип(я), которому было по фану, а не спец, которому нужно было многоденег(наверняка). И вот теперь это некий ворох проблем, которые нужно планомерно порешать. С чего начать, где и какими командами изменять параметры ZFS пула для оптимального использования с большими файлами? или лучший вариант это ребут сервера по расписанию? (так вообще кто-то делает или это дичь?)



Последнее исправление: starghost1100 (всего исправлений: 2)
Ответ на: комментарий от Dimez

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

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

да, я прочитал что партишны создавать не обязательно и не создавал на ссд. а вот на массивах данных наверное создал, потому что читал до применения l2arc, где прочитал, что создавать не обязательно.

starghost1100
() автор топика
Ответ на: комментарий от starghost1100

Вот гляжу я на твою конфигурацию пула, и как-то меня начинают терзать сомнения, что тебе нужны такие страйпы. RAID0 на 8 дисков - это рискованно )
RAID_BACKUP который вышел, как я понял, недо-RAID60 тоже решение по-моему хреновое.

первая партия
а остальные

Сколько и каких там дисков?

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

короче задумка такая: 8 дисков (Seagate Exos 16TB, как и прочие. разные только модели и интерфейсы) в raid0(средствами ZFS) - быстрые рабочие терабайты. там лежат проекты в работе. если сломается - есть RAID_BACKUP с исходниками. Да, какая то работа будет потеряна. но в видеопроизводстве самое страшное это потерять отснятые исходники(это ж заново декорации, актеры… ну вы поняли). А они будут на RAID_BACKUP. Который состоит из двух массивов на 144тб и… 108ТБ, каждый из этих двух массивов этот RAID6 на аппаратном уровне, средствами LSI. Которые затем объединены в RAID_BACKUP средствами ZFS(ну получается да, 6+0, но части неравные). И есть еще одна полка, на которую я планирую на днях начать копирование RAID_BACKUP. Там просто 24 диска по 16тб, все одинаковые саташки Seagate Exos x16(или 18, не суть). они просто в аппаратном raid0, осталось только примонтировать и создать раздел. Вот она типа raid1 с RAID_BACKUP. но не аппаратно, а средствами какой то софтины, копирующей и сверяющей данные по расписанию. И вроде бы это суммарно надежно, хоть местами и костыльно (можно сказать… васянно?)

starghost1100
() автор топика
Ответ на: комментарий от starghost1100

чуть соврал. диски в первой полке это WD Ultrastar WUH721816AL5204 и WUH721816AL4204(эти с прошивкой YADRO и 4К форматом), купил на авито новые у чувака в Строгино. и потом больше нигде ***4204 не нашел, как не искал. только сильно б/у. а что в самом серваке… да скорее всего тоже SAS WD Ultrastar. сигейты только в последней полке целиком одинаковые и уже SATA/

starghost1100
() автор топика
Ответ на: комментарий от starghost1100

Я больше интересовался количеством дисков и их объёмом, чтобы понять, как лучше их загонять в массивы. Потому что 24 диска это или (4+2)*4, или (8+2)*2+4 или уж (8+3)*2+2. Так, чтобы загнать всё в один рейд, не рекомендуют. А с двумя vdev'ами производительность будет всё же получше.

но не аппаратно, а средствами какой то софтины, копирующей и сверяющей данные по расписанию

Я подобное поведение делаю просто перекидывая снапшоты.

есть еще одна полка

Ну вот её уже надо тогда завести нормально, с контроллерами в HBA, нормально прокинутыми дисками, которые загонять в ZFS по /dev/disk/by-path/
А потом так же переделать рабочий массив. Сначала без кеша.

GAMer ★★★★★
()
Ответ на: комментарий от GAMer

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

Потому что 24 диска это или (4+2)*4, или (8+2)*2+4 или уж (8+3)*2+2. Так, чтобы загнать всё в один рейд, не рекомендуют. А с двумя vdev’ами производительность будет всё же получше.

с точки зрения надежности не рекомендуют? ну 2 диска разом то не помрут ведь? вероятность низкая, как мне кажется. а производительности от этой полки мы не ждем. как и от первой полки. быстро с кэшем должны молотить только 8 дисков внутри сервера.

Я подобное поведение делаю просто перекидывая снапшоты.

а вот тут максимально подробно, пожалуйста. так как это задача этой недели, а я не понимаю правильно ли я придумал это делать rsync-ом или есть что-то удобнее. с понятием «снапшот» знаком мало. не понимаю как это работает и почему так называется.

starghost1100
() автор топика
Ответ на: комментарий от starghost1100

а вот тут максимально подробно
rsync-ом или есть что-то удобнее

Снапшот - снимок ФС, его можно скидывать в файл, можно перебрасывать на другой сервер, в другой пул, получая копию оригинальной ФС. Можно скидывать только «диффы».
Dimez пример скинул уже, у меня ситуация такая: масштабы конечно поменьше сабжевых, только зеркала. Рабочие нагрузки на SSD, снапшоты скидываю на пул на жёстких дисках и на бэкап-сервер по ssh.
https://docs.oracle.com/cd/E19253-01/820-0836/gbchx/index.html

пока первая претерпевает изменения

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

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

GAMer ★★★★★
()
Ответ на: комментарий от Dimez

как разовая акция, как будто бы здорово. чтобы перенести первую полку на вторую. но для ежедневного или еженедельного обновления данных без моего участия сразу не подходит. это либо писать скрипт, чего я не умею, либо ставить себе будильник на раз в неделю и тратить время на ручные инкрементальные снапшоты. Кроме того, перенос 300тб парализует работу офиса на неопределенный срок. До того как я написал на форум, я обдумывал возможность копирования данных с помощью rsync 1полка -> 2полка по одной папке за ночь, полагая что если запущу rsync на весь массив, то не смогу его(копирование) остановить. а по окончании попапочного копирования я смог бы запустить какую то автоматизацию для внесения ежесуточных изменений, которые легко умещались бы по времени в период неактивности. я не вчитывался в документацию rsync и просто хотел бы знать да/нет, умеет ли rsync всё что я хочу? можно ли задать n-команд, где у каждой будет свое расписание на каждую папку из массива и на массив целиком?

starghost1100
() автор топика
Ответ на: комментарий от GAMer

снапшот есть тот же набор данных или это файл/архив.что-то, который содержит данные? в моей голове, когда я думаю о слове снапшот, рисуется именно файл резервной копии, как например это делает time machine в macOS. и я бы не хотел чтобы так было. чтобы при необходимости можно было расшарить в фтп папку как на первой полке, так и на второй.

потом потрогать с кешем l2arc_noprefetch

Да, мне попадалось где-то, что можно включить или выключить вот эту штуку и это может помочь. Винты да, они упираются в 10г сеть, но возможно у меня низкие попадания в кэш и поэтому задержки на поиск данных на HDD высокие. Кстати об этом: я прочитал, что в l2arc попадает все что вываливается за пределы ARC. при заполнении arc он там как то сам удаляет то, что по его мнению уже старое и дополняет новыми данными в arc, а потом передает в l2arc. Существует ли вероятность, что какие то данные при заполнении arc не попадают в него, а значит не могут попасть в l2arc, так как это задокументировано в принципах работы 1-2 уровня кэшей. И, например, увеличение ОЗУ до 512 ГБ помогло бы собирать как больше кэша в озу, так и лучше передавать их потом в l2arc? например: у меня 200гб кэша. кэш заполнился на 199гб. место как бы есть, а я хочу положить в кэш еще 5гб или 10гб сразу. и он такой «место есть, парень. клади». а его недостаточно для того чтобы положить нужного размера файл и кэш останавливается «до выяснения обстоятельств»? или за годы доработок кэш не допускает таких тупых ошибок и при необходимости выгружает ровно столько старых данных, чтобы положить в кэш столько же новых? было бы здорово очищать кэш командой, но я не нашел как. вероятно, такой команды нет.

starghost1100
() автор топика
Ответ на: комментарий от starghost1100

Но что мне мешает пытаться, спрашивать совета, учиться?

В принципе ничего не мешает. Покурите мануалы, потом логи. Вероятно, сможете найти корень проблемы. С наскоку, вряд ли сможете решить, потому пока соорудите костыль, например предложенную Вами периодическую перезагрузку. А курить мануалы, раз уж у Вас уже используется ZFS, и Вы уверены, что проблема именно в её работе, начните отсюда.

QsUPt7S ★★
()
Ответ на: комментарий от starghost1100

если я загуглю journalctl , то мне там расскажут

Гуглить совершенно необязательно - в Unix-подобных ОС есть очень хорошая система документации. Для того, чтобы разобраться в управлении journalctl, введите в эмуляторе терминала man journalctl. Перед этим, советую ввести man man чтобы разобраться как пользоваться документацией в подсистеме man-pages. Если чего-то нет в системе man-pages, то оно наверняка найдётся в подсистеме GNU Texinfo. Доступ к справке в последней осуществляется с помощью команды info. Для того, чтобы узнать как пользоваться этой подсистемой, посмотрите мануалы man info и info info. Только если нужной информации в этих подсистемах нет, обращайтесь к гуглу. Во время гугления, советую обратить особое внимание на ArchWiki и Gentoo Wiki. В некоторых случаях, может подсказать направление ChatGPT, но он часто начинает галлюцинировать, если ответ ему неизвестен, сочиняя правдоподобную сказку, поэтому всегда следует перепроверять сказанное им.

QsUPt7S ★★
()
Ответ на: комментарий от starghost1100

снапшот есть тот же набор данных или это файл/архив.что-то, который содержит данные?

ZFS - CoW FS. Она не перезаписывает данные. Поэтому почти нахаляву и без штрафов к производительности мы можем сделать «снимок» ФС, запомнить её состояние, к которому, при желании, потом можно вернуться. ZFS изменения в ФС будет просто дописывать дальше. В этот снимок можно даже заглянуть наживую, в скрытую директорию - «cd .zfs». Этот снапшот - часть ФС, zfs list -t snap / -t all.
Через zfs send его можно послать как поток, который можно перенаправить в сеть, в файл, в /dev/null... А можно принять через zfs recv и направить в другой пул.
Поэтому можно иметь мгновенные «почти бэкапы» состояний ФС хоть раз в 5 минут.

GAMer ★★★★★
()
Ответ на: комментарий от starghost1100

я прочитал, что в l2arc попадает все что вываливается за пределы ARC

Инфа противоречива, видел на на гитхабе openzfs, говорят, что l2arc не arc, а просто LILO буфер на чтение...
В целом, кэшем я бы в твоём случае не заморачивался. Тест без него, тест с ним, а там будет видно.
Если сценарий работы подразумевает елозенье по 5ТБ твоих ССдшек, это одно, но видеомонтаж - этож он раз прочитался для превьюхи, и раз для рендера. Городить кэш для этого - перебор.

GAMer ★★★★★
()