[Из песочницы] Установка PROXMOX 4.3 на Soft-RAID 10 GPT12.11.2016 17:48
Добрый день, друзья. Сегодня я бы хотел поделиться своим личным опытом по настройке Proxmox на soft-Raid 10.
Что имеем:
Сервер HP ProLiant DL120 G6 (10 GB ОЗУ)
4×1000Gb SATA винчестера — без физического RAID контроллера на борту
Флешка с PROXMOX 4.3 (об этом ниже)
Что хотим:
Получить инсталляцию PROXMOX 4.3 установленную полностью на S-RAID 10 GPT, что бы при отказе любого диска система продолжала работу.
Получить уведомление об отказе сбойного диска на почту.
Что делаем — общий план действий:
Устанавливаем PROXMOX 4.3
Поднимаем и тестируем RAID10
Настраиваем уведомления на почту
Под катом поэтапное прохождение квеста.
А теперь поэтапно.
Первый момент:
Подключил флешку — если вкратце — не найден установочный диск. Не могу смонтироваться.
Не стал разбираться что да как, да почему. Записал образ на CD-диск и подключил USB CDROM (благо он был рядом)
Второй момент:
Подключил к серверу CDROM и клавиатуру в передние порты сервера (их у него два) — первое что увидел, на первом приветственном скрине proxmox нельзя ничего нажать без мышки. То есть прееключение Tab-ом по управляющим кнопкам не происходит. Т.к. сервер был в стойке и залазить сзади было проблематично, начал по очереди втыкать клаву и мышку. Мышкой щелкаю «далее», клавой — ввожу данные.
Установка состоит из нескольких шагов:
Согласится с их требованиями
Выбрать винчестер, куда система установится.
Выбрать страну и часовой пояс
Указать имя сервера, адресацию
И собственно немного подождать развертки образа на сервер.
PROXMOX установлен на первый диск, который он обозвал как /dev/sda. Подключаюсь со своего ноута на адрес, который указал при установке:
Теперь определим точный размер первого диска, он нам пригодится в дальнейшем:
root@pve1:~#parted /dev/sda print
Model: ATA MB1000EBNCF (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.5MB 9437kB primary bios_grub
2 10.5MB 1000MB 990MB ext4 primary
3 1000MB 1000GB 999GB primary
Видим что ровно 1000GB — запомним. Размечаем остальные разделы под наш массив. Первым делом очищаем таблицу разделов на трех пустых дисках и размечаем диски под GPT:
1+0 records in
1+0 records out
512 bytes (512 B) copied, 7.8537e-05 s, 6.5 MB/s
Размечаем:
Второй:
root@pve1:~#parted /dev/sdb mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.
Третий:
root@pve1:~#parted /dev/sdc mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.
Четвертый:
root@pve1:~#parted /dev/sdd mklabel gpt
Warning: The existing disk label on /dev/sdd will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.
Теперь воссоздаем разделы так же как на оригинальном первом диске:
1.
root@pve1:~#parted /dev/sdb mkpart primary 1M 10M
Information: You may need to update /etc/fstab.
2.
root@pve1:~#parted /dev/sdb set 1 bios_grub on
Information: You may need to update /etc/fstab.
3.
root@pve1:~#parted /dev/sdb mkpart primary 10М 1G
Information: You may need to update /etc/fstab.
Вот тут нам пригодится знание размера оригинального первого диска.
Все эти четыре шага проделываем для всех наших дисков: sdb, sdc, sdd. Вот что у меня получилось:
Это оригинальный:
root@pve1:~#parted /dev/sda print
Model: ATA MB1000EBNCF (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1049kB 1031kB bios_grub
2 1049kB 134MB 133MB fat32 boot, esp
3 134MB 1000GB 1000GB lvm
А это второй, третий и четвертый (с разницей в букве диска).
root@pve1:~#parted /dev/sdb print
Model: ATA MB1000EBNCF (scsi)
Disk /dev/sdd: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.5MB 9437kB primary bios_grub
2 10.5MB 1000MB 990MB primary
3 1000MB 1000GB 999GB primary
Далее надо уточнить — если вы первый раз играете с этим кейсом и до этого на сервере, а главное на винчестерах, не было даже понятия RAID — можно пропустить этот пункт. Если же что-то не получилось, значит RAID уже возможно был установлен и на винчестерах есть суперблоки которые нужно удалять.
Теперь нам нужно действующий LVM массив перенести на три пустых диска. Для начала создаем в рейде md1 — LVM-раздел:
root@pve1:~#pvcreate /dev/md1 -ff
Physical volume "/dev/md1" successfully created
И добавляем его в группу pve:
root@pve1:~#vgextend pve /dev/md1
Volume group "pve" successfully extended
Теперь переносим данные с оригинального LVM на новосозданный:
root@pve1:~#pvmove /dev/sda3 /dev/md1
/dev/sda3: Moved: 0.0%
Процесс долгий. У меня занял порядка 10 часов. Интересно, что запустил я его по привычке будучи подключенным по SSH и на 1,3% понял что сидеть столько времени с ноутом на работе как минимум не удобно. Отменил операцию через CTRL+C, подошел к физическому серверу и попробовал запустить команду переноса там, но умная железяка отписалась, что процесс уже идет и команда второй раз выполнятся не будет, и начала рисовать проценты переноса на реальном экране. Как минимум спасибо :)
Процесс завершился два раза написав 100%. Убираем из LVM первый диск:
root@pve1:~#vgreduce pve /dev/sda3
Removed "/dev/sda3" from volume group "pve"
Переносим загрузочный /boot в наш новый рейд /md0, но для начала форматируем и монтируем сам рейд.
root@pve1:~#mkfs.ext4 /dev/md0
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 482304 4k blocks and 120720 inodes
Filesystem UUID: 6b75c86a-0501-447c-8ef5-386224e48538
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
Создаем директорию и монтируем туда рейд:
root@pve1:~#mkdir /mnt/md0
root@pve1:~#mount /dev/md0 /mnt/md0
Копируем содержимое живого /boot:
root@pve1:~#cp -ax /boot/* /mnt/md0
Отмонтируем рейд и удаляем временную директорию:
root@pve1:~#umount /mnt/md0
root@pve1:~#rmdir /mnt/md0
Определим UUID раздела рейда, где хранится /boot — это нужно, что бы правильно записать его в таблицу /etc/fstab:
root@pve1:~#blkid |grep md0
/dev/md0: UUID=»6b75c86a-0501–447c-8ef5–386224e48538» TYPE=«ext4»
Откроем таблицу и пропишем в ее конец данные загрузки /boot:
Installing for i386-pc platform.
Installation finished. No error reported.
root@pve1:~#grub-install /dev/sdc>
Installing for i386-pc platform.
Installation finished. No error reported.
root@pve1:~#grub-install /dev/sdd
Installing for i386-pc platform.
Installation finished. No error reported.
Теперь очень важный момент. Мы берем за основу второй диск /dev/sdb, на котором система, загрузчик и grub и переносим всё это на первый диск /dev/sda, что бы в последствии сделать его так же частью нашего рейда. Для этого рассматриваем первый диск как чистый и размечаем так же, как другие в начале этой статьи
И если первый рейд с /boot синхронизировался сразу, то для синхронизации второго понадобилось терпение (в районе 5 часов).
Осталось установить загрузчик на добавленный диск (тут нужно понимать, что делать это нужно только после того, как диски полностью синхронизировались).
root@pve1:~#dpkg-reconfigure grub-pc
Пару раз нажимаем Enter ничего не меняя и на последнем шаге отмечаем галками все 4 диска md0/md1 не трогаем!
Осталось перезагрузить систему и проверить, что все в порядке:
root@pve1:~#shutdown –r now
Система загрузилась нормально (я даже несколько раз менял в BIOS порядок загрузки винтов — грузится одинаково правильно).
По четыре подковы в каждом рейде говорят о том, что все четыре диска в работе. Смотрим информацию по массивам (на примере первого, точнее нулевого).
root@pve1:~#mdadm --detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Thu Nov 10 15:12:21 2016
Raid Level : raid10
Array Size : 1929216 (1884.32 MiB 1975.52 MB)
Used Dev Size : 964608 (942.16 MiB 987.76 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Fri Nov 11 10:07:47 2016
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 2048K
UUID : 4df20dfa:4480524a:f7703943:85f444d5 (local to host pve1)
Events : 0.27
Number Major Minor RaidDevice State
0 8 2 0 active sync set-A /dev/sda2
1 8 18 1 active sync set-B /dev/sdb2
2 8 34 2 active sync set-A /dev/sdc2
3 8 50 3 active sync set-B /dev/sdd2
Видим, что массив типа RAID10, все диски на месте, активные и синхронизированы.
Теперь можно было бы поиграться с отключением дисков, изменении диска-загрузчика в BIOS, но перед этим давайте настроим уведомление администратора при сбоях в работе дисков, а значит и самого рейда. Без уведомления рейд будет умирать медленно и мучительно, а никто не будет об этом знать.
В Proxmox по умолчанию уже стоит postfix, удалять его я не стал, хоть и сознательно понимаю что другие MTA было бы проще настроить.
Ставим SASL библиотеку (мне она нужна, что бы работать с нашим внешним почтовым сервером):
root@pve1:/etc#apt-get install libsasl2-modules
Создаем файл с данными от которых будем авторизовываться на нашем удаленном почтовом сервере:
root@pve1:~#touch /etc/postfix/sasl_passwd
Там прописываем строчку:
[mail.domain.ru] pve1@domain.ru:password
Теперь создаем транспортный файл:
root@pve1:~#touch /etc/postfix/transport
Туда пишем:
domain.ru smtp:[mail.domain.ru]
Создаем generic_map:
root@pve1:~#touch /etc/postfix/generic
Тут пишем (обозначаем от кого будет отправляться почта):
root pve1@domain.ru
Создаем sender_relay (по сути, маршрут до внешнего сервера):
root@pve1:~#touch /etc/postfix/sender_relay
И пишем туда:
pve1@domain.ru smtp.domain.ru
Хешируем файлы:
root@pve1:~#postmap transport
root@pve1:~#postmap sasl_passwd
root@pve1:~#postmap geniric
root@pve1:~#postmap sender_relay
В файле /etc/postfix/main.cf у меня получилась вот такая рабочая конфигурация:
main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
myhostname=domain.ru
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA’s job.
append_dot_mydomain = no
# Uncomment the next line to generate «delayed mail» warnings
#delay_warning_time = 4h
У меня пришло два письма с информацией по обоим созданным мною рейдам. Осталось добавить задачу тестирования в крон и убрать ключ –test. Чтобы письма приходили только тогда, когда что-то произошло:
root@pve1:~#crontab -e
Добавляем задачу (не забудьте после строки нажать на Enter и перевести курсор вниз, что бы появилась пустая строка):
0 5 * * * mdadm --monitor --scan -1 –oneshot
Каждое утро в 5 утра будет производится тестирование и если возникнут проблемы, произойдет отправка почты.
На этом всё. Возможно перемудрил с конфигом postfix — пока пытался добиться нормальной отправки через наш внешний сервер, много чего надобавлял. Буду признателен, если поправите (упростите).
В следующей статье я хочу поделиться опытом переезда виртуальных машин с нашего гипервизора Esxi-6 на этот новый Proxmox. Думаю будет интересно.
UPD.
Стоит отдельно отменить момент с физическим местом на разделе /dev/data — это основной раздел созданный как LVM-Thin
Когда ставился Proxmox, он автоматически разметил /dev/sda с тем учетом, что на /root раздел где хранится система, ISO, дампы и темплеи контейнеров, он выделил 10% емкости от раздела, а именно 100Gb. На оставшемся месте он создал VLM-Thin раздел, который по сути никуда не монтируется (это еще одна тонкость версии >4.2, после перевода дисков в GPT). И как вы понимаете этот раздел стал размером 900Gb. Когда мы подняли RAID10 из 4х дисков по 1Tb — мы получили емкость (с учетом резерва RAID1+0) — 2Tb
Но когда копировали VLM в рейд — копировали его как контейнер, с его размером в 900Gb.
При первом заходе в админку Proxmox внимательный зритель может заметить, что тыкая на раздел local-lvm (pve1) — мы и наблюдаем эти с копейками 800Gb
Так вот что бы расширить VLM-Thin на весь размер в 1,9TB нам потребуется выполнить все одну команду:
lvextend /dev/pve/data -l +100%FREE
После этого систему не нужно даже перезапускать.
Не нужно делать resize2fs — и это скорее даже невозможно, потому как система начнет ругаться на
root@pve1:~# resize2fs /dev/mapper/pve-data
resize2fs 1.42.12 (29-Aug-2014)
resize2fs: MMP: invalid magic number while trying to open /dev/mapper/pve-data
Couldn't find valid filesystem superblock.
И правильно начнет — этот раздел у нас не подмонтирован через fstab
В общем пока я пытался понять, как расширить диск и читал форум Proxmox — система тем временем уже во всю показывала новый размер, как в таблице, так и на шкале.
Комментарии (3)
Meklon
12 ноября 2016 в 16:41
0
↑
↓
Очень подробно, спасибо)
MagicGTS
12 ноября 2016 в 17:33
0
↑
↓
Я бы сказал, что статья из серии: как перенести установленную linux на soft-raid при наличие свободных дисков и, что она изначально на LVM (масса очепяток в статье). Таких статей много, новизны информации нет. В данной статье, к сожалению, многое описано как «черная магия».
moropsk
12 ноября 2016 в 17:45
(комментарий был изменён)
0
↑
↓
вопрос вот такому моменту:
Планируется установить Proxmox на отдельный диск + 2-а массива raid 1 по 4 тб созданные на программном рейде десктопной материнской платы до установки Proxmox
Установленная виртуалка на Proxmox Debian 8 увидит эти массивы?
Их потом можно примонтировать?