4.4.3. Создание зеркальных томов

Примечание

Создание зеркального логического тома в кластере осуществляется по тем же правилам, что и на отдельном компьютере. Отличия состоят в том, что в кластере должна работать кластерная инфраструктура, кластер должен обладать кворумом, а тип блокирования в lvm.conf должен разрешать кластерное блокирование. Раздел 5.5, «Создание зеркального логического тома в кластере» содержит примеры создания зеркального тома в кластере.
Одновременные попытки выполнения команд создания и преобразования зеркал с разных компьютеров в кластере могут привести к их задержкам и сбоям. Поэтому команды создания зеркал рекомендуется выполнять с одного компьютера.
При создании зеркального тома необходимо указать число копий, для чего служит аргумент -m команды lvcreate. Так, -m1 создаст одно зеркало, то есть в файловой системе будет две копии — линейный логический том и его копия. Аналогичным образом, если указать -m2, будет создано два зеркала (всего три копии).
Ниже приведен пример создания тома mirrorlv размером 50 гигабайт с одним зеркалом. Пространство будет выделено из группы vg0.
lvcreate -L 50G -m1 -n mirrorlv vg0
Копируемое устройство разбивается на сегменты, размер которых по умолчанию составляет 512 килобайт. Аргумент -R команды lvcreate позволяет указать другой размер в мегабайтах, или его можно изменить напрямую с помощью параметра mirror_region_size в файле lvm.conf.

Примечание

В силу ограничений кластерной инфраструктуры, размер сегментов зеркала, размер которого превышает 1.5 ТБ, должен быть больше 512 МБ. В противном случае может нарушиться функциональность LVM.
Размер сегмента рассчитывается так: размер зеркала в терабайтах округляется до следующего значения, кратного 2. Так, например, для зеркала размером 1.5 ТБ можно указать -R 2, для 3 ТБ — -R 4, для 5 ТБ — -R 8.
Следующая команда создаст зеркальный том с сегментами размером 2 МБ:
lvcreate -m1 -L 2T -R 2 -n mirror vol_group
LVM поддерживает краткий журнал синхронизации сегментов с зеркалами. По умолчанию журнал хранится на диске и сохраняется между перезагрузками. Если же требуется, чтобы журнал находился в памяти, используйте аргумент --corelog. Это отменяет необходимость в устройстве журналирования, но в то же время требует полной синхронизации зеркала при каждой перезагрузке.
Ниже будет создан логический том ondiskmirvol с одним зеркалом в группе bigvg. Размер тома равен 12 МБ, а журнал зеркала хранится в памяти.
# lvcreate -L 12MB -m1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
Журнал зеркала будет создан на отдельном устройстве. Возможно создание журнала на том же устройстве, где расположена секция зеркала, — для этого служит аргумент --alloc anywhere команды vgcreate. Это может отрицательно сказаться на производительности, но позволит создать зеркало даже при наличии всего двух устройств.
Ниже приведен пример создания тома mirrorlv размером 50 МБ с одним зеркалом на основе группы томов vg0. При этом журнал зеркала расположен на том же устройстве, что и составляющая зеркала. Группа томов vg0 состоит из двух устройств.
lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0

Примечание

В кластерном окружении управление журналами зеркал осуществляется компьютером с наименьшим кластерным идентификатором. Если отдельные узлы кластера потеряли доступ к устройству, где хранится журнал, функциональность зеркала не нарушится при условии, что журнал доступен компьютеру с наименьшим идентификатором. Но если компьютер с наименьшим идентификатором потеряет доступ к журналу, процедура восстановления начнется, даже если журнал доступен с других узлов.
Для создания зеркала журнала служит аргумент --mirrorlog mirrored. Приведенная ниже команда создаст том twologvol с одним зеркалом в группе bigvg. Размер тома равен 12 МБ, а журналы зеркал хранятся на отдельных устройствах.
# lvcreate -L 12MB -m1 --mirrorlog mirrored -n twologvol bigvg
  Logical volume "twologvol" created
Параметр --alloc anywhere позволяет хранить копии журнала на том же устройстве, где расположено звено зеркала. Как уже упоминалось, это может отрицательно сказаться на производительности, но позволит создать дополнительный журнал, даже если общее число журналов превышает число физических дисков.
Составляющие зеркала синхронизируются в момент его создания. В зависимости от их размера процесс синхронизации может занять некоторое время. Если создается новое зеркало, синхронизация которого необязательна, можно добавить параметр nosync.
Можно явно указать, на каких устройствах будут располагаться журналы, и какие экстенты будут заняты зеркалом. Чтобы разместить журнал на конкретном диске, укажите всего ОДИН экстент на этом диске. LVM игнорирует порядок, в котором перечислены устройства. Если в списке присутствуют физические устройства, они и будут использоваться для выделения пространства; занятые физические экстенты будут пропущены.
Далее приведен пример создания зеркального тома mirrorlv размером 500 МБ с одним зеркалом и одним журналом. Том будет создан в группе vg0. Одна часть зеркала будет располагаться на устройстве /dev/sda1, вторая — на /dev/sdb1, а журнал будет храниться на /dev/sdc1.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1
Следующая команда создаст том mirrorlv размером 500 МБ с одним зеркалом. Том будет создан в составе группы vg0. Одна часть зеркала будет занимать экстенты 0 — 499 на /dev/sda1, вторая — экстенты 0 — 499 на /dev/sdb1, а журнал будет храниться на /dev/sdc1, начиная с нулевого экстента. Размер экстента равен 1 МБ. Если указанные экстенты уже заняты, они будут пропущены.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0

Примечание

Начиная с Red Hat Enterprise Linux 6.1, допускается объединять массивы RAID0 и RAID1 в один логический том. Если при создании логического тома указано число зеркал (--mirrors X) и число секций (--stripes Y), будет создано зеркальное устройство с чередующимися составляющими.

4.4.3.1. Правила работы при сбое зеркального тома

Поведение зеркального тома в случае сбоя устройства можно определить с помощью параметров mirror_image_fault_policy и mirror_log_fault_policy в секции activation файла lvm.conf. Если этим параметрам присвоено значение remove, неисправные устройства будут исключены из системы. Значение allocate означает, что после исключения устройства будет предпринята попытка выделения пространства на другом устройстве. Если пространство выделить не удалось, allocate работает так же как remove.
По умолчанию mirror_log_fault_policy имеет значение allocate, то есть синхронизация поддерживается между перезагрузками и в случае сбоя. Если задан режим remove, то в случае сбоя устройства, где хранится журнал, зеркало будет поддерживать журнал в памяти без сохранения его между перезагрузками. Как следствие, после сбоя зеркало надо будет синхронизировать полностью.
По умолчанию mirror_image_fault_policy имеет значение remove, то есть если после сбоя звена зеркала осталась только одна копия, зеркало будет преобразовано в другой тип. allocate приводит к повторной синхронизации устройств с сохранением характеристик зеркала, что может занять некоторое время.

Примечание

При выходе из строя устройства в составе зеркала начнется процесс восстановления. Сначала проблемные устройства будут исключены, что может привести к тому, что зеркало превратится в обычное линейное устройство. Далее начнется замена этих устройств при условии, что параметр mirror_log_fault_policy имеет значение allocate. Однако нет гарантий, что на втором этапе не будут выбраны устройства, которые раньше служили причиной сбоя зеркала.
Раздел 6.3, «Восстановление после сбоя зеркала» содержит дальнейшую информацию о восстановлении зеркал вручную.