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é sur les solutions drbd + ocfs2.

Pour qui cela sera utile:
Le didacticiel sera utile aux administrateurs système et à toute personne qui choisit une méthode d'implémentation de stockage ou souhaite essayer une solution.

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


Souvent, nous sommes confrontés à une situation où nous devons implémenter un stockage commun sur un petit cluster Web avec de bonnes performances de lecture-écriture. Nous avons essayé différentes options pour mettre en place un référentiel commun pour nos projets, mais peu de choses ont pu nous satisfaire immédiatement pour plusieurs indicateurs. Expliquons maintenant pourquoi.

  • Glusterfs ne nous convenait pas avec les performances de lecture et d'écriture, il y avait des problèmes avec la lecture simultanée d'un grand nombre de fichiers, il y avait une charge élevée sur le CPU. Le problème de lecture des fichiers pourrait être résolu en les demandant directement dans la brique, mais ce n'est pas toujours applicable et généralement incorrect.

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

  • L'utilisation d'un serveur nfs pour implémenter le stockage partagé pose des problèmes de tolérance aux pannes.

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

  • lsyncd. Si nous avons déjà commencé à parler de «systèmes non liés aux fichiers», cela vaut la peine de passer en revue cette solution populaire. Non seulement il ne convient pas à un échange bidirectionnel (mais si vous le souhaitez vraiment, vous pouvez), il ne fonctionne pas non plus de manière stable sur un grand nombre de fichiers. Un bel ajout à tout sera qu'il est monofil. La raison en est dans l'architecture du programme: il utilise inotify pour surveiller les objets de travail qu'il bloque au démarrage et pendant la nouvelle analyse. Rsync est utilisé comme support de transmission.

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


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

DRBD est le système de stockage Linux standard qui permet de répliquer les données entre les blocs serveur. L'application principale est la construction d'un stockage tolérant aux pannes.

OCFS2 est un système de fichiers qui fournit une utilisation partagée du même stockage par plusieurs systèmes. Inclus dans la distribution de Linux et est un module de noyau et des outils d'espace utilisateur pour travailler avec FS. OCFS2 peut être utilisé non seulement au-dessus de DRBD, mais également au-dessus d'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 - utilisez les mêmes périphériques de bloc pour stocker les métadonnées
device / dev / drbd0 - utilisez / dev / drbd0 comme chemin vers le volume drbd.
disque / dev / vdb1 - utilisez / dev / vdb1
sync {taux 1000M; } - utiliser la bande passante du canal gigabit
allow-two-primaires - une option importante pour permettre l'acceptation des modifications sur deux serveurs principaux
after-sb-0pri, after-sb-1pri, after-sb-2pri - options responsables des actions du nœud lorsque splitbrain est détecté. Voir la documentation pour plus de détails.
devenir-primaire-sur les deux - définit les deux nœuds sur primaire.

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

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

 10.10.10.192 drbd1 10.10.10.193 drbd2 

Étape 2. Configurez les nœuds:

Sur les deux serveurs, nous exécutons:
 drbdadm create-md drbd0 

image

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

Nous obtenons ce qui suit:

image

Vous pouvez démarrer la synchronisation. Sur le premier nœud, vous devez faire:
 drbdadm primary --force drbd0 

Nous regardons le statut:
 cat /proc/drbd 

image

Génial, la synchronisation a commencé. Nous attendons la fin et voyons l'image:

image

Étape 3. Nous commençons la synchronisation sur la deuxième note:

 drbdadm primary --force drbd0 

Nous obtenons ce qui suit:

image

Maintenant, nous pouvons écrire sur drbd à partir de deux serveurs.

Étape 4. Installez et configurez ocfs2.

Nous utiliserons une configuration assez banale:

 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 doit être écrit dans /etc/ocfs2/cluster.conf sur les deux nœuds.

Créez FS sur drbd0 sur n'importe quel nœud:
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

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

image

Dans / etc / default / o2cb doit être défini (comme dans notre fichier de configuration)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

et exécutez sur chaque nœud:
 o2cb register-cluster ocfs2cluster 

Après cela, allumez et ajoutez au démarrage toutes les unités dont nous avons besoin:
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

Une partie de cela sera déjà en cours d'exécution 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 

Le répertoire / media / shared doit être créé à l'avance.

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

Ensuite, vous pouvez 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 une évolutivité et des performances décentes.

Source: https://habr.com/ru/post/fr445612/


All Articles