AoE+OCFS2

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Ответить
Venegance
Сообщения: 119
ОС: Debian

AoE+OCFS2

Сообщение Venegance »

В данной статье будет рассмотрена возможность интеграции технологий AoE(ATA over Ethernet) и кластерной файловой системы OCFS2.

Зачем была написана данная статья.
Как-то я очень заинтересовался технологией AoE. Несмотря на очевидные преимущесва(простая внедряемость, высокая производительность, небольшая нагрузка на хост в виду отсутствия TCP сессий), есть и недостатки, которые меня сильно огорчили. Один из них - невозможность использования блочного устройства одновременно на нескольких хостах(при использовании стандартной файловой системы). Однако, никто не запрещает использование кластерной системы поверх AoE устройства. Для этого я выбрал OCFS2. Она есть в ядре линукса и очень легко настраивается.

Настройка связки AoE+OCFS2
Вся настройка будет проводится на Debian Lenny, хотя в принципе без разницы, можно использовать любой другой дистрибутив. Сначала нужно убедится, что OCFS2 есть в вашем ядре(необходимо проделать данные действия только на узлах, где непосредственно будет монтироваться OCFS2): для этого вводим

Код: Выделить всё

#modprobe -l | grep ocfs2

Если появится что-то вроде этого:

Код: Выделить всё

/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/ocfs2_stackglue.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/ocfs2_stack_user.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/ocfs2_stack_o2cb.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/cluster/ocfs2_nodemanager.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/ocfs2.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/dlm/ocfs2_dlm.ko
/lib/modules/2.6.26-2-686/kernel/fs/ocfs2/dlm/ocfs2_dlmfs.ko

то всё в порядке, можно двигаться дальше. Если ничего не появляется, то либо нужно пересобрать ядро с поддержкой OCFS2, либо скомпилировать отдельно модуль, взяв исходники с сайта производителя(http://oss.oracle.com/projects/ocfs2/files/).
Итак, начнем. Сначала, необходимо определится, какое блочное устройство будем расшаривать при помощи AoE и где оно находится. У меня, например, на сервере с Debian Lenny есть программный массив Raid(1+0) из четырёх сата дисков. Его и расашарю, чтобы остальные серверы могли использовать этот массив. Сперва убедимся, что AoE есть в ядре:

Код: Выделить всё

#modprobe -l | grep aoe

ответ будет таким:

Код: Выделить всё

/lib/modules/2.6.26-2-686/kernel/drivers/block/aoe/aoe.ko

Все в порядке. Дальше ставим демона vbladed:

Код: Выделить всё

#apt-get install vbladed

Теперь простой командой экспортируем наш массив(на практике, это может быть любое блочное устройство - жесткий диск, массив и даже файл) как устройство AoE:

Код: Выделить всё

#vbladed 1 1 eth0 /dev/md0

Где первая единица - это номер дисковой стойки, вторая - номер слота в дисковой стойке, eth0 - сетевой интерфейс, через который экспортируется блочное устройство, /dev/md0 - экспортируемое блочное устройство. Далее нам нужно сделать так, чтобы при перезагрузке сервера с расделяемым блочным устройством это устройство автоматически экспортировалось в сеть. Для этого добавим модуль aoe в список автоматически загружаемых модулей:
#nano /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.
# Parameters can be specified after the module name.

loop
aoe

И напишем простой скриптик(назовем его vblade):
#nano /etc/init.d/vblade

Код: Выделить всё

#! /bin/sh
/usr/sbin/vbladed 1 1 eth0 /dev/md0

сделаем его исполяемым и добавим его в автозагрузку:

Код: Выделить всё

#chmod 755 /etc/init.d/vblade
#update-rc.d vblade defaults 99

На этом настройка AoE устройств закончена.

Настройка OCFS2.
Здесь я приведу настройку кластерной файловой системы OCFS2 на первом узле, на втором она будет аналогичной.
Сначала, добавим нужные модули в список автоматически загружаемых модулей(aoe и ocfs2):
#nano /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.
# Parameters can be specified after the module name.

loop
aoe
ocfs2

Далее установим пакеты для работы с AoE и OCFS2:

Код: Выделить всё

#apt-get install aoetools ocfs2-tools

Вводим следующие команды:

Код: Выделить всё

#aoe-discover
#aoe-stat

Первая начинает исследование сети на предмет AoE устройств, вторая - отображает найденные. После введения второй команды мы должны увидеть сконфигурированное ранее AoE устройство:

Код: Выделить всё

      e1.1        640.1GB   eth0 up

Теперь оно видно как блочное устройсто, напрямую подключенное к компьютеру:
#fdisk -l

Код: Выделить всё

Диск /dev/sda1: 134 МБ, 134217728 байт
255 heads, 63 sectors/track, 16 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

На диске /dev/sda1 отсутствует верная таблица разделов

Диск /dev/sda2: 21.4 ГБ, 21474836480 байт
255 heads, 63 sectors/track, 2610 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

На диске /dev/sda2 отсутствует верная таблица разделов

Диск /dev/etherd/e1.1: 640.1 ГБ, 640140443648 байт
2 heads, 4 sectors/track, 156284288 cylinders
Units = цилиндры of 8 * 512 = 4096 bytes
Disk identifier: 0x00000000

Теперь приступим к настройке OCFS2 кластера. Для этого отредактируем файл /etc/ocfs2/cluster.conf:

Код: Выделить всё

cluster:
      node_count = 2
      name = array
node:
      ip_port = 7777
      ip_address = 10.0.0.250
      number = 1
      name = node1
      cluster = test
node:
      ip_port = 7777
      ip_address = 10.0.0.254
      number = 2
      name = node2
      cluster = array

Здесь подробнее: node_count = 2 - число узлов в кластере, name = array - имя кластера, number = 1 - уникальное число от 0 до 254, name = node1 - имя узла, должно совпадать с именем хоста, cluster = array - имя кластера. Примечание: порядок записей в конфигурационном файле строгий, если его не соблюдать, то при запуске кластера появится ошибка, что якобы конфигурационный файл не найден.
Создадим файловую систему OCFS2 поверх AoE устройства:

Код: Выделить всё

mkfs.ocfs2 /dev/etherd/e1.1

Процесс не шибко быстрый, так что нужно подождать. После создания файловой системы можно запускать кластер:

Код: Выделить всё

/etc/init.d/o2cb online array

Если все в порядке, то увидим следующее:

Код: Выделить всё

Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Setting cluster stack "o2cb": OK
Starting O2CB cluster array: OK

На этом всё. Единственное что осталось - это создать директорию, в которую будет монтироваться наша файловая система, а также создать скрипт автоматического монтирования файловой системы при перезагрузке:

Код: Выделить всё

#mkdir /ocfs2

#nano /etc/init.d/script

Код: Выделить всё

#! /bin/sh
/sbin/aoe-discover
/etc/init.d/o2cb online array
/bin/mount /dev/etherd/e1.1 /ocfs2 -t ocfs2

Примечание: /sbin/aoe-discover - эта команда необходима для того, чтобы наше AoE устройство нашлось до того, как запустится кластер и смонтируется файловая система, иначе - кластер не запустится, файловая система не смонтируется.
Сделаем скрипт исполняемым, добавим в автозагрузку:

Код: Выделить всё

chmod 755 /etc/init.d/script
update-rc.d script defaults 99

На втором узле все аналогично, только создавать наново файловую систему не нужно, а сразу запустить кластер после создания конфигурационного файла.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

Re: AoE+OCFS2

Сообщение rm_ »

недостатки, которые меня сильно огорчили. Один из них - невозможность использования блочного устройства одновременно на нескольких хостах

Странная фраза, это всё равно что невозможность один жёсткий диск подключить по SATA сразу к двум компьютерам, записывать в недостатки жёстких дисков.

Venegance писал(а):
17.05.2010 13:23
И напишем простой скриптик(назовем его vblade):
#nano /etc/init.d/vblade

Код: Выделить всё

#! /bin/sh
/usr/sbin/vbladed 1 1 eth0 /dev/md0

сделаем его исполяемым и добавим его в автозагрузку:

Код: Выделить всё

#chmod 755 /etc/init.d/vblade
#update-rc.d vblade defaults 99

Рекомендую обратить внимание на vblade-persist.

И вопрос возникает, а зачем вообще, вот так? Я пользуюсь AoE и знаю, что это очень вкусная технология со своими применениями, но если Вам нужно просто расшарить блочный девайс в сеть на несколько компьютеров и с них хранить там какие-то файлы - не лучше ли обратить внимание на обычную ФС (локалькую на компьютере, куда этот девайс подключен) и раздачу этого дела в сеть с помощью SMB/CIFS?
Спасибо сказали:
Venegance
Сообщения: 119
ОС: Debian

Re: AoE+OCFS2

Сообщение Venegance »

Ну смотрите. Жесткий диск подключен к пк. На нем какая-то файловая система. В это все смотрит еще и самба..... Так что быстрее: через самбу монтировать раздел или AoE? Плюс нагрузка на проц от TCP. Вобще есть даже устройства такие TCP разгрузки. AoE - технология, рекомендованная для SAN, т.е. мой случай. Мне ваш комментарий не совсем понятен, вы бы еще спросили, зачем вобще AoE. В данной теме я просто показал на примере, как несколько серверов могут использовать одну дисковую стойку максимально быстро и с минимальной нагрузкой от транспорта через Ethernet для себя.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

Re: AoE+OCFS2

Сообщение rm_ »

Так что быстрее: через самбу монтировать раздел или AoE?

Да вот вполне вероятно, что именно через самбу. По крайней мере vbladed звёзд с неба не хватает в плане скорости, он ведь просто наивная "reference implementation" от Coraid (демоверсия того, на что способны их железячные коробочки :) ), выжиманием из него производительности до последнего мегабайта в секунду никто не занимался. Вот ggaoed внушает больше надежд в этом плане.

Плюс нагрузка на проц от TCP. Вобще есть даже устройства такие TCP разгрузки.

Это всё полный мизер по сравнению с кардинально отличающимися подходами к тому, чего мы гоняем по сетке (либо команды блочного уровня вплоть до мулиметра (сектора), либо "а нука дайте мне первые 128 килобайт воон того файла".

несколько серверов могут использовать одну дисковую стойку

Ну если так, то понятно, хотя про область применения как-то не упомянули, народ ведь грешным делом может подумать, что данное решение предлагается как замена Samba, чтобы шарить с домашнего сервера фильмы и музыку, а в качестве "узлов OCFS2" - иметь десктоп, да ноут по Wi-Fi. :)
Спасибо сказали:
Venegance
Сообщения: 119
ОС: Debian

Re: AoE+OCFS2

Сообщение Venegance »

Ну если так, то понятно, хотя про область применения как-то не упомянули, народ ведь грешным делом может подумать, что данное решение предлагается как замена Samba, чтобы шарить с домашнего сервера фильмы и музыку, а в качестве "узлов OCFS2" - иметь десктоп, да ноут по Wi-Fi.

Ну вы, уважаемый, загнули). Не слишком ли сложно использовать кластерную файловую систему и AoE для дома :) А так, естественно, это решение корпоративного уровня. Более того, не каждая контора позволит себе отдельную дисковую стойку для каждого сервера, так что считаю свое решение вполне актуальным.
Спасибо сказали:
papont2007
Сообщения: 13
ОС: Mint, Debian

Re: AoE+OCFS2

Сообщение papont2007 »

Истина как всегда находится где то по середине - я гоняю протокол AOE по сетке только для того чтобы на рабочих тачках в клубе не было винды. не установлена виндоувс на машинах и все тут. скорость загрузки системы зависит от количества тачек в сети - более 10 не рекомендую(очень медленно грузится). а первая машина загружается по времени процентов на 50 дольше. Так что протокол AOE в принципе можно гонять и дома с виндой единственное сервер линуховый-но это уже другая история.
А теперь вопрос где можно прочитать на русском что-нибудь вразумительное GGAOED.
Заранее спасибо papont2007
Спасибо сказали:
Ответить