[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Стратегия поддержания резервных копий. Деградация носителей.



*** Tim Sattarov <stimur@gmail.com> [2017-07-06 23:04]:
>это может быть я выдаю желаемое за действительное, но моё понимание
>было, что ZFS работает с JBOD на бэкенде и собирает массивы дисков, так
>же как LVM.

Что-то типа того.

>сейчас я вижу требование о равных размерах томов и пересборке vdev.

Не равных, а не меньших. И статья о том чтобы увеличить размер VDEV-а,
сделать expand. Если в VDEV-е два терабайтных диска, то один можно
заменить на 2TB, но размер VDEV останется всё-равно 1TB. Но если
второй диск заменить на 2, то только тогда VDEV станет равным 2TB. В
статье и говорится что нужно поочерёдно каждый диск в VDEV заменить на
большего размера и только тогда место станет доступно.

>делаю я ноду в AWS, скажем с четырьмя терабайтными дисками и страйпом.
>вопрос номер раз: как делать страйп ? все диски в один VDEV ? или лучше
>каждый диск в свой VDEV и потом его в страйп на уровне zpool ?

Pool это, грубо говоря, RAID0, stripe. Каждый VDEV это stripe элемент.
Поэтому сделать stripe можно только добавив каждый диск как отдельный
VDEV. Из коробки это собственно и делается проще всего:
zpool create mypool da0 da1 da2 da3 -- stripe из четырёх дисков.
Внутри VDEV-а можно сделать только mirror или raidz.

>Хочу ускорить доступ к данным и пользоваться ephemeral SSD, напрямую
>подсоединенному к хосту (супротив остальных дисков, которые HDD и вообще
>говоря сетевые). В силу эфемерности SSD диска, каждая холодная
>перезагрузка (power cycle) его обнуляет.
>Где хранится информация, что /dev/xvdf надо использовать как кэш ?
>на самом диске или вне его ?
>насколько просто и быстро добавить обнулённый диск, нужна ли какая то
>инициализация ?

РАз ускорить и использовать SSD, то это значит добавление cache диска,
L2ARC, в терминах ZFS. Вот насчёт таких кэшей не знаю точно, вряд ли тут
особенность, но в ZFS полностью вся конфигурация хранится на самих
дисках, на всех членах pool-а. Сам не делал, но думаю что после
перезагрузки zpool status скажет что один из дисков, который cache,
недоступен. По идее достаточно будет сделать zpool replace mypool
blablabla-diskid /dev/xvdv -- то есть сказать чтобы он заменил
отсутствующий диск. Раз это кэш, то никакого resilvering не надо и он
сразу должен быть в строю. Отсутствующий диск в зеркале или raidz
заменяется этой же командой, но для них уже делается resilvering,
который равносилен переносу всех полезных данных на новый диск.

>Когда я решу увеличить размер пула, можно ли просто добавить весь набор
>новых дисков ? То есть были 4 по терабайту, добавляю 4 по 2 ТБ и после
>синхронизации удаляю старые 1ТБ.

Да, это делается без проблем. Причём добавить их можно сразу все пачкой,
не дожидаясь resilvering-а на каждый по отдельности последовательно.
Одно но: zpool по-умолчанию имеет (в FreeBSD, по крайней мере)
zpool set autoexpand=off и после добавления дисков, zpool status покажет
в столбце EXPANDSZ размер до которого можно expand-ить pool. Expand,
судя по man, делается zpool online -e командой, но я, если честно, уже
забыл как точно, ибо делал один раз.

>Куда лучше добавлять, в существующий VDEV или создавать новый ? А если
>каждый диск был отдельным VDEV ?

Создать новый VDEV можно только добавив его в pool. А это равносильно
добавлению stripe диска. VDEV из pool-а невозможно "вытащить", так же
как и диск из RAID0! Если вы сделаете zpool add, то ни старый диск, ни
новый уже нельзя будет достать. Я так один раз (по незнанию) вместо
zpool attach сделал zpool add и пришлось zfs send-ом сбрасывать все
данные на третий диск и с нуля создавать массив, zfs recv-ом
восстанавливая данные. Тут только zpool attach-ем можно делать. Если
каждый диск был отдельным VDEV, то значит каждый новый диск добавить по
одному к своему VDEV-у. То есть должно получится 4 VDEV-а, как и прежде,
в каждом из которых по два диска. После resilvering-а, каждый старый
диск можно из каждого VDEV-а zpool detach-ем убрать.

zpool add -- добавление stripe VDEV-а
zpool create mypool da0 da1 -- создание mypool с stripe из двух дисков

zpool attach -- добавление зеркала в текущий vdev
zpool create mypool mirror da0 da1 mirror da2 da3 -- создание mypool с
    stripe из двух зеркал (da0+da1 и da2+da3)

zpool create mypool raidz1 da0 da1 da2 raidz2 da3 da4 da5 da6 mirror da7 da8 da9--
    создание mypool с stripe из трёх элементов: raidz1 с тремя дисками
    (0/1/2), с raidz2 с четыремя (3/4/5/6) и зеркалом из трёх дисков.

Добавлять VDEV в zpool можно и позже, когда угодно.

-- 
Sergey Matveev (http://www.stargrave.org/)
OpenPGP: CF60 E89A 5923 1E76 E263  6422 AE1A 8109 E498 57EF


Reply to: