Кластерско складирање за мали веб-кластери базирани на 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
синкер { стапка 1000M; } — користете јагабитна пропусност на каналот
дозволи-два-примарни - важна опција која овозможува прифаќање на промените на два примарни сервери
по-сб-0при, по-сб-1при, по-сб-2при — опции одговорни за дејствата на јазолот кога ќе се открие разделен мозок. Повеќе детали може да се најдат во документацијата.
стане-примарно-на двете — ги поставува двата јазли на примарни.

Во нашиот случај, имаме два апсолутно идентични VM-а, со посветена виртуелна мрежа со пропусен опсег од 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, што значи користење на услугата за отчукување на срцето на секој јазол. Има и глобално чукање на срцето, кое е посоодветно за големи кластери.

Следно, можете да монтирате /медиуми/споделени и проверете ја синхронизацијата на содржината.

Готово! Како резултат на тоа, добиваме повеќе или помалку складирање толерантно на грешки со приспособливост и пристојни перформанси.

Извор: www.habr.com

Додадете коментар