Ripristino di un array Amazon EBS RAID0 da istantanee prese con ec2-coerente-snapshot


8

Ho configurato un nuovo server MySQL su Amazon EC2 e ho deciso di archiviare i miei dati su un array EBS RAID0. Fin qui tutto bene, e ho provato a scattare istantanee di quei dispositivi con ec2-coerente-snapshot, fantastico.

Ora, come ricostruire l'array su una nuova istanza, da queste istantanee, rapidamente?

Quando si utilizza uno snapshot coerente con ec2 per creare uno snapshot di più volumi, non è possibile stabilire quale volume è stato utilizzato per ciascun dispositivo nel RAID. Forse ho completamente torto, ma dal momento che stai spostando i dati su tutti i volumi, sarebbe logico che tu debba mettere ciascun NUOVO volume nella stessa posizione sul RAID del volume da cui è stata creata l'istantanea.

Un esempio:

  • Volumi 3x200 gb in una configurazione RAID0.
  • vol-1 è il dispositivo / dev / sdh 0 nel RAID
  • vol-2 è / dev / sdh1 dispositivo 1 nel RAID
  • vol-3 è il dispositivo / dev / sdh2 2 nel RAID

si crea un'istantanea EC2 con: ec2-consistent-snapshot <options> vol-1 vol-2 vol-3.

Ora hai 3 istantanee e l'unico modo per rintracciare quale dispositivo sono è guardare l'id del volume di origine, quindi guardare quale dispositivo è montato come ID del volume di origine come sull'istanza e quindi controllare i dettagli del RAID configurazione sull'istanza del volume di origine.

Questo è ovviamente incredibilmente manuale ... e non veloce (il che ovviamente rende difficile far apparire rapidamente una nuova istanza mysql se l'altra fallisce. Per non parlare, al momento dovresti registrare le posizioni del dispositivo sul RAID dell'istantanea, perché se l'istanza del volume di origine si arresta in modo anomalo, non è possibile accedere alla configurazione RAID).

Quindi, in conclusione:

  • Mi sto perdendo qualcosa con il funzionamento di ec2-coerente-snapshot e un array RAID0 software?
  • In caso contrario, ci sono soluzioni / best practice note intorno al problema di non sapere a quale dispositivo / posizione nell'array RAID appartiene un'istantanea?

Spero sia stato chiaro e grazie per il tuo aiuto!

Risposte:


5

poiché si esegue lo striping dei dati su tutti i volumi, sarebbe logico che sia necessario posizionare ciascun NUOVO volume nella stessa posizione sul RAID del volume da cui è stata creata l'istantanea.

Ho testato la tua premessa, e per quanto logico possa sembrare, l'osservazione è diversa.

Permettetemi di dettagliare questo:
ho esattamente gli stessi requisiti di voi. Tuttavia, il RAID0 che sto usando ha solo 2 volumi.

Sto usando Ubuntu 10 e ho 2 dispositivi EBS che formano un dispositivo RAID0 formattato con XFS.

Il dispositivo raid0 stava creando usando il seguente comando:
sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices 2 /dev/sdg /dev/sdh

Ho installato MYSQL e un sacco di altri software che sono configurati per usare / dev / md0 per memorizzare i loro file di dati.

Utilizzando gli stessi volumi : una volta fatto, smonto tutto, interrompo il Raid e lo riassemblo in questo modo: sudo mdadm --assemble /dev/md0 /dev/sdh /dev/sdg il fatto è che, indipendentemente dall'ordine /dev/sdg /dev/sgh, il RAID si ricostituisce correttamente.

Utilizzo di snapshot : pubblicare questo post, utilizzo ec2-consistent-snapshotper creare snapshot dei 2 dischi EBS insieme. Quindi creo volumi da questo disco, lo collego a una nuova istanza (che è già stata configurata per il software), riassemblo il RAID (ho provato a scambiare anche l'ordine dei volumi EBS), lo monto e sono pronto andare.

Sembra strano, ma funziona.


Quindi, fondamentalmente, quando ricostruisci l'array, non importa in quale ordine lo costruisci affatto. Immagino che ciò sia dovuto ai dati del superblocco scritti sui dischi, quindi il controller RAID sa come rimetterli insieme. È fantastico! Grazie per la tua risposta, è praticamente esattamente ciò di cui avevo bisogno!
Jim Rubenstein,

4

Ho eseguito una configurazione simile ( RAID0 su 4 volumi EBS ) e, di conseguenza, ho avuto le stesse preoccupazioni per ricostituire l'array RAID da snapshot creati con ec2-coerenti-snapshot .

Fortunatamente, ogni dispositivo in un array raid contiene metadati (in un superblocco) che registra la sua posizione nell'array, l'UUID dell'array e il livello dell'array (ad es. RAID0). Per eseguire una query su questo superblocco su qualsiasi dispositivo, eseguire il comando seguente (la riga corrispondente a "^ this" descrive il dispositivo interrogato):

$ sudo mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 2ca96b4a:9a1f1fbd:2f3c176d:b2b9da7c
  Creation Time : Mon Mar 28 23:31:41 2011
     Raid Level : raid0
  Used Dev Size : 0
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0

    Update Time : Mon Mar 28 23:31:41 2011
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
       Checksum : ed10058a - correct
         Events : 1

     Chunk Size : 256K

      Number   Major   Minor   RaidDevice State
this     0     202       17        0      active sync   /dev/sdb1

   0     0     202       17        0      active sync   /dev/sdb1
   1     1     202       18        1      active sync   /dev/sdb2
   2     2     202       19        2      active sync   /dev/sdb3
   3     3     202       20        3      active sync   /dev/sdb4

Se si esegue la stessa query su un dispositivo che non fa parte di un array, si ottiene:

$ sudo mdadm --examine /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

Il che dimostra che questo comando si basa davvero sulle informazioni memorizzate sul dispositivo stesso e non su alcuni file di configurazione.

Si può anche esaminare i dispositivi di un array RAID a partire dal dispositivo RAID, recuperando informazioni simili:

$ sudo mdadm --detail /dev/md0

Uso il successivo insieme a ec2-description-volume per creare l'elenco di volumi per ec2-coerente-istantanea ( -n e --debug consentono di testare questo comando senza creare istantanee). Il seguente comando presuppone che la directory / mysql sia il punto di montaggio per il volume e che la regione AWS sia us-west-1 :

$ sudo -E ec2-consistent-snapshot --region us-west-1 --mysql --freeze-filesystem /mysql --mysql-master-status-file /mysql/master-info --description "$(date +'%Y/%m/%d %H:%M:%S') - ASR2 RAID0 (4 volumes) Snapshot" --debug -n $(ec2-describe-volumes --region us-west-1 | grep $(wget http://169.254.169.254/latest/meta-data/instance-id -O - -q) | egrep $(sudo mdadm --detail $(awk '{if($2=="/mysql") print $1}' /etc/fstab) | awk '/ \/dev\//{printf "%s ", $7}' | sed -e 's# /#|/#g') | awk '{printf "%s ", $2}')

0

So che questo non risponde alla tua domanda, ma sto facendo qualcosa di simile ma con lo strumento ec2-create-snapshot di base di Amazon e uno script cron. Non è veloce come ec2-coerente-snapshot, ma ottengo il controllo extra di cui ho bisogno: fsync, lock write, e, soprattutto, nomina gli snapshot in modo appropriato in modo che possano essere ricostituiti nell'ordine corretto.


In realtà sto usando XFS, quindi blocco il filesystem mentre eseguo l'istantanea. In combinazione con FLUSH e LOCK in MySQL (ec2-coerente-snapshot fa tutto questo), dovrei avere ogni volta un'istantanea coerente. Il problema è la denominazione, per la quale ho appena sviluppato una soluzione temporanea, modificando lo script perl ec2-coerente-snapshot, per ora.
Jim Rubenstein,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.