Доброго времени суток, шановне товариство!
У цій статті я хотів би поділитися досвідом створення дискового сховища, який вилився в безліч експериментів, проб, помилок, знахідок, приправлених гіркими розчаруваннями. І, нарешті, завершився в якомусь цікавому, щодо бюджетному і швидкому сховище.
Якщо у вас є подібна задача або вас просто зацікавив заголовок, то ласкаво просимо під хабракат.
Отже, недавно перед нашим відділом постало завдання забезпечити кластер з гіпервізора 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 з'явиться відповідний таргет.
Спасибі, що дочитали до кінця!