Всем бобра.
Был DAS cfi-b8253jdgg на 5 дисков по 4Тб (для NAS WD) в 5 рэйд массиве. Места стало мало (под бэкапы), решили расширить. Купили диски по 6Тб, предел для аппарата, из линейки для датацентров. Такой выбор связан с большой ежедневной нагрузкой во время бэкапа, речь идет не о 20 Гб, а о примерно 150 в сутки с последующим архивированием, а также архивирования 1,5Тб раз в неделю. При попытке перегнать данные на новоиспеченный DAS он просто зависал на смерть, как потом выяснилось проблема была в бракованном диске. Но к этому моменту я понял, что покупать такие диски в такой коробок не имеет смысла, т.к. коробок ограничен портами SATA2, с выходом через USB3.0 и слабым охлаждением (для этих дисков). Плюс невозможность контролировать состояние дисков в автоматическом режиме (Zabbix).
Было принято решение собрать NAS на базе Unix системы.
Конфигурация (делал 2 коробки, цена 1 штука):
- Корпус FRACTAL DESIGN Node 304 - 5612 руб
- Материнская плата ASRock H370 S1151 MITX H370M-ITX/AC - 7240 руб
- Накопитель SSD Patriot PS128GPM280SSDR - 1916 руб
- Блок питания AeroCool VX-500 PLUS ATX 500W -1613 руб
- Видеокарта MSI PCIE16 GT710 1GB GDDR3 GT 710 1GD3H LP - 2158
- Оперативная память Kingston DDR4 4Gb 2666MHz KVR26N19S6/4 RTL PC4-21300 CL19 DIMM 288-pin 1.2В - 1308 руб
- Процессор Intel Original Core i3 9100F Soc-1151v2 Box - 6683
- Жесткий диск WD Ultrastar DC HC310 HUS726T6TALE6L4, 6Тб - 5 штук
В ходе реализации были внесены изменения, связанные с ошибками в общей настройке (в самом конце)
Комментарии к конфигурации:
ОЗУ можно больше, т.к. ISCSI ее использует.
Процессор можно проще, если отказаться от шифрования
Видеокарта нужна только из-за "F" в процессоре - без видео
Выбор материнской платы основан на:
- Порты: 6*SATA3 и 1*M.2 NVMe (если установить накопитель не SATA, то будут работать все SATA порты)
- Форм-фактор: micro-ITX
Корпус позволяет установить до 6ти 3,5 дюймовых дисков. Диски располагаются в воздушный поток, создаваемый двумя кулерами спереди и одним большим сзади. Размер корпуса минимален относительно общих характеристик.
- Интерфейсы: 2*1Gbps порта
Материнские платы мне пришлось брать в других магазинах, все остальные запчасти, кроме дисков, купил в одном магазине. Стоимость одной коробки составила 26950, плюс диски 63500. Итого: 90 450
Слева новая коробка, справа старая |
Решили в итоге сделать так:
- Установить Ubuntu Server 18.04 LTS
- Создать RAID5 силами mdadm (источник)
- Зашифровать раздел силами Crypt (источник)
- Создать ISCSI (источник и источник)
- Подключить к Windows (10)
- Подключить к Ubuntu 14.04,18.04 (источник)
I
С установкой ОС проблем возникнуть не должно. На одном из этапов установки создаем bond c BondMode 802.03d. XMIT HASH policy подбираем, если он неправильно указан DHCP не отработает. Соответственно на коммутаторе также должен быть настроен LACP на эти порты. В моем случае это управляемый коммутатор D-Link DGS-1210-24.
При разметке диска 60Гб оставил не занятым, т.к. думаю выделить его под SWAP
II
Создаем рэйд. В моем случае нужно было сначала удалить разделы со всех дисковuser@fnode1: ls /dev/sd*
user@fnode1: sudo fdisk /dev/sda
Command (m for help): d
Command (m for help): w
Потом создаем массив:
user@fnode1: sudo mdadm --create --verbose /dev/md0 --level=5 --raid-device=5 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde
На синхронизацию понадобилось около 8 часов. Один из дисков в /proc/mdstat отображался как потерянный [UUUU_], но общее состояние массива было нормальным. Оставил как есть и спустя 8 часов все встало на место. Мы получили массив 21.9Тб
В моем случае были какие то левые разделы на md0, все решилось форматированием:
В моем случае были какие то левые разделы на md0, все решилось форматированием:
user@fnode1: sudo mkfs.ext4 -b 4096 -E stride=16,stripe-width=64 /dev/md0
III
Устанавливаем пакеты crypt:
user@fnode1: sudo apt-get install cryptsetup
Инициализируем диск для шифрования, открываем его и форматируем:
user@fnode1: sudo cryptsetup luksFormat /dev/md0
user@fnode1: sudo cryptsetup luksOpen /dev/md0 md0_crypt
user@fnode1: sudo mkfs.ext4 -v -L DATA /dev/mapper/md0_crypt
IV
Устанавливаем пакеты для ISCSI:
user@fnode1: sudo apt-get install targetcli-fb
Вот тут начинается самое веселое:
Если нужен автозапуск, то в этой версии Ubuntu настраивается так:user@fnode1: sudo systemctl enable rtslib-fb-targetctl.service
user@fnode1: sudo systemctl start rtslib-fb-targetctl.service
Но не забываем, для автозапуска ISCSI нужно чтобы шифрованный раздел был доступен, а также жесткая привязка массива к своему имени. Но в это случае какой смысл в шифровании если достаточно обойти пароль рут пользователя? Поэтому я делаю без автозапусков.
Потом создаем массив:
user@fnode1: sudo targetcli
>cd /backstores/block/
>create backup_block /dev/mapper/md0_crypt
>cd /iscsi
>create wwn=iqn.2003-05.ru.example.iscsi:fnode1
Правило создания wwn - iqn.YYYY-MM.zone.domain.iscsi:uniq_name
YYYY-MM - год-месяц регистрации домена
zone - зона домена (например .ru)
domain - сам домен
uniq_name - уникальное имя
Прошу обратить внимание, по умолчанию uniq_name равен имени ПК, и если делать на автомате, то можно получить ошибку:
Портал создается автоматически, если нет пожеланий, то оставляем как есть. Просто проверим
YYYY-MM - год-месяц регистрации домена
zone - зона домена (например .ru)
domain - сам домен
uniq_name - уникальное имя
Прошу обратить внимание, по умолчанию uniq_name равен имени ПК, и если делать на автомате, то можно получить ошибку:
wwn not valid as iqn naa euiТ.к. имя может содержать недопустимые знаки, например нижнее подчеркивание. У меня проблема решилась перезагрузкой системы без сохранения конфигурации.
Портал создается автоматически, если нет пожеланий, то оставляем как есть. Просто проверим
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/portals/
>ls
o- 0.0.0.0:3260 ...........................................................[OK]
Создаем юниты (LUNs):
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/luns
>create /backstores/block/backup_block
V
Основная часть работы проделана. Я хотел обязательно делать с авторизацией и тут возник затык. Для авторизации нужно для LUN указать "учетные данные". Их может быть некоторое количество для каждого юнита. В таргете может быть несколько юнитов и т.д. Мы рассматриваем вариант 1 блок > 1 таргет > 1 юнит > 1 acl
На примере подключения для Windows. Нужно изменить или узнать iqn клиента (инициатора) (Панель управления - Инициатор ISCSI - конфигурация - изменить)
я указал здесь: iqn.2003-05.ru.example.iscsi:aa
ВНИМАНИЕ. Для ОС семейства Windows длина пароля должна быть между 12-16 байтами, т.е. 12-16 символов латинской раскладки
Создаем ACL, и привязываем пароль к iqn
ВНИМАНИЕ. Для ОС семейства Windows длина пароля должна быть между 12-16 байтами, т.е. 12-16 символов латинской раскладки
Создаем ACL, и привязываем пароль к iqn
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/acls/
>create iqn.2003-05.ru.example.iscsi:aa
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/acls/iqn.2003-05.ru.example.iscsi:aa
>set auth userid=iqn.2003-05.ru.example.iscsi:aa password=MoyParol
Если мы хотим настроить двухстороннюю проверку, то нужно узнать iqn самого сервера (target) хранится в файле /etc/iscsi/initiatorname.iscsi:
user@fnode1: sudo cat /etc/iscsi/initiatorname.iscsi
В моем случае это: iqn.1993-08.org.debian:01:blauser@fnode1: sudo targetcli
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/acls/iqn.2003-05.ru.example.iscsi:aa/
>set auth mutual_userid=iqn.1993-08.org.debian:01:bla mutual_password=MutalParol
На стороне клиента пароль Mutal указывается в разделе CHAP:Далее пробуем подключиться (имя указанное в поле имя игнорируется!):
Если настроен Mutal, то нужно поставить галочку "Выполнить взаимную проверку подлинности".
Если все прошло хорошо, состояние должно измениться на подключено, а в диспетчере дисков должен появится непроинициализированный диск на 22Тб.
VI
В моем случае инициатором будет выступать Ubuntu 14.04 (также подходит для 18.04), поэтому инструкция для нее:Я создал отдельный ACL для этого инициатора:
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/acls/
>create iqn.2003-05.ru.example.iscsi:vsv01
>cd /iscsi/iqn.2003-05.ru.example.iscsi:fnode1/tpg1/acls/iqn.2003-05.ru.example.iscsi:vsv01
>set auth userid=iqn.2003-05.ru.example.iscsi:vsv01 password=MoyParol mutual_userid=iqn.1993-08.org.debian:01:bla mutual_password=MutalParol
Устанавливаем пакет и настраиваем:
user@vsv01: sudo apt-get install open-iscsi
user@vsv01: sudo nano /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = iqn.2003-05.ru.example.iscsi:vsv01
node.session.auth.password = MoyParol
node.session.auth.username_in = iqn.1993-08.org.debian:01:bla
node.session.auth.password_in = MutalParol
user@vsv01: sudo nano /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-05.ru.example.iscsi:vsv01
Далее пытаемся подключиться (10.20.0.14 - адрес fnode1):
user@vsv01: sudo /etc/init.d/open-iscsi restart
user@vsv01: sudo iscsiadm -m discovery -t sendtargets -p 10.20.0.14
user@vsv01: sudo iscsiadm -m node -o show
user@vsv01: sudo iscsiadm -m node --login
user@vsv01:
Проверяем наличие нового устройства:user@vsv01: cat /proc/partitions
....
8 48 23441559552 sdd
....
user@vsv01: sudo fdisk -l /dev/sdd
Создаем раздел:
user@vsv01: parted --script /dev/sdd "mklabel gpt"
user@vsv01: parted --script /dev/sdd "mkpart primary 0% 100%"
user@vsv01: mnt /dev/sdd1 /mnt/
Отключаем так:
user@vsv01: sudo iscsiadm -m node -o delete -T iqn.2003-05.ru.example.iscsi:fnode1 -p 10.20.0.14
user@vsv01: sudo iscsiadm -m node -u -T iqn.2003-05.ru.example.iscsi:fnode1 -p 10.20.0.14
скрипт для подключения шифрованного устройства и запуск службы iscsi (предварительно сделать резервную копию в файл:/etc/rtslib-fb-target/backup.json):
if [[ $EUID -ne 0 ]]
then
echo "This script must be run as root"
exit 1
else
cryptsetup luksOpen /dev/md0 md0_crypt && sleep 5 && systemctl start rtslib-fb-targetctl.service && targetcli restoreconfig /etc/rtslib-fb-target/backup.json
fi
Разбор ошибок
Конфигурация. Объем SSD (системного диска) 128Гб великоват, 60Гб за глаза.
Процессор можно было и по проще взять, например Intel Pentium Gold G5400 за 3800, а не 6700. Экономия 3000 с коробки.
Плюс Gold имеет графическое ядро, т.о. экономим еще 2200 рублей с каждой коробки.
Итого стоимость сборки можно было снизить на (3000+2200)=5200, и стоимость сборки обошлась бы в 26950-5200=21750.
На эту разницу с двух коробок (5200*2=10400) плюс стоимость 1 процессора (3800) можно было бы в одну коробку поставить процессор по-мощнее - INTEL Core i5 9500, который не на много слабее E3-1246 v3 (именно этот процессор отвечает за архивирование) и перевести полностью процесс резервного копирования на 1 одну коробку. Этим убили бы еще одного зайца - сервер отвечающий за процесс резервного копирования зависает на смерть при попытке копирования большого объема на максимально возможной скорости, пришлось занижать скорость копирования файлов и ждать дольше.
Конфигурация. Диски. Из 11 купленных дисков, два оказались бракованными. Перед вводом в эксплуатацию каждый диск проверяется на последовательное чтение/запись от начала до конца, а по завершении проверяется в режиме butterfly значок >?< на запись и чтение по 5 часов.
Второй коробок начал капризничать - после перезагрузки массив терял диски.
Восстанавливал и снова терял после перезагрузки. Как выяснилось, ASrock может удалять superblock с дисков о_О. Поэтому пришлось создавать массив не на самих устройствах, а на разделах этих устройств (желательно со смещением на пару мегабайт).
Далее, я создавал раздел на подключенном устройстве, но этого не обязательно было делать. Не уверен что потом удастся локально примонтировать такой раздел, т.к. локально он не определяется.
Комментариев нет:
Отправить комментарий