Iscsi сховище для небагатих

Доброго времени суток, шановне товариство!

У цій статті я хотів би поділитися досвідом створення дискового сховища, який вилився в безліч експериментів, проб, помилок, знахідок, приправлених гіркими розчаруваннями. І, нарешті, завершився в якомусь цікавому, щодо бюджетному і швидкому сховище.

Якщо у вас є подібна задача або вас просто зацікавив заголовок, то ласкаво просимо під хабракат.

Отже, недавно перед нашим відділом постало завдання забезпечити кластер з гіпервізора VMware ESXi 5.1 сховищем великого об'єму. На ньому ж ми запланували розташувати шифрований maildir для dovecot і "хмарне" файлове сховище. Обов'язковою умовою виділення бюджету було забезпечення місця для зберігання критично важливою для компанії інформації, причому цей розділ повинен бути зашифрований.

На жаль, а може і на щастя, під такі амбітні завдання великим бюджетом нас не обтяжили. Тому дозволити собі будь-яке брендове сховище ми, як справжні шанувальники максималізму, не могли, і в рамках виділених матеріальних ресурсів вибрали наступне залізо:

  • Серверний корпус Supermicro CSE-836BE16-R920B
    Тут було багато міркувань, вибирали кількість юнітів, розмір жорстких дисків, їх швидкість, корпус або відразу платформа, переглянули безліч варіантів, покурили інтернетів і в підсумку зупинилися на цьому варіанті, як на оптимальному під наші завдання.
  • Материнська плата Supermicro MBD-X9DRI-F-O
    Головною умовою була наявність 4 портів PCI-E x8.
  • Процесори Intel Xeon E5-2603
    Вибір був простий - на що вистачило грошей. До того ж довелося ставити 2 процесора відразу, а не спочатку один, потім, якщо треба буде, то докупити, бо з одним зайнятим слотом працює тільки 3 PCI-E, а нам треба було 4.
  • Диски Seagate Constellation ES.3 ST3000NM0033
    SATA бо дешевше, і в ті ж гроші ми отримували багато разів більшу кількість вільного місця, ніж при використанні SAS.
  • RAID контролер Adaptec ASR-7805Q
    Раз вже це СГД, то з контролером розмінюватися на дрібниці не стали. У цій серії є SSD кешування, яке дуже б нам знадобилося, і є BBU відразу в комплекті, що теж дуже корисна опція.
  • SSD диски Intel SSDSC2CW240A310
    Вони потрібні були виключно для того, щоб працював MaxCache (він же SSD кеш).
  • Мережеві карти Intel X520 DA2
    Щоб уникнути вузького місця на мережеві інтерфейси, треба було забезпечити 10Gb лінк між нодамі ESXi і СГД. Після вивчення пропозицій ринку ми прийшли може і до не елегантному, але зате до потрібного за ціною і швидкості варіанту з використанням 10 гігабітних мережевих карт.

Все це обійшлося нам приблизно в 200 тисяч рублів.

Реалізація

Видавати таргети, чи то пак виділяти ресурси СГД споживачам, ми вирішили за допомогою iSCSI і NFS. Найбільш розумним і швидким рішенням, звичайно, було б використовувати FCoE, щоб не влазити в TCP з відповідними йому накладними витратами, що, в общем-то можна було б зробити з нашими мережевими картами, але, на жаль, у нас немає SFP світча з підтримкою FCoE, купити його не було можливості, так як це коштувало б нам 500 т.р. зверху.
Ще раз покуривши інтернети, знайшли вихід з цього в технології vn2vn, але ESXi навчиться працювати з vn2vn тільки до 6.x версії, тому, не думаючи далі, приступили до того, що є.

Наш корпоративний стандарт для Linux серверів - CentOS, але в поточному ядрі (2.6.32-358) шифрування працює дуже повільно, тому довелося використовувати в якості ОС Fedora. Звичайно це полігон Red Hat, але в останніх ядрах Linux дані шифруються практично "на льоту", а решта нам, начебто, і не потрібно.
До того ж поточна 19 версія буде використана як основа для RHEL 7, а отже дозволить нам в майбутньому безболісно перейти на CentOS 7.

Щоб не роздувати статтю і не віддалятися від теми я опускаю всі нецікаве типу збірки заліза, бодання з контролером, установки ОС та іншого. Також постараюся якомога менше описувати сам таргет і обмежитися тільки його роботою з ініціатором ESXi.

Від таргета ми хотіли отримати наступне:

Зустрічайте, ось вони.

www.peach.ne.jp/archives/istgt
Використовується в FreeBSD.
Таргет працює досить добре, за винятком декількох але.
По-перше, він не вміє blockio, по-друге, не може використовувати різні MaxRec і MaxXtran, принаймні мені цього не вдалося. При невеликих значеннях MaxRec швидкість послідовного запису не перевищувала 250 МБ / сек, а читання була на цілком високому рівні - 700 МБ / сек. Приблизно по 40K іопсов я отримав при рандомних записи 4к з глибиною черги 32. При збільшенні MaxRec швидкість запису підвищується до 700 МБ / сек, читання падає до 600 МБ / сек. Іопси падають до читання 30К і 20К на запис.
Тобто якось можна було б знайти золоту середину, змінюючи налаштування, але якось це здалося Трувій.

stgt.sourceforge.net
З цим Таргет виникли проблеми з налаштуванням інтерфейсу з гіпервізором. ESXi постійно плутав LUN - брав одні за інші, або переставав бачити зовсім. Була підозра на проблему в некоректній прив'язці серійних номерів, але прописування їх в конфігах не допомогло.
Швидкість також не порадувала. Добится від нього більше 500 МБ / сек ні на читання, ні на запис не вдалося. Кількість IOPS на читання - 20К, на запис приблизно 15К.
В результаті - проблеми з конфіг і невисокі показники в швидкості. Відмовити.

scst.sourceforge.net
І нарешті добралися до лідера нашої гонки.
Після пересборки ядра і мінімальної настройки самого таргета ми отримали 750МБ / сек читання і 950МБ / сек записи. IOPS в режимі fileio - 44K на читання і 37K на запис. Відразу, майже без бубна.
Цей таргет здався мені ідеальним вибором.

iSCSI для VMWare ESXi 5.1 на SCST і Fedora

І тепер, власне, те, заради чого ми всі тут зібралися.
Невелика інструкція по налаштуванню таргета і ініціатора ESXi. Я не відразу вирішив спробувати написати статтю на Хабре, тому інструкція буде не покрокової - відновлюю по пам'яті, але в ній будуть основні моменти настройки, які дозволили домогтися потрібних результатів.

Підготовка ESXi 5.1

У гіпервізора зроблено такі настройки:

  • в настройках iSCSI ініціатора відключений Delayed ACK для всіх Таргет. Зроблено відповідно до: kb.vmware.com/selfservice/microsites/search.do?language=en_UScmd=displayKCexternalId=1002598
  • параметри ініціатора змінені відповідно до параметрів таргета:

InitialR2T = No
ImmediateData = Yes
MaxConnections = 1
MaxRecvDataSegmentLength = 1048576
MaxBurstLength = 1048576
FirstBurstLength = 65536
DefaultTime2Wait = 0
DefaultTime2Retain = 0
MaxOutstandingR2T = 32
DataPDUInOrder = No
DataSequenceInOrder = No
ErrorRecoveryLevel = 0
HeaderDigest = None
DataDigest = None
OFMarker = No
IFMarker = No
OFMarkInt = Reject
IFMarkInt = Reject

Буде потрібно відключити Interrupt Moderation і LRO для мережевих адаптерів. Зробити це можна командами:

Для того щоб повторно не встановлювати ці значення, їх можна додати в цей скрипт:

підготовка Fedora

Завантажуємо і встановлюємо в мінімальному варіанті останню версію Fedora.

Оновимо систему і перезавантажити:

Система буде працювати тільки в локальній мережі, тому я відключив брандмауер і SELinux:

Налаштуємо мережеві інтерфейси і відключимо сервіс NetworkManager.service. Він не сумісний з BRIDGE інтерфейсами, а це було необхідно для NFS.

На мережевих картах відключено LRO.

За рекомендаціями від Intel та змінення таких установок системи:

підготовка таргета

Але для того, щоб не виникло труднощів опишу підготовку докладно.

Перейдемо в його середовище:

Встановимо пакети для збирання і підготуємо вихідні ядра:

Тепер потрібні самі патчі. Завантажити SCST з svn сховища:

Скопіюємо необхідні пачті в

Додаємо рядок в конфіг ядра:

Приступимо до редагування kernel.spec.

Додаємо наші патчі, бажано після всіх інших:

Додаємо команду застосування патча, рекомендовано додати після інших записів:

Після всіх дій запускаємо збірку rpm пакетів ядра з включеними файлами firmware:

Після завершення збирання встановлюємо ядро ​​firmware та заголовки ядра:

Після успішної, сподіваюся, завантаження перейдіть в каталог з вихідними кодами SCST і вже користувачем root зберіть сам таргет:

Після складання додайте сервіс в автозапуск:

І налаштуйте конфиг в /etc/scst.conf. Наприклад мій:

Після настройки файлів конфігураци запустіть SCST:

Якщо все було зроблено правильно, то в ESXi з'явиться відповідний таргет.

Спасибі, що дочитали до кінця!

Схожі статті