Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу).
Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Homepage Карта сайта Версия для печати

Джентльменский набор Web-разработчика   Ларри Уолл о Perl6   Наблы Система Orphus
 

62. Настраиваем RAID1+LVM (для снапшотов файловой системы) в Hetzner и ServerLoft

[11 августа 2013 г.] обсудить статью в форуме

Завалялась у меня тут инструкция, как включить LVM для корневой файловой системы на двух популярных dedicated-хостингах: Hetzner и ServerLoft. Публикую ее здесь.

LVM в Linux используется, в частности, чтобы единомоментно создавать "замороженные" снапшоты файловой системы, которые можно потом спокойно бэкапить, в то время как сервер продолжает работать. Это очень удобная функция, особенно для серверов баз данных: можно делать инкрементный бэкап базы данных, например, при помощи файлового rdiff-backup или duplicity (в том числе на удаленный FTP-сервер, бесплатное и быстрое место на котором предоставляют многие хостеры). Что касается RAID-1 (зеркалирование на 2 дисках), то оно абсолютно необходимо на сервере, чтобы при выходе из строя одного из дисков его можно было заменить, не останавливая машину. Конечно же, нужно ставить LVM поверх RAID-1.

Но беда в том, что ни Hetzner, ни ServerLoft не позволяют включить LVM при первичном создании машины "при помощи одной лишь мышки". Вместо этого они дают возможность установить один из фиксированных образов ОС, максимум что - с включенным RAID-1. Ниже - две инструкции, как переключить такую "налитую" машину на использование LVM для корневой файловой системы, а потом - короткий пример того, как работать со снапшотами. Работать будем с Ubuntu Server 12.04 minimal (для других ОС конфигурация может отличаться).

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

Включаем LVM на машине в Hetzner

Ниже предполагается, что вам нужно только 220G на диске (всего LVM-том содержит 300G, но оставшееся место нам потребуется для создания снапшотов). Если диск больше, но вам совершенно не нужно лишнее место, лучше оставить меньшее значение - это ускоряет перестроение RAID-1 в случае аварий.

  1. Select OS type "recover" when you install a new machine.
  2. Login via SSH and run "installimage" command (just type "installimage" and press Enter).
  3. Select Ubuntu-1204-precise-64-minimal.
  4. Enter the following configuration in the opened editor:

    Листинг 1
    DRIVE1 /dev/sda
    DRIVE2 /dev/sdb
    SWRAID 1
    SWRAIDLEVEL 1
    BOOTLOADER grub
    HOSTNAME newhost
    PART /boot  ext2     512M
    PART lvm    vg0      300G
    # We use only 300G of our large HDD to speedup RAID1 rebuild if it happens.
    # Anyway, we do not need so much space typically, so 300G is enough.
    LV vg0  swap  swap  swap      4G
    LV vg0  tmp   /tmp  reiserfs  10G
    LV vg0  root  /     ext3      220G
    IMAGE /root/.oldroot/nfs/install/../images/Ubuntu-1204-precise-64-minimal.tar.gz

  5. Press F2, then F10 and wait until the installation is finished.

Включаем LVM на машине в ServerLoft

В ServerLoft нет такой богатой утилиты конфигурирования, как Hetzner-овский installimage, а также lvm2 не включен по умолчанию в список пакетов, поэтому инструкция получается сложнее. Немало крови было пролито на ее составление. Ниже мы создаем LVM-том размером 80% от свободного места на диске, оставляя 20% для поддержки снапшота. Скрипт работает правильно как для software RAID, так и для hardware RAID (да, некоторые конфигурации в ServerLoft имеют hardware RAID — я бы не рекомендовал такие брать из-за ухудшения прозрачности, конечно, но они встречаются).

  1. Note that the following configuration works on ServerLoft hardware RAID controllers too.
  2. Select OS type "Ubuntu 12.04 Minimal, software RAID1" at https://my.serverloft.com/en/Dedicated/Restore
  3. Wait until RAID-1 is fully rebuilt, else strange problems during the next boot may occure. Monitor the rebuilding process running: "watch cat /proc/mdstat".
  4. Enter the recovery mode after the installation is finished at https://my.serverloft.com/en/Dedicated/Recovery/Index
  5. Run the following commands to prepare partitions:

    Листинг 2
    if mdadm -A --scan || [ -e /dev/md0 -a -e /dev/md2 ]; then
      export DEV_BOOT=/dev/md0
      export DEV_LARGE=/dev/md2
    else
      export DEV_BOOT=/dev/sda2
      export DEV_LARGE=/dev/sda4
    fi
    mount $DEV_LARGE /mnt
      mkdir /rootcopy
      if [ -d /mnt/rootcopy ]; then
        echo "Please enter the recovery mode before running this script."
        rmdir /rootcopy; sleep 5; exit
      fi
      cp -a /mnt/* /rootcopy
      umount $DEV_LARGE
    pvcreate $DEV_LARGE
      vgcreate vg0 $DEV_LARGE
      lvcreate --name tmp  --size 10G vg0
      lvcreate --name root -l 80%FREE vg0
      mkfs.ext3 /dev/mapper/vg0-tmp
      mkfs.ext3 /dev/mapper/vg0-root
    mount /dev/mapper/vg0-root /mnt
      cp -a /rootcopy/* /mnt
      mount $DEV_BOOT /mnt/boot
        mount -o bind /dev /mnt/dev
        mount -o bind /dev/pts /mnt/dev/pts
        mount -t proc none /mnt/proc
        mount -t sysfs none /mnt/sys
        mount -o bind /run /mnt/run
        perl -p -i -e 's{^[^\s#]+\s+/\s+\S+}{/dev/mapper/vg0-root / ext3}s' /mnt/etc/fstab
        echo "/dev/mapper/vg0-tmp  /tmp  ext3  defaults,noatime 0 4" >> /mnt/etc/fstab
        chroot /mnt apt-get install lvm2 --yes
        chroot /mnt update-grub
        [ -e /dev/sda ] && chroot /mnt grub-install /dev/sda
        [ -e /dev/sdb ] && chroot /mnt grub-install /dev/sdb
        umount /mnt/run
        umount /mnt/sys
        umount /mnt/proc
        umount /mnt/dev/pts
        umount /mnt/dev
        umount /mnt/boot
      umount /mnt

  6. Reboot the server, then in 30 seconds - stop the recovery mode at https://my.serverloft.com/en/Dedicated/Recovery/Index (maybe reboot twice if the first reboot have not succeeded).

Пример, как пользоваться снапшотами

Собственно, имея настроенный LVM, можно делать вот такую магию:

# На случай, если в прошлый раз забыли отмонтировать, отмонтируем сейчас.
lvremove -f /dev/vg0/snap 2>/dev/null
# Создаем новый снапшот (40G - это макс. объем, который может быть записан в корневую
# файловую систему, пока снапшот активен). Потом монтируем его для использования.
lvcreate -L40G -s -n snap /dev/vg0/root
mount /dev/vg0/snap /mnt -o ro
# Дальше спокойно делаете бэкап /mnt/* - там будет "замороженное" состояние корневой файловой системы.
duplicity ... /mnt ...
# Отмонтируем и удаляем снапшот.
umount /mnt
lvremove -f /dev/vg0/snap

Памятка тому, кто использует OpenVZ

По умолчанию в OpenVZ-ядрах не включена поддержка LVM - точнее, Device Mapper-а (в /boot/initrd* отсутствует dm-mod в conf/modules). Если вы хотите потом использовать OpenVZ поверх LVM, можно запустить вот такой скрипт для добавления в существующий initrd модуля dm-mod (распаковали-добавили-запаковали), а также превращения OpenVZ в ядро по умолчанию. Вероятно, есть и более простой способ, но я приведу тот, который когда-то использовал:

Листинг 3
FILE=`ls /boot/initrd.img-*stab* 2>/dev/null | head -n 1`
if [ "$FILE" == "" ]; then
  echo Cannot find an OpenVZ initrd in /boot. Aborting.
  exit 1
fi
rm -rf /tmp/initrd* 2>/dev/null
mkdir /tmp/initrd
cd /tmp/initrd
zcat $FILE | cpio -i
if ! grep "dm-mod" conf/modules >/dev/null; then
  echo dm-mod >> conf/modules
  find ./ | cpio -H newc -o | gzip > /tmp/initrd-new
  cat /tmp/initrd-new > $FILE
fi
cd /
rm -rf /tmp/initrd*
sed -i '
  s/GRUB_DEFAULT=.*/GRUB_DEFAULT=1/;
  s/#GRUB_DISABLE_RECOVERY=.*/GRUB_DISABLE_RECOVERY=true/;
  s/GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX="selinux=no"/;
' /etc/default/grub
update-grub

обсудить статью в форуме

 
Рекламный блок
   

На странице:
    62. Настраиваем RAID1+LVM (для снапшотов файловой системы) в Hetzner и ServerLoft
Включаем LVM на машине в Hetzner
Включаем LVM на машине в ServerLoft
Пример, как пользоваться снапшотами
Памятка тому, кто использует OpenVZ

Важное объявление:
    автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apache действительно объясняет такое решение.

Орфография на «Куроводстве»:
    если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите — настолько быстро все произойдет.

На заметку:
    если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.

Параметры этой страницы
   
GZip

Ссылки от спонсоров
    Отзывы о wix обсуждение сайта и отзывы.


Дмитрий Котеров | 11 августа 2013 г. ©1999-2016 | Генеральный спонсор: Хостинг «Джино» | Контакт Вернуться к оглавлению