Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

De quoi nous parlerons :
Comment déployer rapidement un stockage partagé pour deux serveurs basés sur les solutions drbd+ocfs2.

A qui il sera utile :
Le didacticiel sera utile aux administrateurs système et à toute personne choisissant une méthode de mise en œuvre du stockage ou souhaitant essayer la solution.

Quelles décisions avons-nous refusées et pourquoi ?

Nous sommes souvent confrontés à une situation dans laquelle nous devons implémenter un stockage partagé avec de bonnes performances de lecture-écriture sur un petit cluster Web. Nous avons essayé différentes options pour mettre en œuvre un stockage partagé pour nos projets, mais peu ont pu nous satisfaire sur plusieurs indicateurs à la fois. Maintenant, nous allons vous dire pourquoi.

  • Glusterfs ne nous satisfaisait pas en termes de performances de lecture et d'écriture, il y avait des problèmes avec la lecture simultanée d'un grand nombre de fichiers et la charge du processeur était élevée. Le problème de lecture des fichiers pourrait être résolu en y accédant directement depuis Brick, mais cela n'est pas toujours applicable et est généralement incorrect.

  • Ceph n'a pas aimé la complexité excessive, qui peut être préjudiciable sur des projets comportant 2 à 4 serveurs, surtout si le projet est maintenu par la suite. Encore une fois, il existe de sérieuses limitations de performances qui nous obligent à créer des clusters de stockage séparés, comme avec glusterfs.

  • Utiliser un seul serveur NFS pour mettre en œuvre un stockage partagé soulève des questions en termes de tolérance aux pannes.

  • s3 est une excellente solution populaire pour un certain nombre de tâches, mais ce n'est pas un système de fichiers, ce qui en restreint la portée.

  • lsyncd. Si nous avons déjà commencé à parler de « systèmes sans fichiers », cela vaut la peine d'examiner cette solution populaire. Non seulement il ne convient pas à l'échange bidirectionnel (mais si vous le souhaitez vraiment, vous le pouvez), mais il ne fonctionne pas non plus de manière stable sur un grand nombre de fichiers. Un ajout intéressant à l'ensemble est qu'il est monothread. La raison réside dans l'architecture du programme : il utilise inotify pour surveiller les objets de travail, qu'il attribue au démarrage et lors de la nouvelle analyse. rsync est utilisé comme support de transfert.

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

L'une des solutions les plus pratiques pour nous était le lien ocfs2+drbd. Nous allons maintenant vous expliquer comment déployer rapidement un stockage partagé pour deux serveurs basés sur une base de données de solution. Mais d’abord, un peu sur les composants :

DRBD - un système de stockage de la distribution Linux standard qui permet de répliquer les données entre serveurs par blocs. L'application principale consiste à créer un stockage tolérant aux pannes.

OCFS2 - un système de fichiers qui permet une utilisation partagée du même stockage par plusieurs systèmes. Inclus dans la distribution Linux, il s'agit d'un module de noyau et d'outils d'espace utilisateur pour travailler avec FS. OCFS2 peut être utilisé non seulement sur DRBD, mais également sur iSCSI avec plusieurs connexions. Dans notre exemple, nous utilisons DRBD.

Toutes les actions sont effectuées sur le serveur Ubuntu 18.04 dans une configuration minimale.

Étape 1. Configurez DRBD :

Dans le fichier /etc/drbd.d/drbd0.res nous décrivons notre périphérique 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;
}
}

méta-disque interne - utiliser les mêmes périphériques de bloc pour stocker les métadonnées
périphérique /dev/drbd0 - utilisez /dev/drbd0 comme chemin d'accès au volume drbd.
disque /dev/vdb1 - utilisez /dev/vdb1
synchroniseur { taux 1000M ; } - utiliser la bande passante du canal Gigabit
autoriser deux primaires - une option importante qui permet d'accepter les modifications sur deux serveurs principaux
après-sb-0pri, après-sb-1pri, après-sb-2pri - options responsables des actions du nœud lorsque le splitbrain est détecté. Plus de détails peuvent être trouvés dans la documentation.
devenir-primaire-sur les deux - définit les deux nœuds comme principaux.

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

Dans notre exemple, les noms réseau de deux nœuds de cluster sont drbd1 et drbd2. Pour un fonctionnement correct, vous devez faire correspondre les noms et adresses IP des hôtes dans /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Étape 2. Configurer les nœuds :

Sur les deux serveurs, nous exécutons :

drbdadm create-md drbd0

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Nous obtenons ce qui suit :

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

Vous pouvez démarrer la synchronisation. Sur le premier nœud, vous devez exécuter :

drbdadm primary --force drbd0

Regardons le statut :

cat /proc/drbd

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

Super, la synchronisation a commencé. On attend la fin et on voit la photo :

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

Étape 3. Démarrez la synchronisation sur le deuxième nœud :

drbdadm primary --force drbd0

Nous obtenons ce qui suit :

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

Nous pouvons désormais écrire sur drbd à partir de deux serveurs.

Étape 4. Installez et configurez ocfs2.

Nous utiliserons 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'écrire dans /etc/ocfs2/cluster.conf sur les deux nœuds.

Nous créons un FS sur drbd0 sur n'importe quel nœud :

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

Ici, nous avons créé un système de fichiers avec le label testVol sur drbd0, en utilisant les paramètres par défaut.

Stockage en cluster pour les petits clusters Web basés sur drbd+ocfs2

Dans /etc/default/o2cb vous devez définir (comme dans notre fichier de configuration)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

et exécutez sur chaque nœud :

o2cb register-cluster ocfs2cluster

Ensuite, nous allumons et ajoutons toutes les unités dont nous avons besoin pour l'exécution automatique :

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Une partie de cela sera déjà exécutée pendant le processus d’installation.

Étape 5. Ajoutez des points de montage à fstab sur les deux nœuds :

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

Annuaire /média/partagé il doit être créé à l'avance.

Ici, nous utilisons les options noauto, ce qui signifie que le fichier ne sera pas monté au démarrage (je préfère monter les fichiers réseau via systemd) et heartbeat=local, ce qui signifie utiliser le service heartbeat sur chaque nœud. Il existe également un rythme cardiaque global, plus adapté aux grands clusters.

Ensuite, vous pouvez monter /média/partagé et vérifiez la synchronisation du contenu.

Fait! En conséquence, nous obtenons un stockage plus ou moins tolérant aux pannes avec une évolutivité et des performances décentes.

Source: habr.com

Ajouter un commentaire