Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

понедельник, 25 января 2021 г.

Настройка FCoE в Ubuntu 20.04 на сервере HPE Synergy SY480 Gen10 с адаптером 3820C. Неофициальное руководство

Пока было свободное время на работе, решил попробовать поставить один из наших программных продуктов. Этот эксперимент будет основой для нескольких статей.

Предлагаемое решение неофициальное, так как Ubuntu 20.04 на момент написания статьи не является сертифицированной или поддерживамой ОС на серверах SY480 Gen10. Но я давно питаю страсть к Ubuntu. Поэтому решил не искать простых путей с официальными RHEL и SUSE, а делать на Ubuntu.

Найти инструкцию, как настраивать FCoE на Ubuntu я не сумел. Наверное, это первый раз, когда у меня не было исходного руководства под этот дистрибутив. Нормального описания и плана действий нет на сайте Ubuntu, что печально. Можно только найти man-страницы на отдельные команды.

За основу взял это руководство по настройке на Red Hat. Об отличиях и особенностях напишу в этой статье.

Вводные данные:

  • HPE Synergy с серверами HPE Synergy SY480 Gen10
  • В серверах стоят конвергентные адаптеры 3820C (на других пока не пробовал)
  • Для сервера создан и присвоен профиль
  • В профиле определены подключения по Ethernet и Fibre Channel (на самом деле это однохоповый FCoE и Linux это знает)/
  • С внешней СХД по FC выделены тома (в моем случае 2 штуки). Не смотря на название, загрузочных томов я пока не делал
  • Сеть SAN и Virtual Connect настроены правильным образом. В данной инструкции настройка аппаратной части не рассматривается. Если нужны подробности, оставьте вопрос в комментариях
  • Сеть Ethernet на сервере настроена и работает

План такой:

  1. Ставим необходимые пакеты
  2. Определяем порты Ethernet, которые пойдут под FCoE
  3. Настраиваем включение портов при запуске системы
  4. Настраиваем FCoE для выбранных портов
  5. Настраиваем инициализацию FCoE в ОС при запуске ОС
  6. Проверяем

Ставим необходимые пакеты:

ubuntu-kvm:~$ sudo apt update
ubuntu-kvm:~$ sudo apt dist-update
ubuntu-kvm:~$ sudo apt install -y sudo apt install fcoe-utils net-tools multipath-tools

Ищем наши порты FCoE. Для этого выводим список портов в ОС и сопоставляем их MAC-адреса с теми, что указаны для FC(FCoE)-портов в OneView (если вы повторяете работу в Synergy, или другим путем, если у вас другое оборудование).

ubuntu-kvm:~$ sudo ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3f0: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:03:ef brd ff:ff:ff:ff:ff:ff
3: ens3f1: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:05:68 brd ff:ff:ff:ff:ff:ff
4: ens3f2: mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:03:f0 brd ff:ff:ff:ff:ff:ff
5: ens3f3: mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:03:f1 brd ff:ff:ff:ff:ff:ff

В дальнейшем я буду приводить команды для одного интерфейса. Их надо повторять для каждого интерфейса с FCoE. Для этих портов не будет IP-адресов. Без них с настройками по умолчанию порты будут в выключенном состоянии (state DOWN). Нужно настроить включение портов при загрузке сервера. Ответ найден тут, ответ №2. Открываем или создаем файл с настройками интерфейсов:

sudo vim /etc/network/interfaces
Содержимое файла (в моем случае файл был создан с нуля и не содержал других настроек):
auto ens3f2
iface ens3f2 inet manual
up ifconfig ens3f2 up

auto ens3f3
iface ens3f3 inet manual
up ifconfig ens3f3 up
Имена интерфейсов ens3f2 и ens3f3 нужно поставить свои.

В необходимости следующего действия я не уверен. По моим наблюдениям, порты поднимаются без файлов конфигурации. Но во всех инструкциях этот пункт присутствует. Для каждого интерфейса создается файл настройки. 1. Копируем шаблон. 2. редактируем для одного интерфейса. 3. Готовый файл клонируем для другого интерфейса:

ubuntu-kvm:~$ sudo cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-ens3f2
ubuntu-kvm:~$ sudo vim /etc/fcoe/cfg-ens3f2
Название конечного файла конфигурации - "cfg-" + имя интерфейса, в моем случае это "ens3f2". Выделил важные параметры, которые надо раскомментировать и при необходимости изменить.
## Type: yes/no
## Default: no
# Enable/Disable FCoE service at the Ethernet port
# Normally set to "yes"
FCOE_ENABLE="yes"

## Type: yes/no
## Default: no
# Indicate if DCB service is required at the Ethernet port
# Normally set to "yes"
DCB_REQUIRED="no"

## Type: yes/no
## Default: no
# Indicate if VLAN discovery should be handled by fcoemon
# Normally set to "yes"
AUTO_VLAN="yes"

## Type: fabric/vn2vn
## Default: fabric
# Indicate the mode of the FCoE operation, either fabric or vn2vn
# Normally set to "fabric"
MODE="fabric"

## Type: yes/no
## Default: no
# Indicate whether to run a FIP responder for VLAN discovery in vn2vn mode
#FIP_RESP="yes"

Загружаем модуль ядра для FCoE и драйвер для функции FCoE для сетевой карты:

ubuntu-kvm:~$ sudo modprobe bnx2fc
ubuntu-kvm:~$ sudo modprobe fcoe
Будем загружать модули автоматически при запуске ОС. Редактируем файл /etc/modules:
ubuntu-kvm:~$ sudo vim /etc/modules
И в файле:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fcoe
bnx2fc

Следующий шаг - перезапустить демоны. Можно проверить статусы.

ubuntu-kvm:~$ sudo systemctl status lldpad
ubuntu-kvm:~$ sudo systemctl status fcoe-utils.service
ubuntu-kvm:~$ sudo systemctl status fcoemon.socket
Сам перезапуск
ubuntu-kvm:~$ sudo systemctl restart lldpad
ubuntu-kvm:~$ sudo systemctl restart fcoe-utils
ubuntu-kvm:~$ sudo systemctl restart networking.service
У меня при перезапуске "fcoe-utils" у меня появлялалсь ошибка, что сокет уже занят демоном "fcoemon". В этом случае я останавливал "fcoemon" и запускал "fcoe-utils".
На всякий случай ставим демоны в автозапуск:
ubuntu-kvm:~$ sudo systemctl enable lldpad
ubuntu-kvm:~$ sudo systemctl enable fcoe-utils

По идее после этих действий команда "fcoeadm -i" должна показать готовый интефейс, как на выводе ниже, а в списке накопителей появиться наши диски:

administrator@ubuntu-kvm:~$ fcoeadm -i
Failed reading capability ID at 0x48
Description: BCM57840 NetXtreme II Ethernet Multi Function
Revision: 11
Manufacturer: Broadcom Inc. and subsidiaries
Serial Number: Unknown
Driver: bnx2x 1.713.36-0
Number of Ports: 1

    Symbolic Name: bnx2fc (QLogic BCM57840) v2.12.10 over ens3f2
    OS Device Name: host2
    Node Name: 0x1000de73391001e7
    Port Name: 0x1000de73391001e6
    Fabric Name: 0x100000110a060887
    Speed: 8 Gbit
    Supported Speed: 1 Gbit, 10 Gbit
    MaxFrameSize: 2048 bytes
    FC-ID (Port ID): 0x011e01
    State: Online
Но в моем случае вывод было либо пустым, либо параметр State была равен Offline. А тома с СХД не видны.
administrator@ubuntu-kvm:~$ fcoeadm -i
Failed reading capability ID at 0x48
Description: BCM57840 NetXtreme II Ethernet Multi Function
Revision: 11
Manufacturer: Broadcom Inc. and subsidiaries
Serial Number: Unknown
Driver: bnx2x 1.713.36-0
Number of Ports: 1

    Symbolic Name: bnx2fc (QLogic BCM57840) v2.12.10 over ens3f2
    OS Device Name: host2
    Node Name: 0x1000de73391001e7
    Port Name: 0x1000de73391001e6
    Fabric Name: 0x100000110a060887
    Speed: 8 Gbit
    Supported Speed: 1 Gbit, 10 Gbit
    MaxFrameSize: 2048 bytes
    FC-ID (Port ID): 0x011e01
    State: Offline

Для того, чтобы всё заработало (в моем случае) нужно выполнить команду "sudo fipvlan -d -c -s -u <имя интерфейса> ". Опция "-d" дает подробный вывод на экран отладочной информации. Помогает при первичной настройке:

administrator@ubuntu-kvm:~$ sudo fipvlan -d -c -s -u ens3f2
fipvlan: creating netlink socket
fipvlan: Using /sys/bus/fcoe interfaces
fipvlan: sending RTM_GETLINK dump request
fipvlan: RTM_NEWLINK: ifindex 1, type 772, flags 10049
fipvlan: RTM_NEWLINK: ifindex 2, type 1, flags 11043
fipvlan: RTM_NEWLINK: ifindex 3, type 1, flags 1002
fipvlan: RTM_NEWLINK: ifindex 4, type 1, flags 11043
fipvlan: RTM_NEWLINK: ifindex 5, type 1, flags 11043
fipvlan: RTM_NEWLINK: ifindex 6, type 1, flags 11043
fipvlan: NLMSG_DONE
fipvlan: creating netlink socket
fipvlan: creating netlink socket
fipvlan: sending FIP VLAN request
fipvlan: waiting for IFF_RUNNING [1/20]
fipvlan: return from poll 1
fipvlan: received FIP VLAN Notification
fipvlan: VLAN ens3f2.3968 already exists as ens3f2.3968
Starting FCoE on interface ens3f2.3968
fipvlan: return from poll 0
fipvlan: return from poll 0
fipvlan: if 2: skipping, FIP not ready
fipvlan: if 3: skipping, FIP not ready
fipvlan: if 5: skipping, FIP not ready
Fibre Channel Forwarders Discovered
interface | VLAN | FCF MAC
------------------------------------------
ens3f2    | 3968 | XX:XX:XX:XX:07:d3

VLAN должен быть ненулевым. После этого у вас появится новый интерфейс, включающий номер VLAN. После надо выполнить эту же команду для других FCoE портов.
administrator@ubuntu-kvm:~$ fcoeadm -i
Failed reading capability ID at 0x48
Description: BCM57840 NetXtreme II Ethernet Multi Function
Revision: 11
Manufacturer: Broadcom Inc. and subsidiaries
Serial Number: Unknown
Driver: bnx2x 1.713.36-0
Number of Ports: 1

    Symbolic Name: bnx2fc (QLogic BCM57840) v2.12.10 over ens3f2.3968
    OS Device Name: host2
    Node Name: 0x1000de73391001e7
    Port Name: 0x1000de73391001e6
    Fabric Name: 0x100000110a060887
    Speed: 8 Gbit
    Supported Speed: 1 Gbit, 10 Gbit
    MaxFrameSize: 2048 bytes
    FC-ID (Port ID): 0x011e01
    State: Online

Проверяем, появились ли тома с СХД (выделены).

ubuntu-kvm:~$ cat /proc/partitions
major minor    #blocks name

    7     0      56276 loop0
    7     1      56712 loop1
    7     2      72984 loop2
    7     3      71436 loop3
    7     4      31836 loop4
    7     5      30600 loop5
    8     0  195325920 sda
    8     1     524288 sda1
    8     2  194798592 sda2
    8    64  104857600 sde
    8    80 2202009600 sdf
    8    32  104857600 sdc
    8    48 2202009600 sdd
  253     0 2202009600 dm-0
  253     1  104857600 dm-1

Видно, что видны как отдельные тома, а точнее пути к одному тому на СХД (sde и sdc, sdf и sdd), так и собранные мультипасингом тома sdf + sdd -&rt; dm-0, sde + sdc -&rt; dm-1. Настраивать мультипасинг руками не пришлось.

Команду "fipvlan" надо выполнять при каждом старте ОС. Поэтому сделаем сервис для нее. Альтернативные методы - использовать файл /etc/rc.local или crontab

Делаем скрипт с командой:

ubuntu-kvm:~$ sudo vim /usr/local/bin/fcoe-init.sh
ubuntu-kvm:~$ sudo chmod +x /usr/local/bin/fcoe-init.sh
В файле по строке для каждого интерфейса строки. опцию "-d" и сброс в лог "> /home/administrator/fcoe-init.log" можно убрать после отладки.
#!/bin/bash -e
/usr/sbin/fipvlan -d -c -s -u ens3f2 >> /home/administrator/fcoe-init.log
/usr/sbin/fipvlan -d -c -s -u ens3f3 >> /home/administrator/fcoe-init.log
Теперь файл сервиса:
ubuntu-kvm:~$ sudo vim /etc/systemd/system/fcoe-init.service
ubuntu-kvm:~$ sudo chmod +x /etc/systemd/system/fcoe-init.service
Cостав файла:
[Unit]
After=network.service

[Service]
ExecStart=/usr/local/bin/fcoe-init.sh

[Install]
WantedBy=default.target

Если пока всё шло хорошо, перезагрузите систему, проверьте, подключаются ли тома после перезагрузки ОС. Еще одна команда для просмотра томов в ОС:

ubuntu-kvm:~$ sudo fdisk -l
[sudo] password for administrator:
Disk /dev/loop0: 54.98 MiB, 57626624 bytes, 112552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop1: 55.39 MiB, 58073088 bytes, 113424 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop2: 71.28 MiB, 74735616 bytes, 145968 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop3: 69.78 MiB, 73150464 bytes, 142872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop4: 31.9 MiB, 32600064 bytes, 63672 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/loop5: 29.9 MiB, 31334400 bytes, 61200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sda: 186.28 GiB, 200013742080 bytes, 390651840 sectors
Disk model: LOGICAL VOLUME
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 262144 bytes / 262144 bytes
Disklabel type: gpt
Disk identifier: A674B582-0E3C-438C-B1B9-820C557E9671

Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 390647807 389597184 185.8G Linux filesystem

Disk /dev/sde: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: VV
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

Disk /dev/sdf: 2.5 TiB, 2254857830400 bytes, 4404019200 sectors
Disk model: VV
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

Disk /dev/sdc: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: VV
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

Disk /dev/sdd: 2.5 TiB, 2254857830400 bytes, 4404019200 sectors
Disk model: VV
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

Disk /dev/mapper/mpatha: 2.5 TiB, 2254857830400 bytes, 4404019200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

Disk /dev/mapper/mpathb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 16384 bytes / 16777216 bytes

На этом всё. Спасибо, что были с нами. Оставляйте вопросы в комментариях

4 комментария:

Сергей комментирует...

Подскажите, какие настройки сети нужно выставить в OneView?
При установке Ubuntu система ругается, что интерфейсы не работают. Сеть не поднимается

Евгений комментирует...

Сергей, добрый день!

В настройках OneView сделано несколько виртуальных портов на адаптере. На первом рисунке они видны. FC-порты (3:1b, 3:2b) не не поднимаются. Вся статья о том, как заставить их работать. Интерфейс 3:1a - нетегированный порт, на который заведен VLAN моего демостенда. Если я правильно помню, то в процессе установки он работал. Адаптер в сервере - 3820C. С другими не пробовал.

я бы предложил поставить Ubuntu даже без сети (если ни один порт не работает) через Virtual Media. И потом занаться диагностикой из самой ОС.

Еще такой вопрос. Другие ОС на этом или других серверах видят сеть? Проблема именно с Ubuntu? Или проблема не зависит от ОС и дело в настройках OneView

Если не получится, сделайте снимки экрана, выложите куда-нибудь (Гугл.Драйв, Яндекс.Диск). Как настроен профиль, что показывается ip addr в Ubuntu?

Сергей комментирует...

Евгений, благодарю за ответ, попробуем.
На серверах в шасси стоит так же Windows Server 2019 Datacenter - он сразу увидел 2 интерфейса, подключённых в Server Profile

Евгений комментирует...

Сергей, добрый день!

Что скажете? Какие результаты?