Chien de berger


Sheepdog est un systÚme évolutif qui fournit des périphériques de blocs distribués aux machines virtuelles. Son développement a commencé en 2009 par des développeurs de la société japonaise Nippon Telegraph and Telephone Corporation . Sheepdog est une application open source sous licence GPL2. La derniÚre version 0.9.3, sortie en novembre 2015, sera l'héritage de la version 1.0, adaptée à un usage commercial 1 . (est déjà devenu - environ par.)


Pour des raisons d'intĂ©rĂȘt, la premiĂšre version (0.1.0) a Ă©tĂ© publiĂ©e par les dĂ©veloppeurs en aoĂ»t 2010 - et en mĂȘme temps, le support du chien de berger a Ă©tĂ© immĂ©diatement inclus dans la branche principale de dĂ©veloppement de QEMU.
Les premiers tests sur un chien de berger que j'ai effectuĂ©s en novembre 2011 2 et les rĂ©sultats Ă©taient bons pour les opĂ©rations d'E / S. Cependant, le systĂšme Sheepdog avait encore des problĂšmes avec la restauration du nƓud tombĂ©. Ce problĂšme a probablement Ă©tĂ© rĂ©solu rapidement, car le dĂ©veloppement de l'application est assez dynamique, mais Ă  l'Ă©poque, j'utilisais une solution diffĂ©rente.

Les possibilités


Le principe de fonctionnement de Sheepdog est trÚs bien décrit dans la présentation publiée, je me limiterai donc à un bref aperçu.


Il est évolutif
Le volume de cluster peut ĂȘtre augmentĂ© arbitrairement Ă  la fois au niveau du nƓud, augmentant la capacitĂ© et l'espace pour les donnĂ©es pendant le fonctionnement, et en augmentant le nombre de nƓuds. Plus il y a de nƓuds, meilleures sont les performances des E / S VDI.


Il est simple
Contrairement à d'autres systÚmes, tels que CEPH, Sheepdog ne fonctionne pas directement avec le systÚme de fichiers mais fonctionne avec des blocs de taille fixe, par conséquent, il ne nécessite pas de démons distincts pour servir les métadonnées. Tout le contrÎle est effectué à l'aide d'un seul outil de chien qui communique directement avec les moutons
(ceph utilise également des objets - environ par.)


Calcule un nƓud tombĂ©
Chaque VDI se compose de ces blocs (objets) qui sont rĂ©pliquĂ©s simultanĂ©ment sur plusieurs nƓuds.Par consĂ©quent, si l'un d'entre eux tombe, les donnĂ©es restent disponibles et les objets des nƓuds tombĂ©s commencent Ă  se rĂ©pliquer sur l'autre nƓud.


Prend en charge les instantanés de périphérique de bloc
Les instantanĂ©s de Sheepdog fonctionnent de la mĂȘme maniĂšre que Btrfs. Les blocs VDI attachĂ©s sont enregistrĂ©s et les nouvelles donnĂ©es sont Ă©crites dans de nouveaux blocs.


Les fonctions suivantes peuvent ĂȘtre problĂ©matiques dans certaines circonstances:


Sheepdog ne prend pas en charge SPOF
Si VDI est utilisĂ© comme pĂ©riphĂ©rique de bloc via QEMU, un problĂšme peut survenir s'il est connectĂ© en mĂȘme temps Ă  plusieurs endroits. SPOF 3 aurait pu empĂȘcher cela. Sheepdog n'a pas. Cependant, dans la nouvelle version de Sheepdog, VDI peut ĂȘtre bloquĂ© afin de ne pas autoriser plus d'une connexion.


Le cycle de vie des objets de données
Les objets VDI ne peuvent ĂȘtre supprimĂ©s que lorsque tous les clones et instantanĂ©s qui leur sont associĂ©s sont supprimĂ©s. C'est exactement la mĂȘme chose que pour Btrfs. Par consĂ©quent, la suppression d'instantanĂ©s inutilisĂ©s peut ne pas ĂȘtre suffisante pour faire de la place pour le stockage.


Démon de communication


Sheepdog est ridiculement petit par rapport Ă  Ceph ou GlusterFS. En effet, il n'essaie pas de rĂ©soudre lui-mĂȘme tous les problĂšmes, mais utilise au maximum ce qui fonctionne dĂ©jĂ .


À son tour, il fournit un pĂ©riphĂ©rique de bloc qui peut ĂȘtre utilisĂ© comme disque physique, ainsi qu'un raid logiciel, etc.


Il ne se soucie que de la distribution des objets de donnĂ©es entre les nƓuds sur lesquels il s'exĂ©cute.


Cependant, il a besoin des informations fournies par le démon de communication - un composant clé sans lequel Sheepdog ne fonctionnera pas.


DĂ©mon de communication - n'offre pas la possibilitĂ© d'Ă©changer des donnĂ©es entre les nƓuds. C'est ce que font les dĂ©mons moutons . GrĂące Ă  elle, les moutons dĂ©couvrent uniquement les nƓuds actuellement en vie.


corosync


Tout d'abord, Sheepdog suppose que les nƓuds communiqueront entre eux via corosync . Il prend en charge jusqu'Ă  64 nƓuds, bien qu'il devrait thĂ©oriquement ĂȘtre en mesure de servir davantage, son utilisation est optimale pour les petits clusters jusqu'Ă  16 nƓuds.


En rÚgle générale, corosync utilise également Pacemaker, il n'est donc pas nécessaire d'installer autre chose.


Installer corosync sur Debian


Corosync est dans les référentiels de distribution, et son installation est simple:


$ apt-get install corosync libcorosync-common4 

Configuration de Corosync


gardien de zoo


Les dĂ©veloppeurs de Sheepdog recommandent d'utiliser zookeeper pour les clusters plus importants. Selon les dĂ©veloppeurs, un stockage de test Sheepdog avec 1000 nƓuds a Ă©tĂ© construit et testĂ© 4 .


Installer zookeeper sur Debian


 $ apt-get install zookeeper zookeeperd 

Lancement du démon ..


 $ /usr/share/zookeeper/bin/zkServer.sh start 

Le port par défaut sur lequel s'exécute zookeeper est 2181


Exécuter le chien de berger avec le support zookeeper


 $ sheep -c zookeeper:IP1:PORT1,IP2:PORT2,IP3:PORT3 ...other...option... 

Le bonus de zookeeper est que dans son cas, Sheepdog a une configuration plus claire et plus simple des nƓuds, mais il y a un problùme que le paquet d'installation Debian n'inclut pas son support.


Par consĂ©quent, pour obtenir un Sheepdog avec le support de zookeeper, vous devez le compiler Ă  partir du code source. Bien que je ne puisse pas exclure que la situation puisse ĂȘtre diffĂ©rente Ă  l'heure actuelle.
(Le support de zookeeper nécessite toujours une compilation à partir de la source - environ par.)


Configuration du démon mouton


Le nƓud fait partie du Sheepdog lorsque le gestionnaire d'objets, le dĂ©mon mouton , dĂ©marre. Il fonctionne toujours en deux exemplaires:


  1. La premiĂšre instance du processus commence comme une passerelle, qui reçoit les demandes d'E / S des clients (par exemple, des pilotes des pĂ©riphĂ©riques de bloc QEMU), calcule les nƓuds cibles et envoie des demandes de traitement ultĂ©rieur entre eux. Autrement dit, il Ă©tablit de nombreuses connexions rĂ©seau.


  2. Un autre fonctionne comme un gestionnaire d'objets local (gestionnaire d' objets )

Les paramĂštres de configuration du dĂ©mon mouton peuvent ĂȘtre passĂ©s comme arguments de ligne de commande lors de l'exĂ©cution. S'il n'y en a pas, les valeurs par dĂ©faut seront utilisĂ©es, avec lesquelles vous devez faire attention:


Numéro de port
Sauf indication contraire, le démon mouton s'exécute sur le port 7000


Chemin d'accĂšs au coffre-fort
Sauf indication contraire, le répertoire shep utilise le répertoire / var / lib / moutdog et les objets VDI sont stockés dans son sous-répertoire obj .


ThĂ©oriquement, rien n'empĂȘche plusieurs instances de moutons de travailler sur un nƓud - la condition principale est que chacun utilise son numĂ©ro de port et son propre stockage. Le problĂšme de l'adresse IP du nƓud est presque rĂ©solu. Chaque instance en cours d'exĂ©cution du dĂ©mon mouton s'exĂ©cutant sur un port diffĂ©rent se connectera automatiquement Ă  un cluster existant!

Informations importantes: le numéro de port fait partie de la configuration du conteneur VDI. Vous devez savoir si vous souhaitez reconfigurer le démon mouton pour qu'il s'exécute sur l'autre port du cluster existant.

Par consĂ©quent, si vous exĂ©cutez une instance du dĂ©mon mouton avec un numĂ©ro de port diffĂ©rent, mais avec le mĂȘme chemin d'accĂšs au magasin d'objets, vous risquez de perdre des informations dans les conteneurs VDI existants.

Le mouton démon comme porte d'entrée


Sur les machines qui n'ont pas d'espace de stockage pour les objets VDI, le dĂ©mon mouton peut ĂȘtre exĂ©cutĂ© exclusivement en mode passerelle, avec l'indicateur -G .


Dans ce cas, lors de la distribution d'objets VDI, le stockage local ne sera pas utilisĂ© du tout et les donnĂ©es seront distribuĂ©es directement aux autres nƓuds.


Démon mouton en tant que gestionnaire d'objets


La deuxiÚme instance en cours d'exécution, agit en tant que gestionnaire d'objets local, reçoit les demandes d'E / S d'une instance qui démarre en tant que passerelle et effectue des opérations de r / w dans le stockage d'objets local ( stockage d'objets )


Stockage d'objets


Par défaut, le stockage des objets VDI dans Sheepdog est le répertoire /var/lib/sheepdog/obj mouton /var/lib/sheepdog/obj , qui est également utilisé par le démon mouton dans le cadre de sa structure de répertoire interne - c'est le chemin de stockage par défaut.


Si vous souhaitez que les objets VDI soient stockĂ©s ailleurs, vous pouvez passer le chemin oĂč un autre pĂ©riphĂ©rique de bloc est montĂ© en tant que paramĂštre au dĂ©marrage.


 sheep ... /cesta_do_pƙípojnĂ©ho_bodu 

Il existe encore plus de moyens de transmettre. La nouvelle version de Sheepdog prend en charge la technologie dite multi-périphérique, qui vous permet d'augmenter dynamiquement la capacité de mémoire, si nécessaire, sans avoir à redémarrer le Sheepdog . L'augmentation de la capacité de stockage fonctionne de maniÚre similaire à Btrfs.


 sheep ... /cesta_do_A,/cesta_do_B,/cesta_do_C 

(le premier répertoire spécifié ne sera utilisé que pour les métadonnées - environ par)


Un stockage supplĂ©mentaire peut Ă©galement ĂȘtre ajoutĂ© (ou supprimĂ©) via le nƓud de chien md


...


La fonctionnalité offerte par le multi-périphérique est particuliÚrement utile lorsque le systÚme de fichiers de stockage ne prend pas en charge cette "par conception" (contrairement à Btrfs ou ZFS). En général, le choix d'un systÚme de fichiers pour stocker des objets, leurs propriétés, paramÚtres et réglages peut affecter de maniÚre significative les performances du systÚme de fichiers IO d'une machine virtuelle.


La technologie multi-périphérique nécessite des attributs avancés cÎté fichier, ce qui n'est pas un problÚme pour les systÚmes de fichiers modernes tels que btrfs 5 ou ext4. Mais certains systÚmes de fichiers plus anciens comme reiserfs ou ext2 6 Ne les soutenez pas.

Si vous souhaitez utiliser un systÚme de fichiers qui ne prend pas en charge les attributs étendus pour stocker des objets, nous devons compiler Sheepdog sans prise en charge multi-périphérique.

Type de stockage - simple contre arbre


Lors du formatage d'un cluster, entre autres options, vous pouvez spécifier le type de stockage (stockage backend). Vous pouvez définir le type sur plain ou tree . Pour un type simple , la structure du répertoire ressemblera à ceci:


 | |- obj | |- <id > | | |-< > | | |-< > | | |-< > | | |- ... | |- <id  > | | ... |- config [] |- epoch | |- < > | |- < > | |- ... |- journal \- sheep.log [] 

Tous les objets VDI du répertoire obj seront envoyés vers un sous-répertoire dont le nom est basé sur l'identifiant de l'Úre actuelle. Autrement dit, pour chaque époque, les objets VDI correspondants seront stockés séparément. Cependant, à une époque, un grand nombre d'objets VDI peuvent apparaßtre dans le répertoire, ce qui ralentit par la suite l'accÚs aux fichiers. Par conséquent, vous pouvez choisir la deuxiÚme option, qui est l' arborescence :


 |- obj | |- aa | | |-< > | | |-< > | | |-< > | | |- ... | |- ab | | ... | |- meta | | |- < > | | |- ... | |- 0a | | ... |- config [] |- epoch | |- < > | |- < > | |- ... \- sheep.log [] 

Dans ce type de stockage, le démon mouton crée un ensemble de 256 sous-répertoires avec les noms 0a, ..., 99 dans le répertoire obj , puis disperse les objets en fonction des deux derniers caractÚres de l' ID VDI , ce qui est unique non seulement pour chaque conteneur VDI mais aussi ses instantanés ou clones.


Noms des objets VDI


Lorsque Sheepdog enregistre les données dans le conteneur VDI, les fichiers commencent à apparaßtre dans le magasin de données obj , chacun aura son propre nom composé de plusieurs éléments:


 ../obj/8f/00e8b18f00000005 ^^ 

Les deux premiers caractĂšres indiquent le type d'objet. Les objets de donnĂ©es commencent par 00... et les mĂ©tadonnĂ©es (qui peuvent ĂȘtre stockĂ©es dans un autre rĂ©pertoire) 80...


 ../obj/8f/00e8b18f00000005 ^^^^^^ 

Vient ensuite le VDI. Il est unique non seulement pour chaque conteneur, mais également pour son instantané ou son clone.


 ../obj/8f/00e8b18f00000005 ^^ ^^ 

Les deux derniers chiffres de l'identifiant VDI indiquent - dans le cas du type de stockage d' arborescence - dans lequel se trouve le sous-répertoire auquel appartient l'objet.


 ../obj/8f/00e8b18f00000005 ^^^^^^^^ 

Et l'identifiant du conteneur VDI en hexadécimal est suivi du numéro de série de l'objet dans le conteneur VDI


Époque


Le sous-rĂ©pertoire epoch contient des listes binaires d'objets appartenant Ă  l'Ă©poque. Le nombre d'Ă©poques augmente, chaque fois que chaque cluster change - lorsqu'un nƓud est ajoutĂ© ou supprimĂ©. Chacun de ces changements dĂ©marre le processus de rĂ©cupĂ©ration , au cours duquel l'Ă©tat actuel des objets locaux sera vĂ©rifiĂ© sur les nƓuds, suivi d'une augmentation de l'Ăšre.


Comment choisir le stockage d'objet VDI optimal


La capacitĂ© de stockage disponible est calculĂ©e en fonction de l'espace libre sur les nƓuds. L'espace choisi par les moutons dĂ©pend toujours de la quantitĂ© d'espace disponible dans le pĂ©riphĂ©rique de bloc oĂč les objets VDI sont stockĂ©s.


La taille d'un conteneur VDI n'est qu'une forme virtuelle qui n'est aucunement liée à l'espace occupé par les objets VDI. Il est important de savoir comment Sheepdog traite les données dans un cluster:


Sheepdog essaie toujours de stocker les données uniformément entre toutes les machines de l'époque.

Cela signifie que si l'un des nƓuds tombe, l'Ăšre change et Sheepdog dĂ©marre immĂ©diatement le processus de rĂ©cupĂ©ration, il crĂ©era les objets VDI manquants sur les nƓuds restants pour compenser la perte.


Une situation similaire se produira lors de l'ajout d'un nouveau nƓud. Sheepdog commencera Ă  dĂ©placer uniformĂ©ment les objets VDI des nouveaux nƓuds vers son rĂ©fĂ©rentiel, afin que le pourcentage de remplissage de l'espace de donnĂ©es sur les nƓuds soit aussi Ă©quilibrĂ© que possible. Utilisez la commande suivante pour obtenir un aperçu global de l'espace actuellement utilisĂ© sur vos nƓuds:


 nod1 ~ # collie node md info -A Id Size Used Avail Use% Path Node 0: 0 1.1 TB 391 GB 720 GB 35% /local/sheepdog-data/obj Node 1: 0 702 GB 394 GB 307 GB 56% /local/sheepdog-data/obj Node 2: 0 794 GB 430 GB 364 GB 54% /local/sheepdog-data/obj Node 3: 0 1.6 TB 376 GB 1.2 TB 22% /local/sheepdog-data/obj Node 4: 0 1.2 TB 401 GB 838 GB 32% /local/sheepdog-data/obj Node 5: 0 1.5 TB 370 GB 1.1 TB 24% /local/sheepdog-data/obj Node 6: 0 1.6 TB 388 GB 1.2 TB 23% /local/sheepdog-data/obj 

Performances d'E / S


Il est important de dire ici que Sheepdog fonctionne différemment de Ceph et a des priorités différentes.


Pour Ceph, le «poids» du périphérique OSD est critique lors du placement d'objets de données, ainsi que les performances du périphérique de blocage, la connectivité de l'hÎte et la vitesse de réponse. (en fait pas - environ par)


Sheepdog fait-il quelque chose comme ça, je ne sais pas. C'est possible. Les donnĂ©es pour lui viennent en premier. Les performances en termes d'opĂ©rations d'E / S sont secondaires. Bien sĂ»r, avec des nƓuds plus puissants, ses performances d'E / S peuvent s'amĂ©liorer, mais cela dĂ©pend toujours de la structure spĂ©cifique. (cependant, les tests montrent une meilleure performance du chien de berger par rapport au cĂ©ph - environ par personne)


J'ai ajoutĂ© un nouveau nƓud Ă  Sheepdog avec des donnĂ©es stockĂ©es sur un disque SATA II rotatif de 2 To. La vitesse d'Ă©criture maximale de ce disque est d'environ 80 M / s. En fait, cela varie beaucoup car les disques SATA ne peuvent pas lire et Ă©crire en mĂȘme temps.

Initialement, la vitesse d'écriture moyenne sur VDI sur ce disque était d'environ 20 à 30 M / s, car en plus des données de VDI, les données du conteneur 392G y étaient répliquées dans le cadre du processus de récupération. Cela a duré 6,5 heures. La vitesse d'écriture variait entre 40 et 55 M / s.

De toute évidence, dans ce cas, la vitesse d'écriture était limitée par les performances d'E / S du périphérique de bloc local.

Pour Sheepdog, la rĂšgle suivante s'applique: "Plus il y a d'objets VDI sur les nƓuds avec une connexion rapide, meilleures sont les performances des opĂ©rations d'E / S."


Étant donnĂ© que le dĂ©placement d'objets VDI en arriĂšre-plan signifie que la «mort rapide d'un nƓud» ralentira la rĂ©plication des objets de donnĂ©es qui occupent le plus d'espace, cela se manifestera par une diminution des performances des opĂ©rations d'E / S du conteneur VDI.


Espace occupé


Lors du placement d'objets de donnĂ©es, la quantitĂ© d'espace libre est critique pour le dĂ©mon mouton . Le mĂ©canisme semble simple. Le dĂ©mon mouton , Ă  travers lequel les donnĂ©es sont communiquĂ©es avec le conteneur VDI, dĂ©termine de temps en temps l'utilisation de l'espace libre et occupĂ© sur les nƓuds, ce qui le trie. Ensuite, les donnĂ©es sont rĂ©parties entre les nƓuds avec le taux d'utilisation le plus bas.


S'il existe un chemin d'Ă©criture principalement rapide, l'opĂ©ration d'Ă©criture dans le conteneur VDI sera Ă©galement rapide. Étant donnĂ© que plus les opĂ©rations d'E / S du conteneur VDI sont rapides, plus le dĂ©mon mouton peut passer Ă  l'opĂ©ration suivante.


L'important est qu'avec Sheepdog, il n'y ait pas de situation oĂč l'un des nƓuds est complĂštement plein. Si le taux d'utilisation sur le nƓud devient bien pire, le dĂ©mon mouton commence Ă  dĂ©placer ses objets de donnĂ©es vers un autre emplacement.


Sheepdog fonctionne comme Btrfs - en utilisant uniquement de l'espace vraiment occupé. Ainsi, vous pouvez créer un conteneur VDI virtuel d'une capacité de 1 To, qui prendra en fait autant d'espace que les données qui y sont stockées. De ce point de vue, il est souhaitable d'utiliser de tels formats de disques virtuels et de systÚmes de fichiers dans des conteneurs VDI qu'ils peuvent nettoyer l'un aprÚs l'autre.


Lancement du cluster


Alors que tous les nƓuds peuvent ĂȘtre arrĂȘtĂ©s en mĂȘme temps, les nƓuds ne peuvent pas ĂȘtre dĂ©marrĂ©s Ă  la fois !!! Les nƓuds doivent ĂȘtre connectĂ©s progressivement. En commençant par le nƓud qui a Ă©tĂ© spĂ©cifiĂ© en premier dans la liste des nƓuds.
(c'est une dĂ©claration extrĂȘmement Ă©trange - environ par)

Vdi


Il s'agit d'une abréviation générique dans Sheepdog pour disque virtuel, et non de son format spécifique. . En général, il s'agit d'une boßte virtuelle avec des compartiments de taille fixe, dans laquelle Sheepdog place ensuite les données que le client transmet.


Création de VDI


Avant de créer ou d'importer le premier VDI, nous devons formater le cluster. Lors du formatage d'un cluster, des paramÚtres sont définis qui seront ensuite utilisés par défaut lors de la création de chaque VDI suivant.


Un exemple démontrant la création d'un nouveau VDI nommé Disk1 et 1 Go de taille


 root@nod1 :~# collie vdi create disk1 1G root@nod1 :~# collie vdi list Name Id Size Used Shared Creation time VDI id Copies Tag Block Size Shift disk1 0 1.0 GB 0.0 MB 0.0 MB 2015-12-04 14:07 e8b18f 2 22 

Id
Identifiant VDI


La taille
La taille du VDI qui ne sera pas nécessairement immédiatement préallouée.
Si ce VDI est au format incrémentiel (qcow2 et similaire) créé à l'aide de qemu-img convert , il ne correspondra pas à la taille du disque virtuel, mais il augmentera constamment.


Utilisé
Informations sur l'espace occupé par les objets de données VDI.
VDI, qui ne nécessite pas d'allocation d'objets de données lors de la création, n'occupera rien du tout, car les objets de données n'ont pas encore été créés pour lui.


Partagé
Le volume d'objets de données partagés par d'autres VDI


Heure de création
Heure de création VDI


Taille de bloc
La taille de l'objet VDI. Attention! Il n'est pas spĂ©cifiĂ© en Mo, mais comme une puissance de deux octets. Dans les anciennes versions, seuls 4 Mo d'objets de taille fixe Ă©taient utilisĂ©s. Actuellement, VDI peut avoir des objets plus grands. La taille optimale pour l'objet VDI d'une machine virtuelle ordinaire ressemble Ă  64 Mo (26). La taille par dĂ©faut de 22 (4 Mo) est Ă©galement minime. Moins ne peut pas ĂȘtre installĂ©. Plus la taille de l'objet est petite, plus le nombre de fichiers que Sheepdog devra traiter lors de l'utilisation de VDI est important, et travailler avec des fichiers n'est pas un problĂšme bon marchĂ© du point de vue d'E / S. Un grand nombre de fichiers, en particulier avec des contrĂŽleurs SATA lents, peuvent entraĂźner une forte dĂ©tĂ©rioration des vitesses de lecture et d'Ă©criture. La taille maximale des objets pouvant ĂȘtre utilisĂ©s est de 31 (2 Go). Cela peut ĂȘtre avantageux si VDI stocke systĂ©matiquement une grande quantitĂ© de donnĂ©es statiques, telles que des sauvegardes.


Vdi id
Identifiant VDI.


Que contient VDI?


Le contenu VDI est constituĂ© de donnĂ©es. Ceci est un pĂ©riphĂ©rique de bloc distribuĂ©, donc Sheepdog ne rĂ©sout pas ces donnĂ©es ou ces ordures. De ce point de vue, VDI ressemble Ă  un volume logique LVM. Un VDI prĂ©-rempli correspond Ă  une partition LV classique avec une plage dĂ©diĂ©e, tandis que le VDI ressemble Ă  une partition LV mince créée dans un pool (voir LVM (thin_provisioning)), mais avec la diffĂ©rence que les Ă©tendues de donnĂ©es (objets) ne sont pas enregistrĂ©es sur local bloquer les pĂ©riphĂ©riques et sont dispersĂ©s entre les nƓuds.


Le format VDI fonctionne dans cette analogie comme un systÚme de fichiers. Certains occupent des étendues réservées (objets) de maniÚre séquentielle, d'autres les mappent en tant qu'inodes, puis leur envoient directement des données. Une combinaison incorrecte du systÚme de fichiers de stockage de noeud, du format VDI et du systÚme de fichiers interne peut entraßner une dégradation significative des performances d'E / S.

Comment obtenir des informations sur VDI


Pour en savoir plus sur le format VDI, vous pouvez utiliser qemu-img info :


 root@nod1 :~# qemu-img info sheepdog:localhost:8000:disk1 image: sheepdog:localhost:8000:test2 file format: qcow2 virtual size: 12G (12884901888 bytes) disk size: 4.0G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false 

À la sortie de la commande, vous pouvez dĂ©couvrir que disk1 a une taille nominale de 12G. Actuellement, il ne prend que la 4G. Puisqu'il est au format qcow2, il est Ă©vident qu'il a Ă©tĂ© créé comme incrĂ©mental.


 root@nod1 :~# collie vdi list Name Id Size Used Shared Creation time VDI id Copies Tag Block Size Shift disk2 0 4.0 GB 4.0 GB 0.0 MB 2015-12-04 16:07 825dc1 2 31 root@nod1 :~# qemu-img info sheepdog:localhost:8000:disk2 image: sheepdog:localhost:8000:disk2 file format: raw virtual size: 4.0G (4294967296 bytes) disk size: 4.0G root@nod1 :~# find /datastore/obj/ | grep 825dc1 /datastore/obj/meta/80825dc100000000 /datastore/obj/c1/00825dc100000000 /datastore/obj/c1/00825dc100000001 

Dans ce cas, Disk2 a été créé en tant que VDI préalloué de 4 Go au format brut avec une taille de bloc de 2 Go, ce qui ne prend en fait que deux 2 Go


Exporter VDI dans un fichier


Le contenu VDI peut ĂȘtre exportĂ© de Sheepdog de plusieurs maniĂšres. Le plus rapide est peut-ĂȘtre d'utiliser la lecture de chien . La commande est un peu dĂ©routante, mais signifie simplement: "Chargez le contenu du VDI et envoyez-le Ă  STDOUT ..", qui peut ĂȘtre redirigĂ© vers un fichier:


 root@nod1 :~# collie vdi read disk1 > /backups/soubor.raw 

Si VDI a 10G mais seulement 2G est utilisé, il créera un fichier avec une pleine capacité de 10 Go.


Dans cette commande, le contenu du VDI est inchangĂ© , donc si le contenu du VDI, par exemple, un disque virtuel au format qcow2 compressĂ©, peut ĂȘtre utilisĂ© directement


 .. -drive file=file:/disk1_exportovany_z_vdi,..,format=qcow2 .. 

Une autre façon d'obtenir le contenu de VDI dans un fichier est d'utiliser qemu-img convert . Ce n'est pas si rapide, mais cela vous permet de convertir VDI en un autre format en utilisant différentes options du format de disque virtuel correspondant.


 root@nod1 :~# qemu-img convert -f qcow2 -O file -o preallocation=full,nocow=on sheepdog:localhost:8000:disk1 /disk1_exportovany_z_vdi 

Sauvegarde incrémentielle


Créer une sauvegarde incrémentielle


Delta entre le premier et le deuxiÚme instantané ..


 root@nod1 :~# collie vdi backup test -F snap1 -s snap2 /backups/soubor_diff 

Restaurer VDI à partir d'une sauvegarde incrémentielle


 root@nod1 :~# collie vdi restore test -s snap1 /tmp/backup restoring /tmp/backup... done 

Lors de l'importation d'une sauvegarde incrémentielle, le VDI doit bien sûr avoir l'instantané à partir duquel la sauvegarde a été effectuée.


Vérification en lisant le contenu original du test d'image ...


  root@nod1 :~# collie vdi read test 0 512 -s 3 

Importer VDI Ă  partir d'un fichier


L'importation d'un disque virtuel existant en tant que fichier FS local peut ĂȘtre effectuĂ©e de la mĂȘme maniĂšre pour l'exportation. Mais avec la diffĂ©rence que l' Ă©criture de chien est utilisĂ©e ("Lecture des donnĂ©es de STDIN et Ă©criture dans un fichier VDI ..")


 root@nod1 :~# collie vdi write disk1 < /backups/soubor.raw 


  • Le contenu ne peut ĂȘtre importĂ© que dans un VDI existant.
  • Le VDI importĂ© occupe toujours plus d'espace que le fichier d'origine, car les blocs de donnĂ©es Ă  partir desquels le VDI est restaurĂ© contiennent des donnĂ©es sur la zone marquĂ©e.

Si VDI n'existe pas encore et que nous ne savons pas combien d'espace sera nécessaire pour le disque virtuel, nous pouvons utiliser qemu-img convert


 root@nod1 :~# qemu-img convert -f file -O qcow2 -o redundancy=2:1 ./disk_ukladany_do_vdi sheepdog:localhost:8000:disk 

Bien que les formats VDI tels que qcow2, qed et autres puissent ĂȘtre utilisĂ©s dans VDI. Pour l'efficacitĂ© des E / S, il est prĂ©fĂ©rable de prĂ©allouer les blocs de donnĂ©es.
, Sheepdog VDI.

http://www.sheepdog-project.org/doc/vdi_read_and_write.html


VDI


VDI , .


 root@nod1 :~# collie vdi check disk1 

VDI, . Sheepdog , . , .

: 'dog node kill' , ethernet , sheep . (, Ethernet), sheep . .


IO VDI


VDI . . , IO VDI.


Sheepdog SYNC, . -, VFS, , , .


VDI Sheepdog , . . Sheepdog VDI-.


VFS-


IO VDI sheep -n . SYNC , , VFS . , VFS , , !


. , — , , .


  sheep -n ... 

Sheepdog . -D


- . sheep - IO — SSD . , VDI, SYNC . .


, VDI , VDI . , , , VDI.


 sheep -w size=20000,directio,dir=/dir ... 

size


directio
sheep , . SSD.


dir


      ,     . 

( ) dog .


VDI dog vd cashe flush , VDI!


— . VDI, VFS , (/store_dir/journal/[epoch]/[vdi_object_id]), , .


IO , (cik, cak), (sequence).


, Sheepdog VDI , , SSD-. , VDI , , VDI.


sheep —


 $ sheep -j size=256M ... 

, VDI , . -, — — -:


 $ sheep -j dir=/dir,size=256M ... 

dir = , . , SW RAID SSD.


: sheep , . , skip, .


 $ sheep -j dir=/dir,size=256M,skip ... 



  1. ↑ . 2015 . http://events.linuxfoundation.jp/sites/events/files/slides/COJ2015_Sheepdog_20150604.pdf
  2. ↑ http://www.abclinuxu.cz/blog/kenyho_stesky/2011/11/sheepdog-hrajeme-si-v-hampejzu
  3. ↑ SPOF ( S ingle p oint o f f ailure) , . SPOF VDI iSCSI tgtd
  4. ↑ 1
  5. ↑ Btrfs — COW, , . , -, . , , . , , . , :


    autodefrag — , .



    nocow — (), — GlusterFS


    Btrfs , , FS, Sheepdog .


    • , , ,
    • multipath, .

    , , , Sheepdog.


  6. ↑ Ext2 . - FS Btrfs, ext2, inode. ext3 ext4 . inode , Sheepdog . , -, . , Sheepdog , dog vdi check . , ext2 , — - dog vdi md , VDI .


  7. ↑ , , vdi QEMU_Block_Disk

Les références


https://github.com/collie/sheepdog/wiki — ,
http://www.osrg.net/sheepdog/ — Nippon Telegraph and Telephone Corporation
http://www.sheepdog-project.org/doc/index.html — Sheepdog 0.8.0; — Valerio Pachera
http://www.admin-magazine.com/Archive/2014/23/Distributed-storage-with-Sheepdog — Udo Seidela Sheepdog , 23- Admin 2014

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


All Articles