Le multi-attach permet de partager un seul disque ESSD, ESSD AutoPL ou tout autre disque cloud compatible NVMe entre jusqu'à 16 instances ECS situées dans la même zone, ou de partager un disque ESSD à stockage redondant interzone entre les nœuds d'une même région. Associé à la réservation persistante NVMe (PR), le multi-attach offre à vos charges de travail un accès partagé au stockage avec un contrôle précis des autorisations d'écriture, permettant ainsi un partage efficace des données et un basculement rapide au sein d'un cluster ACK.
Cas d'utilisation
-
Partage de données : une fois qu'un nœud a écrit des données sur un disque NVMe partagé, tous les autres nœuds attachés peuvent les lire immédiatement. Une seule image de conteneur stockée sur un disque NVMe peut être chargée par plusieurs instances exécutant le même système d'exploitation, ce qui réduit les coûts de stockage et améliore les performances en lecture/écriture.
-
Basculement haute disponibilité : les bases de données en cluster traditionnelles — notamment Oracle Real Application Clusters (RAC), SAP High-performance ANalytic Appliance (HANA) et les bases de données haute disponibilité (HA) natives du cloud — sont vulnérables aux points de défaillance uniques (SPOF). Un disque NVMe partagé garantit l'accessibilité du stockage en cas de panne d'un nœud de calcul. Déployez votre charge de travail en mode primaire/secondaire : lorsqu'une instance principale tombe en panne, exécutez une commande NVMe PR pour révoquer ses autorisations d'écriture, puis promouvez l'instance secondaire. Cela évite les écritures en mode split-brain et assure la cohérence des données. Séquence de basculement :
L'instance de base de données principale (Instance de base de données 1) tombe en panne et cesse de traiter le trafic.
Exécutez une commande NVMe PR pour bloquer les écritures vers l'Instance de base de données 1 et accorder l'accès en écriture à l'Instance de base de données 2.
Restaurez l'Instance de base de données 2 dans le même état que l'Instance de base de données 1 (par exemple, en rejouant les journaux).
L'Instance de base de données 2 prend le relais en tant qu'instance principale.
La réservation persistante (PR) fait partie de la spécification NVMe. Elle contrôle les autorisations de lecture et d'écriture au niveau du disque pour garantir que les nœuds de calcul écrivent les données comme prévu. Pour plus de détails, consultez la Spécification de base NVM Express .
-
Accélération du cache de données distribué : les data lakes construits sur Object Storage Service (OSS) offrent un débit élevé en écriture séquentielle, mais souffrent d'une latence élevée et de faibles performances en lecture/écriture aléatoire. Attachez un disque cloud rapide, activé pour le multi-attach, en tant que couche de cache partagée entre les nœuds de calcul pour améliorer considérablement les performances d'accès.
-
Apprentissage automatique : après l'étiquetage et l'écriture des données d'échantillon, distribuez-les sur les nœuds pour un entraînement parallèle sans copier les données sur le réseau. Chaque nœud de calcul lit directement depuis le disque partagé, ce qui réduit la latence de transfert et accélère l'entraînement des modèles à grande échelle.
Facturation
La fonctionnalité multi-attach n'entraîne pas de frais supplémentaires. Les ressources compatibles avec le protocole NVMe sont facturées selon leurs méthodes de facturation d'origine. Pour connaître les tarifs des disques cloud, consultez la rubrique Volumes Elastic Block Storage.
Limites
Un seul disque cloud NVMe peut être attaché à un maximum de 16 instances ECS dans la même zone simultanément.
Pour lire et écrire sur un disque cloud depuis plusieurs nœuds simultanément, montez le disque cloud à l'aide de
volumeDevices. Cette méthode monte le disque en tant que périphérique bloc et ne prend pas en charge l'accès via un système de fichiers. UtilisezvolumeMode: BlocketaccessModes: ReadWriteManydans votre PersistentVolumeClaim (PVC).Pour la liste complète des limites, consultez la rubrique Limites de la fonctionnalité multi-attach.
Prérequis
Avant de commencer, assurez-vous que vous disposez des éléments suivants :
Un cluster géré ACK exécutant Kubernetes 1.20 ou version ultérieure. Pour en créer un, consultez la rubrique Créer un cluster géré ACK.
Les composants csi-plugin et csi-provisioner en version v1.24.10-7ae4421-aliyun ou ultérieure. Pour effectuer la mise à niveau, consultez la rubrique Gérer les composants csi-plugin et csi-provisioner.
Au moins deux nœuds dans la même zone prenant en charge la fonctionnalité multi-attach. Pour connaître les familles d'instances prises en charge, consultez la rubrique Limites de la fonctionnalité multi-attach.
-
Une application conteneurisée répondant aux deux exigences suivantes :
Prise en charge de l'accès simultané au même disque cloud depuis plusieurs réplicas.
Garantie de la cohérence des données à l'aide de la réservation NVMe ou d'un mécanisme équivalent.
Pour en savoir plus sur le contexte, consultez :
Exemple d'application
L'exemple d'application suivant illustre l'élection d'un leader basée sur un bail (lease) via un périphérique bloc NVMe partagé. Plusieurs réplicas entrent en concurrence pour obtenir un bail écrit directement sur le disque. Un seul réplica détient le bail à la fois ; s'il cesse de le renouveler, un autre réplica le préempte à l'aide de commandes de réservation NVMe.
Notes clés sur la conception :
O_DIRECTest utilisé pour ouvrir le périphérique bloc, contournant ainsi le cache de pages et garantissant que les lectures reflètent ce qui a été effectivement écrit sur le disque.-
L'exemple utilise l'interface de réservation simplifiée du noyau Linux (appels système ioctl
<linux/pr.h>). Alternatives nécessitant des privilèges élevés :C :
ioctl(fd, NVME_IOCTL_IO_CMD, &cmd);CLI :
nvme-cli
Pour consulter la spécification complète de la réservation NVMe, rendez-vous sur la page Spécification NVMe.
Étape 1 : Déployer l'application et configurer le multi-attach
Créez une StorageClass activant le multi-attach, un PVC configuré en tant que périphérique bloc et un StatefulSet utilisant l'image de l'application de gestion des baux.
-
Créez un fichier nommé
lease.yamlavec le contenu suivant. Remplacez l'adresse de l'image du conteneur par votre adresse réelle.ImportantLa réservation NVMe s'applique au niveau du nœud. Si plusieurs pods s'exécutent sur le même nœud, ils peuvent interférer entre eux. Cet exemple utilise
podAntiAffinitypour éviter ce problème.Si votre cluster comporte des nœuds n'utilisant pas le protocole NVMe, configurez l'affinité des nœuds pour restreindre la planification aux nœuds compatibles NVMe.
Le tableau suivant résume les principales différences entre les configurations multi-attach et les montages standard :
Ressource Champ Multi-attach Montage standard StorageClass parameters.multiAttach"true"Non requis PVC accessModesReadWriteManyReadWriteOncePVC volumeModeBlockFilesystemMontage du volume Méthode volumeDevices— accès direct au périphérique blocvolumeMounts— montage du système de fichiers -
Déployez l'application :
kubectl apply -f lease.yaml
Étape 2 : Vérifier le multi-attach et la réservation
Vérifier que plusieurs nœuds peuvent lire et écrire sur le même disque
Exécutez la commande suivante pour afficher les journaux des pods :
kubectl logs -l app=lease-test --prefix -f
Résultat attendu :
[pod/lease-test-0/lease] Register as key 4745d0c5cd9a2fa4
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
[pod/lease-test-0/lease] Refreshed lease
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease
lease-test-1 lit immédiatement les données écrites par lease-test-0, ce qui confirme que le multi-attach fonctionne correctement.
Vérifier que la réservation NVMe est active
-
Obtenez l'ID du disque cloud :
kubectl get pvc data-disk -ojsonpath='{.spec.volumeName}' -
Connectez-vous à l'un des deux nœuds et exécutez la commande suivante. Remplacez
2zxxxxxxxxxxxpar la partie située aprèsd-dans l'ID du disque obtenu à l'étape précédente.nvme resv-report -c 1 /dev/disk/by-id/nvme-Alibaba_Cloud_Elastic_Block_Storage_2zxxxxxxxxxxxRésultat attendu :
NVME Reservation status: gen : 3 rtype : 1 regctl : 1 ptpls : 1 regctlext[0] : cntlid : ffff rcsts : 1 rkey : 4745d0c5cd9a2fa4 hostid : 4297c540000daf4a4*****rtype: 1(écriture exclusive) etregctl: 1confirment que la réservation NVMe est active.
Vérifier que la réservation bloque les écritures depuis un nœud défaillant
-
Connectez-vous au nœud exécutant
lease-test-0et suspendez le processus pour simuler une panne :pkill -STOP -f /usr/local/bin/lease -
Attendez 30 secondes, puis vérifiez les journaux :
kubectl logs -l app=lease-test --prefix -fRésultat attendu :
[pod/lease-test-1/lease] Remote lease-test-0 refreshed lease [pod/lease-test-1/lease] Remote is dead, preempting [pod/lease-test-1/lease] Register as key 4745d0c5cd9a2fa4 [pod/lease-test-1/lease] Refreshed lease [pod/lease-test-1/lease] Refreshed lease [pod/lease-test-1/lease] Refreshed leaselease-test-1a préempté le bail et a pris le relais en tant que nœud principal. -
Reprenez le processus suspendu sur le nœud
lease-test-0:pkill -CONT -f /usr/local/bin/lease -
Vérifiez à nouveau les journaux :
kubectl logs -l app=lease-test --prefix -fRésultat attendu :
[pod/lease-test-0/lease] failed to write lease: Invalid exchangelease-test-0ne peut plus écrire sur le disque. L'erreurInvalid exchangeconfirme que la réservation a bien bloqué les opérations d'écriture I/O provenant de l'ancien nœud principal, et le conteneur de gestion du bail redémarre automatiquement.
Étapes suivantes
Si votre disque cloud NVMe manque d'espace, consultez la rubrique Étendre un volume de disque cloud.