Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

De quoi nous allons parler :
Comment déployer rapidement un stockage partagé pour deux serveurs basé sur des solutions drbd+ocfs2.

Pour qui cela sera utile :
Ce tutoriel sera utile aux administrateurs systÚme et à tous ceux qui choisissent un moyen de réaliser un stockage ou souhaitent essayer une solution.

Des solutions dont nous nous sommes éloignés et pourquoi

Nous faisons souvent face Ă  la situation oĂč nous devons mettre en Ɠuvre un stockage partagĂ© sur un petit cluster web avec de bonnes performances en lecture et en Ă©criture. Nous avons essayĂ© diffĂ©rentes options de mise en Ɠuvre du stockage partagĂ© pour nos projets, mais peu d'entre elles ont pu nous satisfaire sur plusieurs critĂšres. Nous allons maintenant vous expliquer pourquoi.

  • Glusterfs ne nous a pas convaincus par ses performances en lecture et en Ă©criture, des problĂšmes se posaient lors de la lecture simultanĂ©e d'un grand nombre de fichiers, avec une forte charge sur le CPU. Le problĂšme de lecture des fichiers pouvait ĂȘtre rĂ©solu en les rĂ©cupĂ©rant directement dans les bricks, mais ce n'est pas toujours applicable et gĂ©nĂ©ralement incorrect.

  • Ceph ne nous a pas plu en raison de sa complexitĂ© excessive, qui peut ĂȘtre nuisible sur des projets de 2 Ă  4 serveurs serveurs trĂšs chargĂ©s, en particulier si le projet est ensuite maintenu. De plus, il existe des limitations sĂ©rieuses en matiĂšre de performances, obligeant Ă  construire des clusters de stockage sĂ©parĂ©s, tout comme avec glusterfs.

  • L'utilisation d'un serveur NFS pour rĂ©aliser un stockage partagĂ© suscite des questions en termes de tolĂ©rance aux pannes.

  • s3 — une excellente solution populaire pour certaines tĂąches, mais ce n'est pas un systĂšme de fichiers, ce qui limite son domaine d'application.

  • lsyncd. Si nous avons dĂ©jĂ  commencĂ© Ă  parler de « systĂšmes non-fichiers », il convient Ă©galement de passer en revue cette solution populaire. Non seulement elle n'est pas adaptĂ©e Ă  l'Ă©change bidirectionnel (mais si vous tenez vraiment, c'est possible), mais en plus, elle ne fonctionne pas de maniĂšre stable avec un grand nombre de fichiers. Un complĂ©ment agrĂ©able est qu'elle est monothread. La raison en est l'architecture du programme : elle utilise inotify pour surveiller les objets de travail, qu'elle accole lors du dĂ©marrage et lors du rescannage. Pour le transfert, rsync est utilisĂ©.

Tutoriel : Comment déployer un stockage partagé basé sur drbd+ocfs2

L'une des solutions les plus adaptées pour nous a été la combinaison ocfs2+drbd. Nous allons maintenant vous expliquer comment mettre en place rapidement un stockage partagé pour deux. serveurs sur des solutions de base de données. Mais d'abord, un peu sur les composants :

DRBD — un systĂšme de stockage fourni par dĂ©faut avec Linux, qui permet de rĂ©pliquer des donnĂ©es entre des serveurs par blocs. Son utilisation principale consiste Ă  construire des systĂšmes de stockage tolĂ©rants aux pannes.

OCFS2 — un systĂšme de fichiers qui permet l'accĂšs partagĂ© au mĂȘme stockage par plusieurs systĂšmes. Il fait partie de la distribution Linux et se compose d'un module de noyau et d'outils en espace utilisateur pour travailler avec le systĂšme de fichiers. OCFS2 peut ĂȘtre utilisĂ© non seulement au-dessus de DRBD, mais aussi au-dessus d'iSCSI avec plusieurs connexions. Dans notre exemple, nous utilisons DRBD.

Toutes les actions sont réalisées sur un serveur Ubuntu 18.04 avec une configuration minimale.

Étape 1. Configuration de DRBD :

Dans le fichier /etc/drbd.d/drbd0.res, nous décrivons notre dispositif de bloc virtuel /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;
}
}

meta-disk internal — utiliser les mĂȘmes dispositifs de bloc pour stocker les mĂ©tadonnĂ©es
device /dev/drbd0 — utiliser /dev/drbd0 comme chemin vers drbd.
disk /dev/vdb1 — utiliser /dev/vdb1
syncer { rate 1000M; } — utiliser la bande passante gigabit de la liaison
allow-two-primaries — une option importante, permettant d'accepter les modifications sur deux serveurs principaux
after-sb-0pri, after-sb-1pri, after-sb-2pri — des options qui dĂ©terminent les actions du nƓud lors de la dĂ©tection d'un split-brain. Vous pouvez en savoir plus dans la documentation.
become-primary-on both — dĂ©finit les deux nƓuds comme principaux.

Dans notre cas, nous avons deux machines virtuelles absolument identiques, avec un réseau virtuel dédié ayant une bande passante de 10 gigabits.

Dans notre exemple, les noms des deux nƓuds du cluster sont drbd1 et drbd2. Pour un fonctionnement correct, il est nĂ©cessaire de faire correspondre les noms et les adresses IP des nƓuds dans /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Étape 2. Configuration des nƓuds :

Sur les deux serveurs, exécutez :

drbdadm create-md drbd0

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Nous obtenons ce qui suit :

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

Nous pouvons lancer la synchronisation. Sur le premier nƓud, vous devez exĂ©cuter :

drbdadm primary --force drbd0

Vérifions le statut :

cat /proc/drbd

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

Parfait, la synchronisation a commencé. Nous attendons son achÚvement et constatons ce résultat :

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

Étape 3. Lancement de la synchronisation sur le deuxiùme nƓud :

drbdadm primary --force drbd0

Nous obtenons ce qui suit :

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

Nous pouvons désormais écrire dans drbd depuis les deux serveurs.

Étape 4. Installation et configuration d'ocfs2.

Nous allons utiliser une configuration assez triviale :

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

Il faut l'enregistrer dans /etc/ocfs2/cluster.conf les deux nƓuds.

CrĂ©ons un FS sur drbd0 sur n'importe quel nƓud :

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

Ici, nous avons créé un FS avec l'étiquette testVol sur drbd0 en utilisant les paramÚtres par défaut.

Stockage en cluster pour de petits web-clusters basé sur drbd+ocfs2

Dans /etc/default/o2cb, il est nécessaire de définir (comme dans notre fichier de configuration)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

et d'exĂ©cuter sur chaque nƓud :

o2cb register-cluster ocfs2cluster

Ensuite, nous activons et ajoutons au démarrage automatique tous les unités nécessaires :

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Une partie de cela sera déjà lancée lors du processus de configuration.

Étape 5. Ajout des points de montage dans fstab sur les deux nƓuds :

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

RĂ©pertoire /media/shared celui-ci doit ĂȘtre créé Ă  l'avance.

Ici, nous utilisons l'option noauto, ce qui signifie que le FS ne sera pas montĂ© au dĂ©marrage (je prĂ©fĂšre monter les FS rĂ©seaux via systemd) et heartbeat=local, ce qui signifie l'utilisation du service heartbeat sur chaque nƓud. Il existe Ă©galement un heartbeat global, plus adaptĂ© aux grands clusters.

Ensuite, nous pouvons monter /media/shared et vérifier la synchronisation du contenu.

C'est fait ! En conséquence, nous obtenons un stockage plus ou moins tolérant aux pannes avec la possibilité de mise à l'échelle et des performances décentes.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster