13.09.2011

Кластерная файловая система. iSCSI + OCFS2

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

Проблема в том, что была неверно выбрана файловая система. Нельзя на диск, к которому обращается более одного шедулера (читай более одной операционной системы) ставить обычную файловую систему. Нужна только кластерная. Например GFS2 или OCFS2.

Такая файловая система имеет свой кластер. Вообще у всех в голове сразу появится "мне не нужен кластер, мне просто диск надо раздать по сети в совместное пользование" - все в порядке. Кластер ставится две минуты и не будет большим усложнением системы.

Делается это легко. Сначала устанавливаем пакеты поддержки такой файловой системы и кластер:
apt-get install ocfs2-tools ocfs2console



Теперь создаем файл настроек кластера (по умолчанию директория кластера пустая). Допустим у нас 3 сервера хотят писать в один диск, подключенный на каждый из них по iSCSI:
tee > /etc/ocfs2/cluster.conf

node:
        ip_port = 7000
        ip_address = 10.0.0.11
        number = 1
        name = server1
        cluster = ocfs2
node:
        ip_port = 7000
        ip_address = 10.0.0.12
        number = 2
        name = server2
        cluster = ocfs2

node:
        ip_port = 7000
        ip_address = 10.0.0.13
        number = 3
        name = server3
        cluster = ocfs2

cluster:
        node_count = 3
        name = ocfs2

Кроме того нужно поставить в автозапуск драйвер файловой системы:
vi /etc/default/o2cb


O2CB_ENABLED=true

Все тоже самое нужно повторить на всех трех серверах, к которым подцеплен iSCSI-диск. Причем файл /etc/ocfs2/cluster.conf должен быть абсолютно одинаковым на всех трех серверах вне зависимости от названия сервера.

Теперь на каждом сервере запустим демон o2cb:
invoke-rc.d o2cb start

И проверим его статус:
invoke-rc.d o2cb status

Осталась одна задача - отформатировать диск. Для этого на любом из трех серверов, но только на одном, делаем следующую команду, заменив имя диска /dev/sd* на свой вариант, а значение -N выставив в свое количество серверов:
mkfs.ocfs2 -b 4k -C 32K -L "OCFS2Cluster" -N 3 /dev/sd*


Теперь на каждом из серверов нужно вписать в список монитруемых разделов наш новый диск, заменив UUID в примере на тот, что выдаст blkid:
mkdir /data
blkid /dev/sd*
vi /etc/fstab

# iSCSI storage
UUID=b0ce0a78-ec75-4e93-9483-f92c3d473ae6   /data  ocfs2    noatime  0 0

Теперь монтируем все, что записано в /etc/fstab:
mount -a

Готово.


Баг:
Если вы пытаетесь выключить сервис o2cb и он не выгружается с такой ошибкой:
invoke-rc.d o2cb stop
Stopping O2CB cluster ocfs2: Failed
Unable to stop cluster as heartbeat region still active
invoke-rc.d: initscript o2cb, action "stop" failed.
То чинится так:
umount configfs
И после этого все выгрузится:
invoke-rc.d o2cb stop
Unloading module "ocfs2": OK
Unloading module "ocfs2_dlmfs": OK
Unloading module "ocfs2_stack_o2cb": OK







Комментариев нет:

Отправить комментарий