编程知识 cdmana.com

Aurora notes 丨 mise en place d’un serveur de fichiers cloud privé UMS

Notes AuroraUMSCloud privé1000

Ingénieur principal Aurora——Champion Hu.

Un.、Contexte

CauseUMS5.1Signature SMS dans la version,Le courrier prend en charge le téléchargement d'images locales/ Exigences du produit pour soutenir le téléchargement des pièces jointes , Et les scénarios qui pourraient exister par la suite qui nécessitent un grand stockage de fichiers , Il faut donc créer un serveur de fichiers privé Cloud , Et ce serveur doit également être compatible avec le serveur de fichiers client (Note:: Les serveurs de fichiers clients sont généralement compatibles S3Accord)

2.、 Serveur de fichiers d'enquête

Après toutes sortes de recherches , Sélection des modèles et discussion en groupe ,Choix de la décision finaleminIO

1.minIO****Introduction

minIO Est basé sur Apache License v2.0 Utilisation du Protocole Open Source Go Services de stockage d'objets pour le développement linguistique .Il est compatible avec Amazon S3 Interface de service de stockage en nuage,Idéal pour stocker de grandes quantités de données non structurées,Comme les photos、Vidéo、Fichiers journaux、Sauvegarde des données et des conteneurs/Miroir de machine virtuelle, etc, Et un fichier objet peut être extrait de kbAu maximum5TAttendez..minIO C'est un service très léger,Peut être facilement combiné avec d'autres applications,Similaire NodeJS, Redis Ou MySQL.

2.minIO****Avantages

Compatible avec Amazon S3

minIOUtiliser Amazon S3 v2 / v4 API.

Protection des données

minIOUtilisererasure code Pour prévenir les pannes matérielles . Même si plus de la moitié du disque dur est endommagé , Les données peuvent encore être récupérées à partir de .

Très disponible

minIO Le serveur peut supporter jusqu'à (N / 2)-1 Défaillance du noeud.

Lambda Calcul

minIO Le serveur est compatible avec AWS SNS / SQS Le Service de notification d'événements a déclenché Lambda Fonction. La cible prise en charge est la file d'attente des messages ,Par exemple:Kafka,AMQP,Et Elasticsearch,Redis,MySQL Base de données.

Cryptage et protection contre les manipulations

minIO Assurer la confidentialité des données chiffrées , Garantie d'intégrité et d'authenticité , Et les frais généraux de performance sont minimes .Utiliser AES-256-GCM,ChaCha20-Poly1305 Et AES-CBC Prise en charge du chiffrement côté serveur et côté client.

Stockage arrière dockable

Sauf queminIO Système de fichiers propre ,Il soutient également DAS、 JBODs、NAS、Google Stockage en nuage et Azure Blob Stockage.

sdk Soutien

Basé surminIO Caractéristiques légères , C'est similaire. Java、Python Ou Go Isolingue sdk Soutien

Cohérence

minIO En mode distribué et autonome , Toutes les opérations de lecture et d'écriture sont strictement respectées read-after-writeModèle de cohérence.

3.minIO****Schéma

minIO Adopter une architecture décentralisée sans partage , Les données de l'objet sont dispersées sur plusieurs disques durs stockés dans différents noeuds , Fournir un accès unifié à l'espace de noms ,Et à traversWeb Équilibreur de charge ou DNSVote(DNS round-robin) Équilibrer la charge entre les serveurs .

1

4.minIO****Mécanisme de stockage

4.1 Concepts de base

  • Disque dur(Drive): C'est - à - dire le disque sur lequel les données sont stockées ,In minIO Au démarrage, Passer en paramètre .

  • Groupe( Set ): Un groupe. Drive Collection de, Les déploiements distribués sont automatiquement divisés en un ou plusieurs en fonction de la taille de la grappe Set ,Chaque Set Dans Drive Distribué à différents endroits .Un objet est stocké dans un Set Allez..

  • Seau(Bucket): Emplacement logique du stockage des objets de fichiers ,Pour les clients, C'est l'équivalent d'un dossier de haut niveau pour les fichiers .

4.2 Code de correction

minIO Utilisez le Code de correction(erasure code) Somme de contrôle (check sum) Pour protéger les données contre les pannes matérielles et la corruption silencieuse des données . Même si vous perdez la moitié de la quantité (N/2)Le disque dur de, Vous pouvez encore récupérer des données .

Qu'est - ce qu'un code de correction? ? C'est un algorithme mathématique pour récupérer les données perdues et corrompues ,minIO AdoptionReed-Solomon CodeImplémenter le Code de correction d'effacement, Il divise les objets en N/2 Blocs et N/2 Bloc de parité. Cela signifie que si 12 Disque de bloc, Un objet est divisé en 6 Blocs de données、6 Blocs de parité, Vous pouvez perdre n'importe quoi 6 Disque de bloc( Qu'il s'agisse d'un bloc de données stocké ou d'un bloc de parité ), Vous pouvez encore récupérer les données des disques restants .

4.3 Reed-Solomon Code**** Brève analyse du principe de récupération des données

RS Codage par word Pour les unités de codage et de décodage , Les grands blocs de données sont divisés en w(La valeur est généralement8Ou16Bits)Deword,Et oui.wordPour coder et décoder. Principe de codage des blocs de données et word Le principe de codage est le même , Lire comme suit: wordExemple,VariablesDi, Ci Représente un word. Traiter les données d'entrée comme des vecteurs D=(D1,D2,..., Dn), Les données codées sont considérées comme des vecteurs (D1, D2,..., Dn, C1, C2,.., Cm),RS Le codage peut être considéré comme suit: (Fig.1) Opérations matricielles indiquées .Fig.1 À gauche, la matrice de codage ( Ou matrice de génération 、 Matrice de distribution ,Distribution Matrix), La matrice de codage doit satisfaire à l'une des exigences suivantes: n*n Réversibilité de la Sous - matrice . Pour faciliter le stockage des données , La partie supérieure de la matrice de codage est la matrice d'Unit é (nD'accordnColonnes),La partie inférieure estmD'accordnMatrice de colonne. La matrice inférieure peut être choisie soit par la matrice van der mond, soit par la matrice Cauchy .

RS Tolérance maximale m Blocs supprimés . Le processus de récupération des données est le suivant :

(1)HypothèsesD1、D4、C2Perdu, Supprimer les blocs manquants de la matrice de codage / Ligne correspondant au bloc d'encodage .(Fig.2、3)

(2)Parce queB' C'est réversible.,NoteB' La matrice inverse de (B'^-1),EtB' * (B'^-1) = I Matrice unitaire. Multiplier à gauche des deux côtés B' Matrice inverse. (Fig.4、5)

(3) Obtenir les données brutes suivantes DFormule de calcul pour,Comme le montre la figure ci - dessous::

2

(4)C'est exact.DRe - codage, Vous pouvez obtenir le Code manquant .

3

4.4 En mode correction - effacement minIO

minIOSera généré automatiquement12Disque de bloc,Les ordres sont les suivants::

4

4.5 Forme de stockage

Objet de données dans minIO Lorsqu'il est stocké dans un Cluster , Correction, suppression et tranchage , Stockage post - rupture sur chaque disque dur .Plus précisément::minIO Générer automatiquement plusieurs groupes de correction dans le cluster , Chaque groupe de correction contient un ensemble de disques durs , La quantité est généralement 4à16Bloc; Fragmenter les objets de données , La politique par défaut est d'obtenir le même nombre de partitions de données et de vérifier les partitions ; Ensuite, le Groupe de correction et de suppression correspondant à l'objet de données est calculé par algorithme de hachage , Et stocker les données et les pièces de contrôle sur le disque dur dans le Groupe de correction .

5

Comme le montre la figure ci - dessus,Supposons queminIO Le Groupe de correction et de suppression dans le cluster contient: 4Disque dur bloc, Un objet de données nommé MyObject, Le seau auquel il appartient s'appelle MyBucket, Le hachage calcule que le Groupe de correction correspondant est Disk 14.Alors, dansDisk 14 Sous le chemin de données pour ,Sont généréesMyBucket/MyObjectSous - chemin, Inclure dans le Sous - chemin 2Fichiers, Pour stocker des informations sur les métadonnées séparément xl.jsonEtMyObject Le Premier fragment de l'objet sur ce disque part.1.Parmi eux,xlReprésentationminIO Format de stockage par défaut pour les objets de données dans .

5.minIO golang SDK****Utilisation simple

Les exemples suivants de téléchargement de fichiers peuvent être exécutés directement , Les fichiers sont téléchargés vers minIOServeur officiel

6 7

Trois、minIOInUMS Applications pratiques dans le système

**1.**Architecture du système d'application

Tout au long de l'architecture , Utilisation entre modules httpCommunication par protocole, Et chaque module fonctionne comme suit :

(1)Web/API Le rôle du serveur est de fournir UMS Authentification et authentification du système ,ValidationWeb Client ou développeur API Légitimité de l'interface demandée ; 8

(2) Le rôle du serveur de gestion de fichiers est de fournir des opérations externes minIOInterface du serveur,D'après les données actuellesUMS Exigences opérationnelles du système , Seuls les fichiers téléchargés sont disponibles presignedURL,Définir le délai d'expiration, Définir la politique d'accès externe ,Créer un seau, Générer un fichier de téléchargement URLLa fonction de;Qu'est - ce quepresignedURLEt alors?? C'est le propriétaire de l'objet qui utilise ses propres identifiants de sécurité pour créer une pré - signature URL, Pour autoriser le téléchargement ou le téléchargement d'objets pour une période limitée , Pour partager des objets avec d'autres utilisateurs ,Note:: Même pour les objets privés presignedURL Peut également être partagé avec d'autres ,EtpresignedURL Durée maximale de validité: 7Oh, mon Dieu..

Où le serveur de gestion de fichiers obtient les fichiers téléchargés presignedURL La méthode de minIOOfficiellementAPI, Bien sûr que tu peux le faire toi - même. presignedURLMéthodes,En outre, Depuis le téléchargement presignedURL Le temps de rétention maximal est 7Oh, mon Dieu.,Non conformeUMS Exigences opérationnelles du système ,Alors..., Le serveur de gestion de fichiers implémente lui - même un téléchargement Build URLMéthode, Le délai d'expiration de ce lien peut être fixé arbitrairement , Mais seulement si la politique d'accès externe du seau est définie à public.Par conséquent,, Le client peut utiliser le téléchargement directement presignedURL Fichier vers le Haut minIOServeur, Il suffit de télécharger le fichier directement en utilisant le lien de téléchargement .

(3)minIO Le Cluster stocke les fichiers de l'entité , Le Cluster adopte une architecture décentralisée sans partage , Les noeuds sont égaux , La connexion à n'importe quel noeud permet l'accès au cluster ,minIO L'avant du cluster a été ajouté NginxMise en œuvre de l'agent inverse;minIO Toutes les communications entre noeuds utilisent rpc.En outre,GestionminIO Serveur autre que celui mentionné ci - dessus SDKÀ l'extérieur, Les autorités ont également fourni des lignes de commande et webForme de la page,Le contenu est le suivant::

9

Prends ça.NginxAgentsip Et le numéro de port ou minIO De n'importe quel noeud du cluster ip Et le navigateur d'entrée de numéro de port ,EntréeminIO Le nom de compte et le mot de passe de ,L'interface est la suivante:

10

**2.** Logique interactive spécifique

11

Tout d'abord,, Le client demande un serveur d'affaires (WebServer/APIServer) Obtenir des justificatifs d'identité pour télécharger des fichiers (presignedURL),Et puis, Le serveur d'affaires répond à un fichier téléchargé URL Et télécharger des fichiers URL, Téléchargement par le client URLTélécharger des fichiers sur un serveur de fichiers,Utiliser le téléchargementURL Comme paramètre de fichier pour l'arrière - plan de la requête , Si l'envoi de messages électroniques prend en charge le téléchargement d'images locales , Les images téléchargées à l'arrière - plan peuvent être téléchargées à l'aide de fichiers URLComme paramètre.

Les avantages de cette option sont les suivants: :

  • Le client télécharge directement le fichier vers minIOServeur, Sans passer par le serveur d'affaires , Réduire la pression sur les serveurs d'affaires ,Améliorer la disponibilité

  • Le serveur de base de données ne stocke que les téléchargements de fichiers URL, Réduire le stockage de la base de données

  • Prise en charge du téléchargement de fichiers surdimensionnés ,Par exemple,3G Ci - dessus, etc. , Lorsque les performances matérielles sont suffisantes ,minIO Serveur jusqu'à un seul fichier 5T

  • Il n'y a pas de limite au nombre de fichiers téléchargés

  • Peut résoudre le problème de superposition de fichiers avec le même nom

  • Peut s'adapter à n'importe quelle compatibilité S3Serveur de fichiers pour le Protocole, Répondre aux exigences des différents clients

Quatre、minIODéploiement réparti

  1. minIO****Architecture de déploiement distribuée

1.1 Aperçu de l'architecture

minIO Le Cluster adopte une architecture décentralisée sans partage , Les noeuds sont égaux , La connexion à n'importe quel noeud permet l'accès au cluster , Ce n'est pas l'architecture de Cluster distribuée la plus courante que ce type de conception maintient des relations de pair à pair entre les noeuds . La plupart des clusters de stockage distribués actuels , Ses noeuds peuvent souvent être divisés en plusieurs types de rôles , Par exemple, un noeud d'accès qui est responsable de la connexion et du traitement des demandes d'application externes 、 Noeud de gestion responsable du stockage des métadonnées 、 Noeuds de stockage de données réels, etc. .minIOContrairement à ça,minIO Tous les noeuds du cluster ont plusieurs rôles en même temps , Définir le stockage des métadonnées 、Stockage de données、 Accès aux applications et autres fonctions , La décentralisation et l'équivalence complète de tous les noeuds sont réellement réalisées . L'avantage est qu'il réduit efficacement les processus d'ordonnancement complexes au sein du cluster ainsi que les risques de défaillance et les goulets d'étranglement de performance causés par les noeuds centraux .

Ci - dessousminIO Augmentation du nombre de grappes NginxAgents:

12

DéploiementminIO Le Cluster n'a besoin que d'une seule commande , Mais chaque noeud du cluster exécute la même commande

13

Parmi eux, Noeud officiel recommandé ipPour continuer.

1.2 minIO****Plan d'expansion

Tout d'abord,,minIO La conception minimaliste de minIO Les Clusters distribués ne supportent pas l'ajout d'un seul noeud au cluster et l'auto - réglage de la capacité , Cela est dû au fait que les problèmes d'équilibrage des données et de division des groupes de correction et de suppression causés par l'ajout d'un seul noeud peuvent entraîner des processus complexes d'ordonnancement et de traitement pour l'ensemble du cluster , Mauvais entretien .Donc,,minIO Offre un moyen d'augmenter la capacité de pair à pair , C'est - à - dire que le nombre de noeuds et de disques à ajouter doit être égal au cluster original .

Par exemple, le cluster original contient 4Noeuds4Disque de bloc, La capacité doit être augmentée de la même façon 4Noeuds4Disque de bloc( Ou son multiple ), Afin que le système maintienne la même redondance des données SLA, Cela réduit considérablement la complexité de l'expansion .Comme dans l'exemple précédent, Après expansion ,minIO Les grappes ne sont pas tout à fait 8 Les noeuds sont entièrement équilibrés , C'est de prendre ce qui était 4 Les noeuds sont considérés comme une zone ,Nouveau4 Le noeud est considéré comme une autre zone , Quand un nouvel objet est téléchargé , Le Cluster déterminera la zone de stockage en fonction de la proportion d'espace disponible pour chaque zone , Dans chaque région, le Groupe de correction et de suppression correspondant est toujours déterminé par l'algorithme de hachage pour le stockage final .En outre, Après une expansion Peer - to - peer du cluster , L'expansion par les pairs peut également se poursuivre conformément aux règles d'expansion. ,Mais pour des raisons de sécurité, Le nombre maximum de noeuds d'un Cluster ne doit généralement pas dépasser 32- Oui..

minIOPrise en charge par commande,Spécifier un nouveau Cluster pour étendre un Cluster existant(Mode de correction et de suppression des codes),La ligne de commande est la suivante::

14

Maintenant, tout le cluster est étendu1024Disques,Le disque total devient2048- Oui.,Les nouvelles demandes de téléchargement d'objets sont automatiquement attribuées au cluster le moins utilisé.Avec la politique d'extension ci - dessus,Vous pouvez agrandir votre cluster à la demande.Redémarrer le cluster après reconfiguration,Prend effet immédiatement dans le cluster,Et n'a aucun impact sur les Clusters existants.Dans l'ordre ci - dessus,Nous pouvons considérer le cluster original comme une zone,Le nouveau Cluster est considéré comme une autre zone,Les nouveaux objets sont placés dans la zone à l'échelle de l'espace libre dans chaque zone.Dans chaque zone,Localisation basée sur un algorithme de hachage déterministe.

Note::Chaque zone que vous ajoutez doit avoir le même nombre de disques que la zone originale(Ensemble de codes de correction et de suppression)Taille,Afin de maintenir la même redondance des donnéesSLA. Par exemple,Le premier secteur a8Disques,Vous pouvez étendre le cluster à16- Oui.、32Ou1024La zone des disques,Il suffit de vous assurer queSLAEst un multiple de la zone d'origine.

Les avantages et les inconvénients de l'expansion de pair à pair sont les suivants :

**Avantages:** C'est facile à configurer. , L'agrandissement peut être effectué en une seule commande .

**Inconvénients:**① L'expansion de la capacité doit être redémarrée ;② Limitation de l'expansion , Le nombre de noeuds de Cluster ne dépasse généralement pas 32- Oui.,C'est parce queMinIO Les Clusters assurent une grande cohérence grâce à des serrures distribuées , Si le nombre de noeuds de Cluster est trop grand , Le maintien d'une forte cohérence entraînera des problèmes de rendement .

Mais pas beaucoup pour le stockage initial , Et si le redémarrage du cluster a peu d'impact sur l'entreprise , Utilisez l'expansion Peer - to - peer pour .

  1. Notes
  • DistribuéminIOTous les noeuds doivent avoir la mêmeaccessClé secrète etsecretClé secrète,C'est - à - dire::Nom d'utilisateur et mot de passe

  • DistribuéminIO Le répertoire du disque dans lequel les données sont stockées doit être vide

  • DistribuéminIO Les autorités recommandent un environnement de production minimal 4Noeuds,Parce qu'il y aNNoeuds, Il faut au moins s'assurer que oui. N/2 Les noeuds de , Au moins N/2+1 Le noeud de

  • DistribuéminIO Le temps du noeud doit être le même , La configuration de la machine doit être la même

  • DistribuéminIO Un fichier de données est stocké sur chaque disque pour assurer la fiabilité et la sécurité des données

3.Mesures spécifiques de mise en œuvre

Beaucoup de gens sont déployés en ligne minIO Les Clusters utilisent un seul script , C'est très hostile dans un environnement de production réel ,Parce queminIO Exiger que chaque noeud du cluster exécute la même commande pour démarrer avec succès ,La meilleure façon de le faire est d'utiliseransibleDéploiementminIOCluster.

3.1 Installationansible

15

3.2 UtiliseransibleDéploiementminIOCluster

Ansible Le Code de base écrit est le suivant , Pour plus de détails, le lecteur peut choisir Baidu

16

3.3 ConfigurationNginxGroupe des agents

NginxLe contenu du profil est le suivant:

17

3.4 ValidationminIO Le Cluster A - t - il été déployé avec succès?

Sur le Navigateur,EntréeNginx Adresse du serveur plus Nginx Le port d'écoute dans la configuration donne accès au serveur de fichiers webPage, Les effets d'un déploiement réussi sont les suivants :

18

Cinq、Conclusion

C'est tout ce qui précède.UMS Principaux éléments du développement et du déploiement de services de fichiers Cloud privés , Le programme a été validé , Si vous voulez construire la compatibilité S3Serveur de fichiers pour le Protocole, Donc cet article a une valeur de référence , Bien sûr, en raison de la hâte et de la faible quantité de stockage de fichiers au début , Le programme a également des domaines à optimiser , Par exemple, si vous voulez mettre en place un mécanisme d'expansion dynamique, vous pouvez utiliser la méthode d'expansion fédérale officielle , Mais cela doit être introduit etcd, Il faut aussi plus de machines .En dernier analyse, Vous devrez quand même vous adapter à des scénarios d'affaires spécifiques , C'est comme si acheter des chaussures n'était pas le plus gros possible , C'est ce qui convient le mieux .

版权声明
本文为[Aurora Developer Service]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125173220668U.html

Scroll to Top