Zfs: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Решение)
(Дополнительные команды при вводе в кластер pve ноды)
Строка 109: Строка 109:
 
  ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0
 
  ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0
  
=Дополнительные команды при вводе в кластер pve ноды=
+
=Управление RAID массивами=
  
Запустить gparted и подвинуть раздел с lvm до конца физического диска -- вручную
+
==Создать аналог RAID 1+0==
  
Далее из под рута дать команды:
+
Собираем пулл zfs (аналог RAID 1+0) с именем zfspool из дисков /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
  
lvcreate pve-vg --name vmstorage -L 400g
+
Первый шаг - создаём зеркало из первых двух
zpool create zfspool /dev/mapper/pve--vg-vmstorage -f
 
zfs set compression=off zfspool
 
zfs set sync=disabled zfspool
 
  
  /opt/node_template_config/apply_rename.sh ИМЯ_УЗЛА
+
  zpool create -f -o ashift=12 zfspool mirror /dev/sda2 /dev/sdb2
  
Пример
+
Второй шаг - в уже созданный пулл добавляем ещё одно зеркало
  
  /opt/node_template_config/apply_rename.sh pve-analise-01
+
  zpool add zfspool mirror /dev/sdc2 /dev/sdd2
  
Или
+
Получаем как бы пулл из двух зеркал. Пул в этом случае является страйпом (RAID0) из двух зеркал (RAID1)
  
/opt/node_template_config/apply_rename.sh pve-ml-01
+
Далее тюним для PVE. Отключаем сжатие и синхронизацию (экспериментально подобрано при эксплуатации PVE).
  
Далее нужно запустить один костыль (костыль №1). Это команда:
+
  zfs set compression=off zfspool
 
+
  zfs set sync=disabled zfspool
  systemctl stop pve-cluster
 
  systemctl stop corosync
 
pmxcfs -l
 
cp -rp /etc/pve/nodes/pve-analise-xx /etc/pve/nodes/ИМЯ_УЗЛА
 
killall pmxcfs
 
reboot
 
 
 
Внимание! Имя узла должно быть такое же, как в команде переименования!
 
 
 
Далее нужно ввести ноду в кластер. Для этого выполнить команду (тоже из под рута)
 
 
 
pvecm add 172.16.87.100 --force
 
 
 
Или если не помогает команда выше:
 
 
 
pvecm add 172.16.87.100 -link0 IP_АДРЕС_ВВОДИМОЙ_НОДЫ --force
 
 
 
==Disable NetworkManager==
 
 
 
systemctl stop NetworkManager
 
systemctl disable NetworkManager
 

Версия 21:01, 18 ноября 2023

Полезные команды

Затюнить основные моменты на PVE

Отключить сжатие

zfs set compression=off rpool/data

Отключить sync

zfs set sync=disabled rpool/data

Просмотр параметров volume (внимание! - отсутствие слэша в начале - это важно)

zfs get all rpool/data/vm-100-disk-1

Аналогично - просмотр параметров пула (внимание! - слэш в начале - это важно)

zfs get all /rpool/data/

Создать volume с нужным размером блока (например, с размером блока равным размеру блока в ext4 гостевой машины по умолчанию)

zfs create -o volblocksize=4K -V 100g rpool/data/vm-100-disk-1

Проверить за собой

zfs get all rpool/data/vm-100-disk-1 | grep volblocksize

Создание дисков средствами вебинтерфейса проксмокс происходит с volblocksize=8K. Это не всегда удобно. Поэтому после создания виртмашины можно пересоздать так:

Удаляем диск

zfs destroy rpool/data/vm-100-disk-1

И создаём заново (как уже выше приводилась команда) - выключенная виртмашина ничего не заметит :-)

zfs create -o volblocksize=4K -V 100g rpool/data/vm-100-disk-1


Копирование данных через снапшоты

Просмотр списка

zfs list

Копирование

ssh root@192.168.10.123 "zfs send rpool/data/vm-106-disk-0@backup-01" | pv --size 469457889480 | zfs receive -o compress=zle storage-zfs/backup/vm-106-disk-0--DO-NOT-DELETE


создать снапшот

zfs snapshot storage-zfs/vm-206-disk-0@backup

список снапшотов

zfs list -t snapshot

посмотреть размер снапшота

zfs send -nvP storage-zfs/vm-206-disk-0@backup

должно быть на выходе что-то тпа того:

full	storage-zfs/vm-206-disk-0@backup	654563209344
size	654563209344

установить размер для диска (обычно после копирования из снапшота)

set volsize=999G rpool/data/vm-206-disk-0

Работа с томами

Изменить размер (помни о файловой системе внутри!)

zfs set volsize=1000G rpool/data/vm-201-disk-1

Эксперимент

Задача

Быстро передавать состояние диска виртмашины между двумя узлами PVE.

Пусть по легенде у нас будет две виртуальных машины:

A -- виртмашина, на которой работает пользователь. Она расположена на узле PVE_A
B -- виртмашина, на которую нужно оперативно получать состояние диска машины A (изначально у нее диск или отсутствует или пустой). Она расположена на узле PVE_B


Между узлами PVE_A и PVE_B гигабитная сеть и доступ по ssh по ключам (условно можно считать что эти оба узла являются узлами одного кластера, но не обязательно. Т.е. могут быть и отдельными PVE-узлами, вне кластера).

Полностью передавать диски по сети -- ёмкая по времени задача. Чтобы минимизировать временнЫе затраты, в общем виде набор действий будет следующим:

Решение

1. Создаём снапшот на A. Пусть будет снапшот с названием

ok

2. Перемещаем снапшот в новый (пока ещё не существующий на первом этапе) диск машины B Для этого на машине PVE_B выполняем команду, вид которой в общем виде следующий:

ssh root@PVE_A "zfs send -R zfspool2/vm-401-disk-0@dfl" | pv --size 125413212048 | zfs receive -o compress=zle zfspool2/vm-402-disk-0 -F

3. Создаём второй снапшот на A. Пусть будет снпашот с названием

ok1

команда

zfs snapshot zfspool2/vm-401-disk-0@ok1

4. Перемещаем снапшот в снапшот созданного в п.2 диска на машине B

ssh root@PVE_A "zfs send -i zfspool2/vm-401-disk-0@ok1" | pv --size 125413212048 | zfs receive -o compress=zle -A zfspool2/vm-402-disk-0

Управление RAID массивами

Создать аналог RAID 1+0

Собираем пулл zfs (аналог RAID 1+0) с именем zfspool из дисков /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2

Первый шаг - создаём зеркало из первых двух

zpool create -f -o ashift=12 zfspool mirror /dev/sda2 /dev/sdb2

Второй шаг - в уже созданный пулл добавляем ещё одно зеркало

zpool add zfspool mirror /dev/sdc2 /dev/sdd2

Получаем как бы пулл из двух зеркал. Пул в этом случае является страйпом (RAID0) из двух зеркал (RAID1)

Далее тюним для PVE. Отключаем сжатие и синхронизацию (экспериментально подобрано при эксплуатации PVE).

zfs set compression=off zfspool
zfs set sync=disabled zfspool