Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

O czym będziemy rozmawiać:
Jak szybko wdrożyć współdzieloną pamięć masową dla dwóch serwerów w oparciu o rozwiązania drbd+ocfs2.

Dla kogo będzie to przydatne:
Poradnik przyda się administratorom systemów oraz każdemu, kto wybiera metodę implementacji pamięci masowej lub chce wypróbować rozwiązanie.

Jakich decyzji odrzuciliśmy i dlaczego?

Często mamy do czynienia z sytuacją, w której musimy wdrożyć współdzieloną pamięć masową z dobrą wydajnością odczytu i zapisu w małym klastrze internetowym. Próbowaliśmy różnych opcji wdrożenia wspólnego przechowywania dla naszych projektów, ale niewielu było w stanie nas zadowolić pod kilkoma wskaźnikami jednocześnie. Teraz powiemy Ci dlaczego.

  • Glusterfs nie zadowalał nas wydajnością odczytu i zapisu, były problemy z jednoczesnym odczytem dużej liczby plików, a procesor był mocno obciążony. Problem z odczytem plików można rozwiązać, uzyskując do nich dostęp bezpośrednio z cegły, ale nie zawsze ma to zastosowanie i jest generalnie nieprawidłowe.

  • Cephowi nie podobała się nadmierna złożoność, która może być szkodliwa w projektach z 2-4 serwerami, zwłaszcza jeśli projekt jest później utrzymywany. Ponownie istnieją poważne ograniczenia wydajności, które zmuszają nas do budowania oddzielnych klastrów pamięci masowej, tak jak w przypadku glusterfs.

  • Użycie jednego serwera NFS do wdrożenia pamięci współdzielonej rodzi pytania dotyczące odporności na awarie.

  • s3 jest doskonałym, popularnym rozwiązaniem do pewnego zakresu zadań, ale nie jest to system plików, co zawęża jego zakres.

  • lsyncd. Jeżeli zaczęliśmy już mówić o „systemach innych niż pliki”, to warto przyjrzeć się temu popularnemu rozwiązaniu. Nie tylko nie nadaje się do dwukierunkowej wymiany (ale jeśli naprawdę chcesz, to możesz), to także nie działa stabilnie na dużej liczbie plików. Miłym dodatkiem do całości jest to, że jest jednowątkowy. Powód leży w architekturze programu: wykorzystuje on inotify do monitorowania obiektów roboczych, które przypisuje przy uruchomieniu i podczas ponownego skanowania. rsync jest używany jako medium transferowe.

Samouczek: jak wdrożyć współdzieloną pamięć masową w oparciu o drbd+ocfs2

Jednym z najwygodniejszych dla nas rozwiązań był link ocfs2+drbd. Teraz powiemy Ci, jak szybko wdrożyć współdzieloną pamięć masową dla dwóch serwerów w oparciu o bazę danych rozwiązania. Ale najpierw trochę o komponentach:

DRBD - system przechowywania danych ze standardowej dystrybucji Linuksa pozwalający na replikację danych pomiędzy serwerami w blokach. Głównym zastosowaniem jest budowanie pamięci masowej odpornej na awarie.

OCFS2 - system plików zapewniający wspólne korzystanie z tej samej pamięci przez kilka systemów. Zawarty w dystrybucji Linuksa i stanowi moduł jądra oraz narzędzia przestrzeni użytkownika do pracy z systemem FS. OCFS2 może być używany nie tylko przez DRBD, ale także przez iSCSI z wieloma połączeniami. W naszym przykładzie używamy DRBD.

Wszystkie działania wykonywane są na serwerze Ubuntu 18.04 w minimalnej konfiguracji.

Krok 1. Skonfiguruj DRBD:

W pliku /etc/drbd.d/drbd0.res opisujemy nasze wirtualne urządzenie blokowe /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;
}
}

wewnętrzny metadysk — używać tych samych urządzeń blokowych do przechowywania metadanych
urządzenie /dev/drbd0 — użyj /dev/drbd0 jako ścieżki do woluminu drbd.
dysk /dev/vdb1 - użyj /dev/vdb1
synchronizator {szybkość 1000M; } — użyj przepustowości kanału gigabitowego
Zezwalaj na dwie podstawowe - ważna opcja umożliwiająca akceptację zmian na dwóch głównych serwerach
po-sb-0pri, po-sb-1pri, po-sb-2pri — opcje odpowiedzialne za zachowanie węzła w przypadku wykrycia Splitbrain. Więcej szczegółów można znaleźć w dokumentacji.
stać się-głównym-na obu — ustawia oba węzły jako podstawowe.

W naszym przypadku mamy dwie absolutnie identyczne maszyny wirtualne, z dedykowaną siecią wirtualną o przepustowości 10 gigabitów.

W naszym przykładzie nazwy sieciowe dwóch węzłów klastra to drbd1 i drbd2. Do poprawnego działania należy dopasować nazwy i adresy IP hostów w pliku /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Krok 2. Skonfiguruj węzły:

Na obu serwerach uruchamiamy:

drbdadm create-md drbd0

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Otrzymujemy co następuje:

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

Możesz rozpocząć synchronizację. W pierwszym węźle musisz wykonać:

drbdadm primary --force drbd0

Spójrzmy na stan:

cat /proc/drbd

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

Świetnie, synchronizacja się rozpoczęła. Czekamy do końca i oglądamy zdjęcie:

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

Krok 3. Rozpocznij synchronizację na drugim węźle:

drbdadm primary --force drbd0

Otrzymujemy co następuje:

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

Teraz możemy pisać do drbd z dwóch serwerów.

Krok 4. Zainstaluj i skonfiguruj ocfs2.

Zastosujemy dość banalną konfigurację:

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

Trzeba to zapisać w /etc/ocfs2/cluster.conf w obu węzłach.

Tworzymy FS na drbd0 na dowolnym węźle:

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

Tutaj utworzyliśmy system plików z etykietą testVol na drbd0, używając parametrów domyślnych.

Magazyn klastrowy dla małych klastrów internetowych oparty na drbd+ocfs2

W /etc/default/o2cb musisz ustawić (jak w naszym pliku konfiguracyjnym)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

i wykonaj w każdym węźle:

o2cb register-cluster ocfs2cluster

Następnie włączamy i dodajemy wszystkie jednostki potrzebne do automatycznego uruchomienia:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Część z nich będzie już uruchomiona podczas procesu instalacji.

Krok 5. Dodaj punkty montowania do fstab na obu węzłach:

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

Informator /media/udostępnione należy go utworzyć wcześniej.

Tutaj używamy opcji noauto, co oznacza, że ​​plik nie będzie montowany przy uruchomieniu (wolę montować pliki sieciowe przez systemd) i heartbeat=local, co oznacza korzystanie z usługi heartbeat na każdym węźle. Istnieje również globalne tętno, które jest bardziej odpowiednie dla dużych klastrów.

Następnie możesz zamontować /media/udostępnione i sprawdź synchronizację treści.

Gotowe! W efekcie otrzymujemy mniej lub bardziej odporną na awarie pamięć masową, charakteryzującą się skalowalnością i przyzwoitą wydajnością.

Źródło: www.habr.com

Dodaj komentarz