ATA over Ethernet

Материал из RSU WiKi
Перейти к: навигация, поиск

Использование ATA over Ethernet в Linux

ОС и ПО: Linux, mdadm
В основу положена статья: ATA Over Ethernet: Putting Hard Drives on the LAN на LinuxJournal
Перевод, редактирование: Игорь Чубин
Правильная ссылка: [1]

Описываемая технология построения хранилищ даёт возможность строить дисковые массивы для архивов, резервных копий или традиционного использования на базе обычных дисков ATA, которые дешевле даже чем лента.


Содержание

Введение

У всех рано или поздно заканчивается место на диске. К счастью, жёсткие диски становятся больше и дешевле. Но даже так: больше дисков, и диски больше, но всё равно -- рано или поздно они заканчиваются опять.

Данные некоторых видов огромны просто в силу своей природы. Видео, например, всегда потребляет большой объём диска. Сейчас часто нужно хранить видео данные, особенно когда видеонаблюдение стало так распространено. Даже дома нам нравится смотреть и делать фильмы на компьютере.

Резервное копирование и избыточность данных имеет существенное значение для любого дела, в котором используются компьютеры. Похоже, не важно, какой объём хранилища -- всегда хочется иметь больше. Даже почта может вырасти за пределы контейнера, в котором она лежит. Это хорошо известно провайдерам Интернет-услуг.

Хранилище неограниченного размера становится реальностью, когда диски выходят за пределы корпуса, отвязывая хранилище от компьютера, которые использует его. Принцип развязки связанных компонент с целью достижения большей гибкости хорошо показал себя во множестве различных областей, не только при построении хранилищ. Модульный код обладает гибкостью, которая позволяет применять его в непредвиденных ситуациях, как стерео-система, сделанная из компонентов, может использоваться в различных интересных конфигурациях, а не только как аудио-комбайн.

Наиболее известный пример хранилищ работающих из коробки это, наверное, SAN (storage area network). Когда SAN'ы только появились вокруг них был большой шум и переполох. Сложно было выяснить, что же это в действительности такое. А когда в итоге это всё-таки получилось, выяснилось что это нечто сложное, проприетарное и дорогое.

Однако, поддерживая SAN'ы Linux-сообщество сделало несколько полезных изменений в ядре. Сегодня в ядрах Linux есть возможности, которых ещё несколько лет назад очень не хватало. Они могут использоваться гигантские блочные устройства, выходящие далеко за старые пределы в два терабайта. Они поддерживают намного больше одновременно подключённых дисков. Также появилась поддержка хитрого управления томами. В дополнение ко всему прочему, файловые системы могут теперь расширяться до огромных размеров, даже когда они смонтированы и используются.

В этой статье рассматриваются новые пути использования эти возможности ядра: диски выносятся из компьютера старые пределы ёмкости преодолеваются. Можно воспринимать ATA over Ethernet как способ заменить ваш IDE-кабель сетью Ethernet. Когда хранилище и компьютер развязаны и между ними стоит такая гибкая вещь как Ethernet, возможности ограничены только воображением и желанием изучать новые вещи.

Что такое AoE

ATA over Ethernet (AoE) -- это сетевой протокол, зарегистрированный IEEE как Ethernet-протокол номер 0x88a2. AoE это низкоуровневый протокол, намного более простой чем TCP/IP или даже просто IP. TCP/IP и IP нужны обязательно, если требуется организовать (надёжную) передачу данных через Интернет, но на компьютер в этом случае ложится намного большая нагрузка, для того чтобы обеспечить ту сложность, которая присуща этим протоколам.

Пользователи iSCSI заметили эту проблему с TCP/IP. iSCSI -- способ перенаправить ввод/вывод поверх TCP/IP, так что дешёвое Ethernet-оборудование может использоваться вместо дорогого оборудования Fibre Channel. Многие пользователи iSCSI начали покупать механизмы разгрузки TCP (TCP offload engines, TOE). Эти устрйоства довольно дорогие, но они снимают часть нагрузки TCP/IP с машин, использующих iSCSI.

Интересное наблюдение, что в большинстве своём iSCSI не используется поверх собственно сети Интернет. Чаще всего пакеты просто передаются на машину, стоящую в соседней серверной стойке, и в этом случае вся мощь TCP/IP оказывается просто избыточной.

Поэтому, почему бы вместо того что разгружать TCP/IP вообще от него не избавиться? Протокол AoE делает именно это, и дополнительно использует преимущества современных коммутаторов. У соверменных коммутаторов есть возможность управления потоком, повышающая производительность и сводящая на нет коллизии пакетов. В локальной сети сохраняется последовательность пакетов и для каждого пакеты сетевым оборудованием вычисляется контрольная сумма.

В каждом AoE пакете находится команда для ATA-диска или ответ от ATA-диска. Драйвер AoE в ядре Linux выполняется AoE и делает диск доступным как обычное блочное устройство, такое, например, как /dev/etherd/e0.0 -- точно также как IDE-драйвер делает диск, подключённый к концу IDE-кабеля, доступным как /dev/hda. Драйвер если нужно ретранслиурет пакеты, так что AoE-устройство выглядит для остального ядра как обычный диск.

В дополнение к ATA командам, у AoE есть простая возможность идентификации доступных устройств с помощью конфигурационных опросных пакетов (query config packets). Это всё: ATA команды и конфигурационных опросные пакеты.

Любой, кто работает с SAN или хотя бы читал о них, может удивиться в этом месте и сказать: "Если все диски находятся в сети, тогда как я могу ограничить доступ к дискам?" То есть, как я могу знать, если машину А взломали, что диски машины B в безопасности?

Ответ в том, что AoE немаршрутизируемый протокол. Можно легко определить какой компьютер будет видеть какие диски путём конфигурирования Ethernet-сети. Поскольку AoE-устройства не имеют своих IP-адресов, элементарно создать изолированные Ethernet-сети. Просто включить коммутатор и подключить что нужно. К тому же, большинство современных коммутаторов имеют возможность создания VLAN'ов по портам, что позволяет легко разделить коммутатор на несколько широковещательных доменов.

Протокол AoE настолько легковесный, что даже недорогое железо может его использовать. На момент написания англоязычной статьи Coraid был единственным производителем оборудования AoE; остальным разработчикам программного и аппаратного обеспечения должно понравиться то, что описание спицификаций AoE помещается на 8 страниц. Простота протокола выглядит контрастно по отношению к iSCSI, который описывается на сотнях страниц, включая спецификации по шифрованию, маршрутизации, контролю доступа и множеству всего. Сложность не даётся просто так, сейчас у нас есть выбор между сложным и дешёвым.


Простые примитивы могут быть очень мощными. Не секрет, что даже с простотой AoE огромнейшее количество возможностей появляется, когда хранилище находится в сети. Давайте начнём с простого примера и потом обсудим некоторые возможности.

Стэн-архиватор

Этот пример базируется на настоящей истории. Стэн -- вымышленный админ, работающий на государственной службе. В соответствии с новым государственным законом все официальные документы должны архивироваться. Любой гражданин государства может потребовать показать любой документ в любое время. Из-за этого Стэну понадобилось огромное хранилище, которое может расти без всяких ограничений. Производительность хранилища может не быть больше производительности локального диска. Любые данные из хранилища должны доставаться легко и мгновенно.

Стэн уверенно чувствует себя в системном администрировании Linux и Ethernet сетях, и из-за этого он решает попробовать для своей задачи ATA over Ethernet. Он покупает кое-какое оборудование, потратив на это меньше $6.5K:

  • Одна двухпортовая гигабитная Ethernet-карта, вместо старой 100-мегабитной карты.
  • Один 26-портовый коммутатор с двумя гигабитными портами.
  • Одну полку Coraid EtherDrive и десять блэйдов EtherDrive.
  • Десять 400GB ATA жестких дисков.

The shelf of ten blades takes up three rack units. Each EtherDrive blade is a small computer that performs the AoE protocol to effectively put one ATA disk on the LAN. Striping data over the ten blades in the shelf results in about the throughput of a local ATA drive, so the gigabit link helps to use the throughput effectively. Although he could have put the EtherDrive blades on the same network as everyone else, he has decided to put the storage on its own network, connected to the server's second network interface, eth1, for security and performance.

После того как Стэн прочитал [Linux Software RAID HOWTO], он решил использовать RAID-10 -- чередование поверх зеркалированных пар. Хотя этак конфигурация не даёт столько ёмкости как конфигурация RAID 5, она максимизирует отказоустойчивость, надёжность, снижает нагрузку на процессор и время реинициализации диска при замене.

После того как Стэн прочитал [LVM HOWTO], Стэн придумал план как навсегда избежать ситуации с переполненными дисками. Файловая система JFS может динамически увеличиваться до огромных размеров, поэтому он решил выбрать и использовать её на логических томах. В качестве физических устройств будут блочные устройства RAID 10. Сами же устройства RAID 10 будут собраны из хранилищ EtherDrive в полке Coraid с помощью программного RAID Linux. В дальнейшем, при необходимости он сможет купить новую заполненную полку, создать ещё один RAID 10, превратить его в физический том, и использовать этот том для расширения объёма своего логического тома с JFS.

На листинге 1 показаны команды, которые Стэн использует для подготовке своего сервера к работе с ATA over Ethernet. Он компилирует драйвер AoE с AOE_PARTITIONS=1, поскольку у него Debian система Sarge с ядром 2.6. Sarge не поддерживает большие минорные номера (на момент написания англоязычной статьи), поэтому он выключает поддержку разделов, для того чтобы использовать побольше дисков. Кроме того, из-за бага Debian 292070, Стэн вынужден установить последнюю программу отображения устройств (device mapper) и пользовательское программное обеспечение LVM2.

Листинг 1. Первый шаг в построении программного RAID-устройства на основе AoE-дисков это настройка AoE

## setting up the host for AoE
## build and install the AoE driver
# tar xvfz aoe-2.6-5.tar.gz
# cd aoe-2.6-5
# make AOE_PARTITIONS=1 install
## AoE needs no IP addresses!  :)
# ifconfig eth1 up
## let the network interface come up
# sleep 5
## load the ATA over Ethernet driver
# modprobe aoe
## see what aoe disks are available
# aoe-stat

Минорные номера устройств

Программы, которые хотят использовать устройство, как правило, обращаются к нему через специальный файл, соответствующий ему. Типичный пример -- файл /dev/hda. Команда ls -l покажет для этого устройства, /dev/hda, номера 3 и 0. Мажорный номер 3 и минорный номер 0. А у устройства /dev/hda1 минорный номер 1, в то время как мажорный номер тоже 3.

До ядра 2.6 минорный номер был 8битный, ограничивая возможное количество номеров от 0 до 255. Ни у кого и не было столько устройств, поэтому ограничение не имело существенного значения. Теперь, когда диски могут быть отвязаны от серверов, ограничение стало важным -- в настоящее время ядро 2.6 использует до 20 бит для минорного номера устройства.

Иметь 1048576 разных значений для минорного номера это большая помощь для систем, в которых много устройств, но не всякое программное обеспечение может с этим разобраться. Если glibc или другая программа всё ещё думает, что минорные номера 8-битные, будет проблематично заставить её использовать номера превышающие 255.

Для облегчения перехода, драйвер AoE может быть скомипилирован без поддержки разделов. Это позволит вместо 16 номеров на диск использовать только один. Так что, даже на системах, которые до сих пор не поддерживают большие минорные номера как ядро 2.6, можно использовать до 256 AoE дисков.

Команды для создания файловой системыи логических томов показаны на листинге 2. Стэн решил назвать группу ben и логический том franklin. После этого нужно сделать небольше изменения в конфигурации LVM2. Во-первых, нужно добавить строку с типом = [ "aoe", 16 ], так чтобы LVM распознал AoE-диски. Во-вторых, нужно указать md_component_detection = 1, чтобы диски внутри RAID 10 игнорировались, как только весь RAID 10 стал физическим томом.

Листинг 2. Установка программного RAID и группы томов LVM

## speed up RAID initialization
# for f in `find /proc | grep speed`; do
>        echo 100000 > $f
> done
## create mirrors (mdadm will manage hot spares)
# mdadm -C /dev/md1 -l 1 -n 2 \
>          /dev/etherd/e0.0 /dev/etherd/e0.1
# mdadm -C /dev/md2 -l 1 -n 2 \
>          /dev/etherd/e0.2 /dev/etherd/e0.3
# mdadm -C /dev/md3 -l 1 -n 2 \
>          /dev/etherd/e0.4 /dev/etherd/e0.5
# mdadm -C /dev/md4 -l 1 -n 2 -x 2 \
>         /dev/etherd/e0.6 /dev/etherd/e0.7 \
>         /dev/etherd/e0.8 /dev/etherd/e0.9
# sleep 1
## create the stripe over the mirrors
# mdadm -C /dev/md0 -l 0 -n 4 \
>          /dev/md1 /dev/md2 /dev/md3 /dev/md4
## make the RAID 10 into an LVM physical volume
# pvcreate /dev/md0
## create an extendible LVM volume group
# vgcreate ben /dev/md0
## look at how many "physical extents" there are
# vgdisplay ben | grep -i 'free.*PE'
## create a logical volume using all the space
# lvcreate --extents 88349 --name franklin ben
# modprobe jfs
# mkfs -t jfs /dev/ben/franklin
# mkdir /bf
# mount /dev/ben/franklin /bf

Я повторил настройку Стэна на системе Debian Sarge с двумя процессорами Athlon MP, 1 GB памяти, сетевой картой Intel PRO/1000MT и 40GB дисками. В качестве коммутатора использовался Netgear FS526T. С RAID 10 работающим поверх 8 блэйдов EtherDrive в полке Coraid была зафиксирована произодвительность 23.58MB/s на чтение и 17.45MB/s на запись. Измерения делались путём копирования 1GB файла в /dev/null после сброса кэша. Во время копирования включена также команда sync.

RAID 10 в данном случае состоит из четырёх stripe'ов, каждый из которых это пара зеркалированных дисков. Вообще, можно вычислить производительность набора блэйдов EtherDrive исходя только из количества stripe'ов в нём. Для RAID 10 stripe'ов будет в два раза меньше чем дисков, поскольку каждый диск зеркалируется на другой диск. Для RAID 5 один диск выделяется под чётность, оставляя остальные диски для stripe'ов.

Ожидаемая пропускная способность чтения равна количеству stripe'ов умножить на 6MB/s. Это означает, что если Стэн изначальное купил бы две полки и собрал бы из них 18-блэйдный RAID 10 вместо своего 8-блэйдного, он мог ожидать прироста производительности более чем в два раза. Стэну не нужна такая большая производительность и он хочет начать с маленькой файловой системы, размером 1.6TB.

На листинге 3 показано как легко Стэн может расширить свою файловую систему, когда он купит другую полку. На листинге не показан файл #mdadm-aoe.conf# и стартовые/стоповые скрипты. Конфигурационный файл mdadm указывает процессу mdadm, работающему в режиме монитора, как выполнять горячую замену, чтобы можно было заменить сбойный диск в зеркале. Подробности о группах резервирования (spare groups) можно прочитать на man-странице по mdadm.

Листинг 3. Увеличить файловую систему без размонтирования, установить массив RAID 10, добавить его в группу томов и затем увеличить файловую систему.

## after setting up a RAID 10 for the second shelf
## as /dev/md5, add it to the volume group
# vgextend ben /dev/md5
# vgdisplay ben | grep -i 'free.*PE'
## grow the logical volume and then the jfs
# lvextend --extents +88349 /dev/ben/franklin
# mount -o remount,resize /bf

Стартовый и стоповый скрипты легко создать. Стартовый скрипт просто собирает зеркалированные пары RAID 1, собирает все RAID 0 и запускает процесс мониторинга mdadm. Стоповый скрипт останавливает монитор mdadm, останавливает RAID 0 и, в последнюю очередь, останавливает RAID 1.

Совместный доступ к блочным хранилищам

Теперь, после того как мы увидели конкретный пример ATA over Ethernet в действии, у читателя может возникнуть вопрос: "А что произойдёт, если другой хост попытается получить доступ к данным, когда с ними уже работает какой-то хост в сети?" Сможет ли этот второй хост подмонтировать файловую систему JFS и получить доступ к тем же данным? Короткий ответ такой: "Да, но это не безопасно!". JFS, как и ext3, как и многие другие файловые системы спроектированы для использования на отдельном хосте. И для таких файловых систем одновременный доступ с нескольких хостов приведёт к повреждениям. Причина -- в кэш-буфере, который унифицирован с кэшем страниц в ядре 2.6.

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

Некоторые файловые системы спроектированы так, что они могут использоваться одновременно несколькими хостами. Кластерные файловые системы, как их называют, имеют механизмы для проверки того факта, что кэш на всех машинах синхронизирован с нижележащей файловой системой. Отличный пример такой системы с открытым кодом это GFS. GFS использует кластерное программное обеспечение для того чтобы отследить кто из группы хостов работает с файловой системой. Для того чтобы убедиться что разные хосты договариваются друг с другом при совместном доступе к файловой системе, в GFS используются блокировки.

Когда используются кластерные файловые системы, такие как GFS, становится возможным совместный доступ множества хостов к одному и тому же блочному устройству по сети. Не нужно ничего типа NFS-сервера, поскольку каждый хост работает с хранилищем непосредственно. Но есть одна загвоздка. Чем больше дисков вы используете, тем выше шансы, что один из дисков засбоит. В этой ситуации обычно используется RAID, который добавляет избыточность. К сожалению, программный RAID Linux пока что не умеет работать с кластерными файловыми системами. Это означает, что что каждый хост в сети не сможет запускать mdadm.

Кластерное программное обеспечение для Linux развивается с большой скоростью. Есть надежда что через год или два (с момента написания англоязычной статьи) RAID будет поддерживать кластерные файловые системы. До этого момента мало вариантов использования AoE в кластерных системах. Основная идея -- централизовать функциональность RAID. Можно купить один или два Coraid RAIDblade и сделать чтобы кластерные узлы использовали их. RAIDblade'ы будут управлять EtherDrive'ами, которые должны подключаться за них. Или тоже самое можно сделать на обычной Linux-системе, которая подключит массивы, сделает на них RAID и с помощью ATA over Ethernet экспортирует его как готовое устройство. Это может сделать, например, программа [vblade].

Резервное копирование

Поскольку AoE выводит недорогие диски в Ethernet-сеть, многие админы могут заинтересоваться в использовании AoE для создания резервных копий. Часто в стратегиях резервного копирования используются двухуровневые хранилища, которые не такие быстрые как on-line хранилища, но и не такие медленные для доступа как лента. ATA over Ethernet даёт возможность легко использовать дешёвые ATA-диски как храналище второго уровня.


Но вообще говоря, с такими дешёвыми жёсткими дисками и стабильным программным RAID, почему бы не использовать диски как носитель для хранения резервных копий? В такой системе резервного копирования, в отличие от ленточной, есть возможность непосредственного доступа к заархивированным файлам.

В нескольких программах резервного копирования при создании резервных копий используются преимущества возможностей файловых систем. Например, используя жёсткие ссылки они могут делать полные бэкапы с эффективностью инкрементальных. Подробности здесь ([rsync Backups http://www.mikerubel.org/computers/rsync_snapshots]) и здесь ([Backup PC http://backuppc.sourceforge.net/]).


Заключение

Размещение недорогих дисков в локальной сети это одна из тех идей, которая заставляет подумать "Почему это интересно раньше никто не сделал?". С помощью простого сетевого протокола можно развязать хранилища и сервера, не используя при этом дорогого аппаратного обеспечения и сложной сетевой инфраструктуры. В простой Ethernet сети нет необходимости в сложном, развитом но тредовательном к ресурсам стеке протоколов TCP/IP.

Если вы используете хранилища в локальной сети, и если настройки доступа к хранилищу путём конфигурирование сети Ethernet достаточно, тогда ATA over Ethernet подойдёт вас лучше всего. Если вас интересуют такие вещи как шифрование, возможность маршрутизации и контроль доступа, посмотрите iSCSI.

С AoE появляется простое альтернативное решение для организации хранилищ на Linux, которой ранее явно не хватало. С простотой появляются и возможности. AoE может использоваться как строительный блок в любом решении для хранения. Дальше уже ваша фантазия.

Благодарности

Автор англоязычной статьи выражает благодарность Питеру Андерсену (Peter Anderson), Брэнтли Койли (Brantley Coile) и Алу Диксону (Al Dixon) за их полезные отзывы. Отдельное спасибо Брэнтли и Сэму Хопкинсу (Sam Hopkins) за разработку такого хорошего storage-протокола.

Ресурсы для этой статьи: www.linuxjournal.com/article/8201.

См. также

Ссылки

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты