Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

За какво ще говорим:
Как бързо да внедрите споделено хранилище за два сървъра на базата на решения drbd+ocfs2.

За кого ще бъде полезно:
Урокът ще бъде полезен за системни администратори и всеки, който избере метод за внедряване на хранилище или иска да изпробва решение.

Какви решения сме изоставили и защо?

Често сме изправени пред ситуация, в която трябва да внедрим споделено хранилище с добра производителност при четене и запис на малък уеб клъстер. Опитахме различни реализации за споделено съхранение за нашите проекти, но малцина успяха да ни задоволят по няколко начина едновременно. Сега ще ви кажем защо.

  • Glusterfs не ни устройваше с производителността на четене и запис, имаше проблеми с едновременното четене на голям брой файлове, имаше голямо натоварване на процесора. Проблемът с четенето на файлове може да бъде решен чрез достъп до тях директно в тухлите, но това не винаги е приложимо и като цяло е грешно.

  • Ceph не хареса допълнителната сложност, която може да бъде пагубна за проекти с 2-4 сървъра, особено ако проектът впоследствие се поддържа. Отново има сериозни ограничения на производителността, които ви принуждават да изграждате отделни клъстери за съхранение, точно както при glusterfs.

  • Използването на един nfs сървър за внедряване на споделено хранилище повдига проблеми по отношение на толерантността към грешки.

  • s3 е страхотно популярно решение за определен набор от задачи, но не е файлова система, което стеснява обхвата.

  • lsyncd. Ако вече сме започнали да говорим за "нефайлови системи", тогава си струва да преминем през това популярно решение. Не само, че не е подходящ за двупосочен обмен (но ако наистина искате, можете), но и не работи стабилно на голям брой файлове. Приятно допълнение към всичко е, че е еднонишков. Причината е в архитектурата на програмата: тя използва inotify за наблюдение на работни обекти, които виси при стартиране и при повторно сканиране. Трансферната среда е rsync.

Урок: Как да внедрите споделено хранилище на базата на drbd+ocfs2

Едно от най-удобните решения за нас беше пакет ocfs2+drbd. Сега ще ви покажем как можете бързо да разположите споделено хранилище за два сървъра на база данни за решения. Но първо, малко за компонентите:

DRBD - система за съхранение от стандартната дистрибуция на Linux, която ви позволява да репликирате данни между сървърните блокове. Основното приложение е изграждането на устойчиви на грешки хранилища.

OCFS2 - файлова система, която осигурява споделено използване на едно и също хранилище от няколко системи. Той е включен в дистрибуцията на Linux и представлява модул на ядрото и потребителски инструментариум за работа с FS. OCFS2 може да се използва не само през DRBD, но и през iSCSI с множество връзки. В нашия пример използваме DRBD.

Всички действия се извършват на ubuntu сървър 18.04 в минимална конфигурация.

Стъпка 1. Настройте DRBD:

Във файла /etc/drbd.d/drbd0.res описваме нашето виртуално блоково устройство /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

вътрешен мета-диск - използвайте същите блокови устройства за съхраняване на метаданни
устройство /dev/drbd0 - използвайте /dev/drbd0 като път до тома drbd.
диск /dev/vdb1 - използвайте /dev/vdb1
syncer {скорост 1000M; } - използвайте гигабитова честотна лента
позволи-две първични - важна опция, която позволява промените да се приемат на два основни сървъра
след-sb-0pri, след-sb-1pri, след-sb-2pri — опции, отговорни за действията на възела при откриване на раздвоен мозък. Повече подробности можете да намерите в документацията.
стават-основни-на двете - задава и двата възела като основни.

В нашия случай имаме две абсолютно идентични виртуални машини със специална виртуална мрежа с честотна лента от 10 гигабита.

В нашия пример мрежовите имена на два клъстерни възела са drbd1 и drbd2. За правилна работа е необходимо имената и ip адресите на хостовете да съответстват в /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Стъпка 2. Настройте възлите:

И на двата сървъра изпълнете:

drbdadm create-md drbd0

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Получаваме следното:

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

Можете да започнете синхронизирането. На първия възел трябва да направите:

drbdadm primary --force drbd0

Да видим състоянието:

cat /proc/drbd

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

Страхотно, синхронизирането започна. Чакаме края и вижте снимката:

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

Стъпка 3. Стартирайте синхронизирането на втория възел:

drbdadm primary --force drbd0

Получаваме следното:

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

Сега можем да пишем в drbd от два сървъра.

Стъпка 4. Инсталиране и конфигуриране на ocfs2.

Ще използваме доста тривиална конфигурация:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Трябва да бъде записано /etc/ocfs2/cluster.conf и на двата възела.

Създайте FS на drbd0 на произволен възел:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Тук създадохме файлова система с етикет testVol на drbd0, използвайки параметрите по подразбиране.

Клъстерно съхранение за малки уеб клъстери, базирани на drbd+ocfs2

В /etc/default/o2cb трябва да се зададе (както в нашия конфигурационен файл)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

и изпълнете на всеки възел:

o2cb register-cluster ocfs2cluster

След това включваме и добавяме към автоматичното стартиране всички единици, от които се нуждаем:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Част от това вече ще се изпълнява в процеса на настройка.

Стъпка 5. Добавете точки на монтиране към fstab на двата възела:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Справочник /медия/споделено и трябва да се създаде предварително.

Тук използваме опциите noauto, което означава, че файловата система няма да бъде монтирана при стартиране (предпочитам да монтирам мрежови файлове чрез systemd) и heartbeat=local, което означава, че услугата heartbeat се използва на всеки възел. Има и глобален сърдечен ритъм, който е по-подходящ за големи клъстери.

След това можете да монтирате /медия/споделено и проверете синхронизирането на съдържанието.

Готово! В резултат на това получаваме повече или по-малко устойчиво на грешки хранилище с мащабируемост и прилична производителност.

Източник: www.habr.com

Добавяне на нов коментар