четверг, 15 ноября 2012 г.

Бюджетный Proxmox 2.2 (ProxmoxVE 2.2 SoftRaid)

Возникла новая задачка, и опять связанная с виртуализаций:
- Сделать платформу под виртуальные машинки для 1С и еще парочки сервисов.
- Минимизировать стоимость покупаемого железа (никакой кластеризации и выделенного хранилища)

Такая вот задачка. Долгие переговоры с заказчиком привели к тому, что была выбрана следующая конфигурация:
- сервер изначально двухголовый в начале с одним процом
- память с 8 гигами
- диски бьются на два стора - одно зеркало на sata винтах, одно на ssd
На ssd положим базу 1с для разгона

Странный монстр получился, если честно.
Думал вначале самостоятельно все настроить на основе CentOS, но пришлось передумать. Во-первых геморойно (или лень), во-вторых хотелось, чтобы они смоги самостоятельно сделать бэкап или рестарт виртуалки. Так что возвращаемся к Proxmox.

Raid у нас отсутствует, будем делать софтовый. Вот тут и кроется загвоздка - Proxmox не поддерживает установку на зеркало, и отказывает в поддержке таким любителям как мы. Будем делать сами.
Читаем google и видим большое количество статей на эту тему, иногда даже русскоязычных. Но дьявол в деталях и ни по одной инструкции не получилось получить работоспособную систему. Поэтому представляю вариант переведенной статьи по которой все просто и успешно встало на свои места.



1. Подготовка
Берем установочный диск ProxmoxVE с оф сайта, пишем на cd или, с помошью dd копируем на флешку.
Запускаем установку на первый диск (sda) и ждем завершения.
2. Создание зеркала для первого диска

Для начала обновляемся
apt-get update
apt-get upgrade

Если встало новое ядро, тогда reboot
Доставляем mdadm
apt-get install mdadm

Подгружаем модуль ядра для работы рейда
modprobe raid1

Копируем структуру разделов на второй винт
sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Соглашаемся со всем и правим описание разделов под наш raid
fdisk /dev/sdb
Далее: t - 1 - fd - t - 2 - fd - w
Этим мы говорим, что разделы на втором винте созданы для Linux RAID

Создаем два зеркальных тома:
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
В нем отстутсвует одно устройство, поэтому и missing

Переписываем конфиг mdadm
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Делаем lvscan
Видим что-то наподобие
root@proxmox:~# lvscan
ACTIVE '/dev/pve/swap' [15.00 GiB] inherit
ACTIVE '/dev/pve/root' [96.00 GiB] inherit
ACTIVE '/dev/pve/data' [804.02 GiB] inherit

Запоминаем цифры размеров и далее Начинаем создавать lvm на втором диске, точнее на raid устройстве.
pvcreate /dev/md1
vgcreate pve1 /dev/md1
lvcreate --name swap --size 15G pve1
lvcreate --name root --size 96G pve1
lvcreate --name data --size 804G pve1
Внимательно выполняйте команды, не забыв заменить размеры логических томов на те, которые вы получили на предыдущем шаге. Для тома data главное, чтобы он не оказался меньше оригинального.

Проверяем
lvscan
ACTIVE '/dev/pve/swap' [15.00 GiB] inherit
ACTIVE '/dev/pve/root' [96.00 GiB] inherit
ACTIVE '/dev/pve/data' [804.02 GiB] inherit
ACTIVE '/dev/pve1/swap' [15.00 GiB] inherit
ACTIVE '/dev/pve1/root' [96.00 GiB] inherit
ACTIVE '/dev/pve1/data' [804.00 GiB] inherit

Все ровно и красиво, создаем файловую систему:
mkfs.ext4 /dev/md0
mkswap /dev/pve1/swap -f
mkfs.ext4 /dev/pve1/root
mkfs.ext4 /dev/pve1/data

Смонтируем для последующего копирования
mkdir /mnt/boot
mkdir /mnt/root
mkdir /mnt/data
mount /dev/md0 /mnt/boot
mount /dev/pve1/root /mnt/root
mount /dev/pve1/data /mnt/data

Редактируем fstab
vi /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve1/root / ext4 errors=remount-ro 0 1
/dev/pve1/data /var/lib/vz ext4 defaults 0 1
/dev/md0 /boot ext4 defaults 0 1
/dev/pve1/swap none swap sw 0 0
proc /proc proc defaults 0 0

Правим grub
cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Proxmox, with RAID1' --class proxmox --class gnu-linux --class gnu --class os {
    insmod raid
    insmod mdraid
    insmod part_msdos
    insmod ext2
    set root='(md/0)'
    echo    'Loading Proxmox with RAID ...'
    linux   /vmlinuz-2.6.32-16-pve root=/dev/mapper/pve1-root ro  quiet
    echo    'Loading initial ramdisk ...'
    initrd  /initrd.img-2.6.32-16-pve
}

Внимательно смотрим на циферки в версии ядра, и подставляем свои, если ядро другое.

Продолжаем править grub
vi /etc/default/grub
Убрав комментарий в строчке с GRUB_DISABLE_LINUX_UUID=true

Далее:
update-grub
update-initramfs -u
Потом копируем sda на рейд
cp -dpRx / /mnt/root
cp -dpRx /boot/* /mnt/boot
cp -dbRx /var/lib/vz/* /mnt/data

reboot

Система должна загрузиться с рейд-устройства. Проверим
mount
/dev/mapper/pve1-root on / type ext4 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/pve1-data on /var/lib/vz type ext4 (rw)
/dev/md0 on /boot type ext4 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
beancounter on /proc/vz/beancounter type cgroup (rw,name=beancounter)
container on /proc/vz/container type cgroup (rw,name=container)
fairsched on /proc/vz/fairsched type cgroup (rw,name=fairsched)

Убиваем lvm на первом диске
lvremove /dev/pve/root
lvremove /dev/pve/swap
lvremove /dev/pve/data
vgremove /dev/pve
pvremove /dev/sda2

Добиваем типы разделов на первом диске для рейд
fdisk /dev/sda
t - 1 - fd
t - 2 - fd
w
Добавляем первый диск в рейд-массив
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2

Любуемся на синхронизацию дисков
cat /proc/mdstat
Может занять продолжительно время, но ничего страшного, по идее можно продолжать настроивать, ждать окончания синхронизации не обязательно, поэтому:
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
rm -f /etc/grub.d/09_swraid1_setup
update-grub
update-initramfs -u
grub-install /dev/sda
grub-install /dev/sdb
reboot

Все, система загрузилась с raid устройства, при вылете любого диска, загрузится с другого.
Тем временем синхронизация продолжается, но Proxmox готов к началу работ. Заходим в веб-интерфейс и делаем свои страшные дела.
Подготовку ssd под базу опишу чуть позднее.

14 комментариев:

  1. Отличная статья. Будет ли продолжение?

    ОтветитьУдалить
  2. Добрый день. Я пользователь в этом деле. Делаю согласно твоей статье и ни чего не получается, после команд
    Далее:
    update-grub
    update-initramfs -u
    Потом копируем sda на рейд
    cp -dpRx / /mnt/root
    cp -dpRx /boot/* /mnt/boot
    cp -dbRx /var/lib/vz/* /mnt/data

    reboot

    Система должна загрузиться с рейд-устройства.

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

    ОтветитьУдалить
    Ответы
    1. В предыдущем абзаце есть строчка " внимательно проверьте цифры в версии ядра". Я думаю, именно в этом и ошибка.

      Удалить
    2. В предыдущем абзаце есть строчка " внимательно проверьте цифры в версии ядра". Я думаю, именно в этом и ошибка.

      Удалить
    3. Версию proxmox ставлю нужную.

      Удалить
  3. lvscan
    ACTIVE '/dev/pve/swap' [7.00 GiB] inherit
    ACTIVE '/dev/pve/root' [96.00 GiB] inherit
    ACTIVE '/dev/pve/data' [812.02 GiB] inherit
    inactive '/dev/pve1/swap' [7.00 GiB] inherit
    inactive '/dev/pve1/root' [96.00 GiB] inherit
    inactive '/dev/pve1/data' [812.00 GiB] inherit
    это сразу после переконфигурации mdadm.
    proxmox 2.2
    Что за проблема можеть быть в этом случае?

    ОтветитьУдалить
  4. Если соберетесь провернуть такое на proxmox 3 (wheezy) то в /etc/grub.d/09_swraid1_setup
    вместо insmod mdraid -> insmod mdraid1x

    ОтветитьУдалить
  5. 2.6.32-16-pve #1 SMP Fri Nov 9 11:42:51 CET 2012 x86_64 GNU/Linux

    ОтветитьУдалить
    Ответы
    1. Все верно. Какую ошибку пишет? Просто вчера устанавливал знакомым (PVE 2.2) все с полпинка заработало строго по инструкции. И странно, что lvm на создаваемом pve1 не завелся. В общем ошибку загрузки в студию, а также по возможности ошибки lvm

      Удалить
  6. Добрый день. Спустя некоторое время дошли руки по пробовать смонтировать систему. Все запустилось. И решил я отключить винты , отключил я первый винт, система запустилась, потом наоборот и тут система не запустилась выдает ошибки, последнее что написано это
    ....................
    alert /dev/mapper/pve1-root does no exist/ Droppin to a shell

    .....
    /bin/sh: can't access tty; job control turned off
    (initramfs)

    ОтветитьУдалить
  7. Всем привет, у меня такая же проблема как и Wesly.После update-grub
    update-initramfs -u
    Потом копируем sda на рейд
    cp -dpRx / /mnt/root
    cp -dpRx /boot/* /mnt/boot
    cp -dbRx /var/lib/vz/* /mnt/data

    reboot
    система не запускается. 3 ошибки: 1-file not found;2-no such disk;3-you need to load the kernel first.
    ядро 2.6.32-23-pve
    Proxmox 3.1
    Заранее спасибо за подсказки.

    ОтветитьУдалить