OCFS2 - ставим кластерную файловую систему на сторадж

Документация связанная с установкой, настройкой и работой пользовательского ПО
Ответить
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2800
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 8
Откуда: Из серверной

OCFS2 - ставим кластерную файловую систему на сторадж

Сообщение Raven » 10 мар 2012, 16:26

Бывает так, что стоит у вас где-нибудь в локалке сторадж, к которому нужно прицепить несколько машин в режиме rw без ограничений на чтение и запись соответственоо. Если на сторадже несколько хардов и клиентов надо цеплять к ним по-отдельности, то тут проблем нету. Ну а как быть если раздел один? Nfs? SMB? SSH? а как быть с проседающей сеткой? с отваливающимися коннектами с nfs, ssh, а тем более smb!
Тут нам приходит на помощь протокол iSCSI, поверх которого можно практически без потерь гонять инфу, монтируя харды со стораджа на узлах как локальную фс. Предположим iscsi-target и iscsi-initiator мы уже настроили, на конечных узлах у нас появилось новое устройство /dev/sd* (возьмем за пример /dev/sdg), на котором мы parted'ом или fdisk'ом создали раздел. Итак, надо его форматнуть, но тут образуется затык - при использовании стандартных ФС писать на смонтированый раздел сможет только один узел - тот который первым его подхватит. А так как нам это не интересно, будем искать выход. Погуглив по поводу кластерных файловых систем находим в гугле огромную кучу оных. Сразу откидываем распределенные ФС - у нас будет 1 сторадж а не несколько.

Далее откинем RedHat GFS2 - во-первых она тащит за собой кучу мусора (cman, clvm, corosync, fenced), который кстати тоже нужно настраивать, во-вторых блокировка выпавшей ноды у нее работает через демон fenced, который нет-нет да пришибет рабочий узел, а нет-нет и на выпавший узел забьет, вызывая тем самым deadlock в файловой системе и как результат kernel-panic.

Для данного эксперимента остановимся на файловой системе OCFS2 - она так же как и GFS2 асинхронна, и не тащит за собой кучу его родимого. Однако как и с любой ФС нужно озадачиться одним вопросом - а есть ли ее поддержка в ядре? Если нет в ядре и в репах - пересобираем ведро включив опции поддержки сабжа. Для АльтЛинукс готовое ядро есть в репозитории. Мне гораздо проще - я использую OracleLinux, а в нем она одна из родных ФС.

Ставим тулзу:

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

# yum -y install ocfs2-tools
Если ваша машина - десктоп, можно также поставить гуй для этого хозяйства:

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

# yum -y install ocfs2console
Конфигурим:
Предположим что у нас к разделу цепляются 4 клиента - 192.168.1.1, 192.168.1.2, 192.168.1.3 и 192.168.1.4. Конфиг будет такой:

# cat /etc/ocfs2/cluster.conf

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

cluster:
  node_count = 4
  name = my_mount

node:
  ip_port = 7777
  ip_address = 192.168.1.1
  number = 0
  name = node1.example.com
  cluster = my_mount

node:
  ip_port = 7777
  ip_address = 192.168.1.2
  number = 1
  name = node2.example.com
  cluster = my_mount

node:
  ip_port = 7777
  ip_address = 192.168.1.3
  number = 2
  name = node3.example.com
  cluster = my_mount

node:
  ip_port = 7777
  ip_address = 192.168.1.4
  number = 3
  name = node7.example.com
  cluster = my_mount
Обратите внимание на 3 параметра данного конфига (это очень важно!)
1. строки после слов node и cluster обязательно должны начинаться с пробела или табуляции - это критично!
2. name - реальный хостнейм сервера. если вы забьете имя сервера в хосты вам это ничего не даст!
3. параметр cluster = my_mount долен быть одинаковым для всех узлов кластера а также должен соответствовать значению записи O2CB_BOOTCLUSTER= в файле o2cb (у меня в /etc/sysconfig лежит)

Настраиваем o2cb:

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

# cat /etc/sysconfig/o2cb
#
# This is a configuration file for automatic startup of the O2CB
# driver.  It is generated by running /etc/init.d/o2cb configure.
# On Debian based systems the preferred method is running
# 'dpkg-reconfigure ocfs2-tools'.
#

# O2CB_ENABLED: 'true' means to load the driver on boot.
O2CB_ENABLED=true

# O2CB_STACK: The name of the cluster stack backing O2CB.
O2CB_STACK=o2cb

# O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER= my_mount

# O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead.
O2CB_HEARTBEAT_THRESHOLD=31

# O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead.
O2CB_IDLE_TIMEOUT_MS=30000

# O2CB_KEEPALIVE_DELAY_MS: Max time in ms before a keepalive packet is sent
O2CB_KEEPALIVE_DELAY_MS=2000

# O2CB_RECONNECT_DELAY_MS: Min time in ms between connection attempts
O2CB_RECONNECT_DELAY_MS=2000

Стартуем:

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

# service o2cb load
# service o2cb online
# service o2cb start
# service ocfs2 start
Форматим диск (только на одном узле!)

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

# mkfs.ocfs2 -N 4 -v /dev/sdg1
Поскольку iscsi любит присваивать на разных узлах разные идентификаторы диска, мы будем цеплять его по UUID. Смотрим идентификатор диска (ls -la /dev/disk/by-uuid) и добавляем строчку в /etc/fstab

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

UUID=52db50c3-2f2c-4b3a-a04a-e395155bbfe5 /srv/shared             ocfs2   defaults,_netdev      0 1
И перезапускаем ocfs2 на всех узлах.

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

# service ocfs2 restart
* Важно! Первым всегда должен запускаться узел с наименьшим номером в /etc/ocfs2/cluster.conf, ибо он признается мастером и назначается арбитром dlm - механизма блокировок чтения-записи.

И смотрим примонтируется-ли раздел и наслаждаемся результатом. Если что-то пошло не так советую перечитать все с начала)))
Я не злопамятный, я просто часто ковыряю логи
wass
Красноглазик
Красноглазик
Сообщения: 633
Зарегистрирован: 26 мар 2010, 11:43
ОС: MSDOS
Контактная информация:

Re: OCFS2 - ставим кластерную файловую систему на сторадж

Сообщение wass » 10 мар 2012, 19:10

очень даже здраво и полезно. спасибо *COOL*
OS: Gentoo Linux 3.6.6, KDE 4.9.3/Fluxbox
Ответить

Вернуться в «Документация *nix»