DRBD OCFS2

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) представляет собой распределенное, гибкое и универсально реплицируемое решение хранения данных для Linux. Оно отражает содержимое блочных устройств, таких как жесткие диски, разделы, логические тома между серверами.

OCFS2 — файловая система, обеспечивающая разделяемое использование одного и того же хранилища несколькими системами. OCFS2 можно использовать не только поверх DRBD, но и поверх iSCSI с множественным подключением.

Введение

В данной статье рассмотрим развертывание общего хранилища на базе DRBD+OCFS2.

Для создания реплицируемого диска необходимо 2 сервера.

На каждом из них должны быть подготовлены области хранения примерно одного и того же размера. Это может быть раздел жесткого диска (или целый физический жесткий диск), программное устройство RAID, логический том LVM или любой другой тип блочного устройства. Также желательно использовать 2 сетевые карты (одна сетевая карта используется для подключения к локальной сети, вторая для связи с другим сервером).

В данной статье в качестве устройства хранения используется логический том data (блочное устройство /dev/vg0/data):

# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   80G  0 disk 
├─sda1         8:1    0 1023M  0 part [SWAP]
├─sda2         8:2    0  199M  0 part /boot
└─sda3         8:3    0 78,8G  0 part 
  ├─vg0-root 253:0    0   10G  0 lvm  /
  └─vg0-data 253:1    0   68G  0 lvm  
sr0           11:0    1 1024M  0 rom

Тестовый стенд:

  • node01 (IP: 192.168.0.130 — первая нода кластера;
  • node02 (IP: 192.168.0.131) — вторая нода кластера.

На обоих узлах в файл /etc/hosts необходимо добавить сопоставления имён и IP-адресов узлов, если они не могут быть определены с DNS-сервера:

192.168.0.130   node01
192.168.0.131   node02

Настройка DRBD9

Установка DRBD

DRBD реализован как модуль ядра Linux.

Установить пакет drbd-utils и модуль ядра (в данном примере, тип ядра — std-def):

# apt-get install drbd-utils kernel-modules-drbd9-std-def

Активировать и включить в автозагрузку модуль ядра drbd:

# modprobe drbd
# echo drbd > /etc/modules-load.d/drbd.conf

Просмотреть статус drbd:

# cat /proc/drbd 
version: 9.1.5 (api:2/proto:110-121)

Настройка

Основной файл конфигурации DRBD — /etc/drbd.conf. Все конфигурационные файлы расположенные в каталоге /etc/drbd.d подключаются автоматически.

На обоих серверах создать файл конфигурации ресурсов (например, /etc/drbd.d/shared.res), определяющий состав дисковых ресурсов DRBD:

resource shared {
        protocol C;
        net {
                allow-two-primaries;
                sndbuf-size     0;
        }
        disk {
                no-disk-barrier;
                no-disk-flushes;
        }
        startup {
                become-primary-on both;
        }
        on node01 {
                device    /dev/drbd1;
                disk      /dev/vg0/data;
                address   192.168.0.130:7789;
                meta-disk internal;
        }
        on node02 {
                device    /dev/drbd1;
                disk      /dev/vg0/data;
                address   192.168.0.131:7789;
                meta-disk internal;
        }
}

Этот конфигурационный файл должен быть одинаковый на двух серверах.

Примечание:

Конфигурационный файл подробнее:

  1. resource — название ресурса.
  2. protocol — номер протокола. DRBD поддерживает три режима репликации:
    • A – протокол асинхронной репликации (запись считается завершенной, как только запись завершилась на локальное устройство и данные были отправлены на удаленный узел);
    • B – протокол полусинхронной репликации или протокол синхронной памяти (запись считается успешной, если она завершилась на локальный диск, и удаленный узел подтвердил получение данных);
    • С – протокол синхронной репликации (операция записи считается завершенной, когда и локальный, и сетевой диски сообщают об успешном завершении записи).
  3. on node1 – описание первого узла:
    • device – блок данных, который необходимо создать;
    • disk – родительский жесткий диск;
    • address – IP-адрес и номер порта соответствующего сервера;
    • meta-disk internal – указание хранить метаданные на этом же устройстве.


Примечание: DRBD может работать в двух режимах:
  • Primary/Secondary — один узел доступен для чтения и записи, а второй недоступен, однако он постоянно синхронизируется на блочном уровне. В этом режиме нет необходимости использовать кластерные файловые системы, можно использовать, например, ext4;
  • Primary/Primary — оба узла доступны для чтения и записи (должен быть установлен параметр allow-two-primaries в файле конфигурации).


Инициализация и запуск ресурса

Инициализировать раздел на обоих серверах:

# drbdadm create-md shared
initializing activity log
initializing bitmap (2176 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

На обоих серверах поднять ресурс:

# drbdadm up shared

Убедиться, что создано блочное устройство drbd1:

# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   80G  0 disk 
├─sda1         8:1    0 1023M  0 part [SWAP]
├─sda2         8:2    0  199M  0 part /boot
└─sda3         8:3    0 78,8G  0 part 
  ├─vg0-root 253:0    0   10G  0 lvm  /
  └─vg0-data 253:1    0   68G  0 lvm  
    └─drbd1  147:1    0   68G  0 disk 
sr0           11:0    1 1024M  0 rom
Примечание: Для отключения устройства используется команда:
# drbdadm down shared


Просмотреть статус drbd устройств:

# drbdadm status
shared role:Secondary
  disk:Inconsistent
  node01 role:Secondary
    peer-disk:Inconsistent

Сделать на одном из серверов ресурс shared главным:

# drbdadm primary --force shared
# drbdadm status
shared role:Primary
  disk:UpToDate
  node02 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:32.04

В выводе команды видно, что ресурс shared стал Primary, второй сервер в состоянии Secondary. Также показано, что идет синхронизация дисков.

Следует дождаться завершения синхронизации. После завершения синхронизации состояние обоих дисков должно быть UpToDate:

Синхронизация дисков

ФС

Создать файловую систему (на любом сервере) (на узлах доступно разделяемое хранилище /dev/drbd1):

# mkfs.ocfs2 /dev/drbd1

mkfs.ocfs2 1.8.7
Cluster stack: classic o2cb
Label: 
Features: sparse extended-slotmap backup-super unwritten inline-data strict-journal-super xattr indexed-dirs refcount discontig-bg append-dio
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 73012178944 (17825239 clusters) (17825239 blocks)
Cluster groups: 553 (tail covers 19927 clusters, rest cover 32256 clusters)
Extent allocator size: 12582912 (3 groups)
Journal size: 268435456
Node slots: 8
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 4 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful

Команду нужно вводить только на одном сервере, поскольку изменения автоматически копируются на второе устройство DRBD.

Установка и настройка OCFS2

Установить пакет ocfs2-tools:

# apt-get install ocfs2-tools

OCFS2 использует центральный файл конфигурации /etc/ocfs2/cluster.conf.

На обоих серверах внести изменения в файл /etc/ocfs2/cluster.conf:

cluster:
    node_count = 2
    name = ocfs2cluster

node:
    ip_port = 7777
    ip_address = 192.168.0.130
    number = 0
    name = node01
    cluster = ocfs2cluster

node:
    ip_port = 7777
    ip_address = 192.168.0.131
    number = 1
    name = node02
    cluster = ocfs2cluster

Настроить драйвер O2CB, для этого в файле /etc/sysconfig/o2cb необходимо установить указать название кластера и установить значение в true:

O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster

На обоих серверах выполнить команду:

# o2cb register-cluster ocfs2cluster

На обоих серверах запустить и добавить в автозапуск службы:

# systemctl enable --now drbd o2cb ocfs2

На обоих серверах примонтировать ресурс (каталог /mnt/shared должен существовать):

# mount /dev/drbd1 /mnt/shared

В итоге блочное устройство смонтировано на оба сервера. Можно проверить синхронизацию, например, создав на одном из серверов файл.

Настроить таблицу разделов в /etc/fstab (на обоих серверах):

/dev/drbd1  /mnt/shared   ocfs2  defaults,noauto,nosuid,noexec   0 0

Настройка порядка загрузки

Необходимо чтобы DRBD запускался до монтирования ФС.

Ссылки

https://linbit.com/drbd-user-guide/drbd-guide-9_0-en/