GithubHelp home page GithubHelp logo

infortrend-ds-proxmox's Introduction

Infortrend-DS-Proxmox

Подключение SAN InforTrend к Proxmox через iSCSI LVM

Чутка теории и терминов для понятия и вникания в суть:

В iSCSI существуют Таргеты и Инициаторы. Сервер или SAN который раздает дисковые тома называется Таргетом, а тот кто их запрашивает и потребляет называется Инициатором.

Пример: Сервер Инициатор обращается на полку за Таргетом, полка отдает ему Таргет с (LUN) Адресом дискового устройства в полке.

LUN - Logical Unit Number это адрес дискового устройства в SANе,

Тома хранения, созданные под управлением менеджера логических томов (LVM), могут быть изменены и перемещены практически по желанию.

  • PV - Physical Volumes, физические тома, LUN как раз его и образует на Инициаторе и его первым надо создать.

  • VG - Volume Groups, Группа томов.

  • LV : Logical Volumes, Логические тома (LV), находятся внутри группы томов (VG) и образуют виртуальные разделы.

  • PE : Physical Extents, физические блоки данных.

  • LE : Logical Extents, логические блоки данных.

Таким образом, полный адрес диска (физического раздела жёсткого диска) на SCSI-устройстве складывается из SCSI Target ID и LUN, уникального в пределах SCSI-устройства и назначаемого ему в настройках или автоматически по порядку.

Пример для конкретной полки как идут данные
Partition - LV - LUN - IQN - Target - (Network FC / iSCSI) - Initiator - LVM - PV - VG - LV

Ближе к делу...

Действия на SAN Полке и сервере:

В моем случае использовался самый простой и дешевый способ подключения, это так называемый DAS, т.е. полка подключена напрямую в потребителя, сервер. Есть другие варианты со сбором фабрик и тп. Перво наперво надо собрать железо и потом настроить дисковую полку, InforTrend DS1012 Начинаем с установки дисков в корзины, затем контроллеры, Host Board'ы и уже в нее адаптер iSCSI 10G SFP+, наличие прямых рук и крестовой отвертки приветствуется. В сервер также устанавливаем Host Board и адаптеры SFP. Надеюсь вы выключили его перед этим :)

Далее настраиваем сетевые интерфейсы "управления" и "каналов" передачи данных Полки.

Управление:

Device -> System settings -> Communication -> LAN0

Каналы данных:

Device -> Channels -> Host Channel Settings -> Channel0 - Channel5

Когда заказывали полку я сделал ошибку и в целях экономии заказал iSCSI адаптеры, а не на FC, посчитав, что FC выходит гораздо дороже, и как оказалось после покупки, есть ограничениях в этих адаптерах iSCSI, их нельзя собрать в Bond.

Далее надо провести настройка жестких дисков. Собрать в RAID необходимого уровня, объединить их в логические тома LV, создать именованные разделы Partition .

Далее Partition надо замапить на LUN, делается так:

Device -> Logical Volumes -> Partitions -> ИмяРаздела -> Host LUN Mapping -> Create

я создавал на автомате для каналов SFP на обоих контроллерах, но можно и вручную задать:

Device -> Channels -> Scan Ports Information.

Действия на сервере Proxmox

Необходимо настроить сетевые интерфейсы, можно можно по отдельности, или как я объединить их в одном OVS бридже,

Datacenter -> PVE -> System -> Network

и на бридж уже назначать IP адреса той-же сети, что и на каналах Полки.

Устанавливаем пакеты open-iscsi и multipath-tools

# apt-get install open-iscsi multipath-tools
  systemctl enable iscsid
  systemctl enable multipathd
  systemctl start iscsid
  systemctl start multipathd

Применяем настройки сети, можно просто перезагрузить, можно вручную заменить /etc/network/interfaces на /etc/network/interfaces.new и выключить/включить необходимый интерфейс/бридж.

Далее надо настроить хранилища. Хранилища настраиваются на уровне датацентра

Datacenter -> Storage -> Add -> iSCSI

где:

  • ID - Название хранилища (например storage.ip или storage.por_lun)
  • Portal - ip адрес канала полки
  • Target - Если все нормально настроили и применили настройки сети то в ниспадающем списке должны увидеть Таргеты iqn с полки, выбираем который нужен (InforTrend DS1012 отдает их в виде )
  • Nodes - ноды которым будет доступно хранилище, ведь нету смысла давать удаленным сервакам.
  • Enabled - ставим галку, включаем хранилище в использование
  • Shared - убираем галку если планируем использовать LVM поверх хранилища, а если только для хранения образов машин напрямую, поставьте галку, но это не мой случай!

И так надо настроить хранилище на каждый подключенный канал, внимательно смотрите за галками в разных версиях Proxmox они ведут себя по разному!

Проверьте настройки iscsi автостарта нод

# cat /etc/iscsi/iscsid.conf | grep "node.startup = manual"

Редактируем файл

# nano /etc/iscsi/iscsid.conf

Автостарт нод при загрузке включается через

node.startup = automatic

Также здесь можно поменять настройки для работы "multipath" по мануалу от производителя:

node.conn[0].timeo.noop_out_interval = 30

node.conn[0].timeo.noop_out_timeout = 90

по дефолту стоит значение 5 Не забываем перезапускать сервисы!

У меня стоит два активных канала, и из предыдущего шага я получил два хранилища, каждое из них указывает на один и тот-же том, для решения вопроса подключения не по конкретному адресу хранилища и используется multipath, он определяет по wwid одинаковые диски и обрабатывает их как один, давая возможность объединить их с балансировкой нагрузки или настроить отказоустойчивость.

Посмотреть какие тома подключены через multipath можно посмотреть :

# multipath -ll

В нем же указаны wwid блочных устройств и другая полезная информация, например производитель и контроллер или серия устройств.

В моем случае multipath установился без создания файла дефолтного конфига в /etc/multipath.conf и пришлось лопатить интернет в поисках примера настройки параметров хранилища от производителя Полки.

Вот так выглядит готовый конфиг для InforTrend DS-1012.

# nano /etc/multipath.conf

defaults {
        polling_interval        2
        path_selector           "round-robin 0"
        path_grouping_policy    multibus
        uid_attribute           ID_SERIAL
        rr_min_io               100
        failback                immediate
        no_path_retry           queue
        user_friendly_names     no
        }
devices {
        device {
            vendor "IFT"
            path_grouping_policy group_by_prio
            getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
            path_checker readsector0
            path_selector "round-robin 0"
            hardware_handler "0"
            failback 15
            rr_weight uniform
            no_path_retry 12
            prio alua
        } 
}
blacklist {
          wwid *
          } 
blacklist_exceptions {
          wwid 3600d0231000900651d682d0917063680
          }

В этом примере blacklist исключаются все хранилища, но можно исключить конкретные блочные устройства указав их wwid, в blacklist_exceptions указываются все исключения и в нем как раз и указан wwid нашего partition с Полки.

Если хотите видеть пути в виде "mpatha, mpathb" и тп, измените в конфиге "user_friendly_names" с "no" на "yes".

перезагружаем сервис

# service multipathd restart

проверяем через

# multipath -ll

радуемся если увидели там свой том с полки :) если не увидели перепроверьте конфиг и указанные wwid.

Далее создаем физический том (PV) ,

# pvcreate /dev/mapper/3600d0231000900651d682d0917063680

3600d0231000900651d682d0917063680 - это wwid тома с Полки, у вас может быть другой или называться mpathA и тп, смотря как настроили.

Создаем Группу Томов (VG)

# vgcreate storage00  /dev/mapper/3600d0231000900651d682d0917063680

storage00 - наименование группы томов

Дальше можно перейти в Proxmox и уже там донастраивать если вы будете использовать том только для хранения образов, ну а если на полке места много а виртуалки не такие большие... можно создать на полке логические тома под свои нужды! например для бэкапов и ISO шников:

# lvcreate -n backup -L 1Tp storage00
  lvcreate -n ISO -L 1Tp storage00

и тд -n ISO - задает имя логического тома, -L 1Tp - задает размер в один терабайт storage00 - имя группы томов VG

необходимо активировать группы томов и логических томов

# vgchange -a y

Теперь можно создать файловую систему на свеженьких LV томах

# mkfs.ext4 /dev/mapper/storage00-backup
  mkfs.ext4 /dev/mapper/storage00-ISO

создаем папки для монтирования LV томов

# mkdir /mnt/storage00.backup
  mkdir /mnt/storage00.ISO

добавляем записи монтирования LV томов в

# nano /etc/fstab

/dev/mapper/storage00-backup /mnt/storage00.backup/ ext4 _netdev,defaults,auto 0 1
/dev/mapper/storage00-ISO /mnt/storage00.ISO/ ext4 _netdev,defaults,auto 0 1

параметр _netdev говорит о том, что устройство активируется после сетевых драйверов! сохраняем, и монтируем тома

# mount -a

Проверяем

# lsblk

напротив имени тома должна быть прописана точка монтирования

Далее уже из интерфейса Proxmox добавляем группу томов LVM

  • Datacenter -> Storage -> Add -> LVM
  • ID - имя которым будете пользоваться
  • Base storage - Выбираем "Existing volume groups"
  • Volume group - Здесь выбираем "storage00"
  • Content - Что вы там размещать будете, образы ВМ или контейнеры
  • Nodes - на каких нодах будет доступно хранилище
  • Enable - включаем/выключаем
  • Shared - ставим галку

После добавления в списке "Storage" появится свеженькое хранилище "storage00 (pve)", если посмотреть на Usage то оно будет уже частично занято созданными LV томами.

Добавляем папки Backup и ISO в Proxmox

  • Datacenter -> Storage -> Add -> Directory

  • ID - имя которым будете пользоваться

  • Directory - папка монтирования из "fstab", /mnt/xxxxxx

  • Content - натыкайте себе по желанию

  • Nodes - на каких нодах будет доступно хранилище

  • Enable - включаем/выключаем

  • Shared - ставим галку

  • Max Backup - Максимальное количество бэкапов для каждой ВМ, доступно если выбрали "VZDump backup file" в Content.

Кстати расписание бэкапов создается в

Datacenter -> Backup -> Add

Еще раз все перепроверям:

Физические тома:

# pvs

Группы томов:

# vgs

Логические тома:

# lvs

Мультипаф:

# multipath -ll

и его конфиг

# cat /etc/multipath.conf

Список блочных устройств:

# lsblk

Конфиг iSCSI

# cat /etc/iscsi/iscsid.conf

Конфиг монтирования

# cat /etc/fstab

И скрестив пальцы на ногах перезагружаем. В случае ошибок пишем в https://t.me/ru_proxmox Меня можно найти: https://t.me/SSarge Если вдруг увидите ошибки и неточности, пишите не стесняйтесь!

Столкнулся с тем, что после перезагрузки тома LVM не активны хотя и видны, необходимо активировать группы томов и логических томов хотя и в fstab стоит "_netdev", это странно тк такая проблема обычно решается именно этим параметром, в старых версиях iscsi + multipath + lvm встречалось это, в баг треках на RHEL наткнулся на вариант решения:

You need to enable lvmetad in lvm.conf and make sure that lvm2-lvmetad is running.
The lvmetad is the "LVM metadata daemon" that acts an in-memory cache of LVM metadata gathered from devices as they appear in the system - whenever a new block device appears and it has a PV label on it, it's automatically scanned via a udev rule.
This updates the lvmetad daemon with the LVM metadata fonud. Once the VG is complete (meaning all the PVs making up the VG are present in the system), the VG is activated.
The lvmetad daemon is required for this LVM event-based autoactivation to work.

но он не подходит в моем случае, тк использует кэш вместо сканирования томов, но рекомендуется к включению если большое кол-во LV.

и еще один вариант, добавить в дефолты open-iscsi свою VG, и убедиться, что включена обработка netdev, который я тестирую:

# grep LVMGROUPS /etc/default/open-iscsi 
LVMGROUPS="ваша VGшечка"
# grep HANDLE_NETDEV /etc/default/open-iscsi 
HANDLE_NETDEV=1

Собственно костыль который работает:

# vgchange -a y
# mount -a

/tmp /tmp _netdev,0 0

infortrend-ds-proxmox's People

Contributors

astronauticus avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.