domenica 25 marzo 2018

ASM - mirroring e failgroup

ASM è un gestore di volumi che supporta le varie configurazioni di Oracle Database e RAC, e fornisce un'alternativa ai tradizionali gestori di volumi, file system e dispositivi raw.

A protezione e prevenzione di eventuali fault sui dischi, ASM fornisce gli strumenti utili al mirroring dei dati.

In ASM i dischi sono organizzati in gruppi (detti DISKGROUP), e per ogni DISKGROUP (alla creazione e non più modificabile) occorre specificarne il livello di ridondanza (mirroring).

I diski di un DISKGROUP sono organizzati in FAILGROUP, che sono dei sottogruppi di dischi. 

A seconda dei livello di ridondanza impostato per il DISKGROUP, occorre un numero minimo di FAILGROUP. In ogni caso, non può esistere un DISKGROUP senza un FAILGROUP. 

Abbiamo 3 livelli di ridondanza:

1) EXTERNAL REDUNDANCY
2) NORMAL REDUNDANCY
3) HIGH REDUNDANCY

Impostare una ridondanza EXTERNAL significa NON mirrorare i dati del diskgroup a livello ASM. In questi casi ci si aspetta che i dischi siano mirrorati a livello storage, o quantomeno sarebbe auspicabile. In caso di disk failure, il DISKGROUP diviene indisponibile finché il disco che ha subito il fault non ritorna a disposizione. In questo tipo di diskgroup, ogni disco appartiene ad un solo FAILGROUP, e si hanno tanti FAILGROUP quanti sono i dischi del DISKGROUP. Tuttavia in questa modalità, non essendoci alcun mirror, quando viene scritto un dato non c'è alcun controllo in merito al FAILGROUP di appartenenza, né vi sono copie di dati. L'unico criterio con cui vengono scritti è quello che essi siano bilanciati equamente su tutti i dischi.

Impostare una ridondanza NORMAL significa avere 2 vie di mirror (due copie dei dati). In questo caso i dischi del diskgroup devono essere separati in almeno 2 FAILGROUP. Oracle consiglia di usarne 3. 

Impostare la ridondanza HIGH significa mirrorare i dati del diskgroup su 3 vie (tre copie). In questo caso i dischi del diskgroup devono essere separati in almeno 3 FAILGROUP. Oracle consiglia di usarne 5.

Un DISKGROUP con ridondanza NORMAL o HIGH è composto da "insiemi di extent" detti extent-set. Ogni extent contiene un insieme di blocchi di dati. Tutti gli extent appartenenti ad un extent-set contengono gli stessi dati. Per la ridondanza NORMAL quindi abbiamo due extent in un extent-set, per quella HIGH ne abbiamo tre.

Un extent dell'insieme viene indicato come "primario". Gli altri come "secondari". L'extent primario viene scritto su un disco del DISKGROUP senza considerarne il FAILGROUP di appartenenza, ovvero in modo tale da garantire l'equo bilanciamento dei dati all'interno di tutto il DISKGROUP. Dopo che il primario è stato allocato, allora vengono allocati i secondari. In questo caso viene scelto un disco il cui FAILGROUP non è stato ancora utilizzato dagli altri extent dell'insieme.

Ciò garantisce due cose:
  • ogni extent di un extent-set appartiene sicuramente ad un solo FAILGROUP;
  • le letture sono sempre spalmate in modo uniforme in tutto il DISKGROUP.
Le letture dei dati infatti sono eseguite sugli extent primari (si usano i secondari solo se i primari sono indisponibili).

Quindi in caso di una ridondanza NORMAL oppure HIGH vengono fatte rispettivamente due o tre copie dei dati. La figura sottostante mostra come vengono distribuiti i dati in caso di ridondanza NORMAL con tre FAILGROUP:


Come si può vedere dall'immagine, ogni blocco di dati è scritto sempre in due FAILGROUP diversi. Questo fa si che il FAULT completo di un intero FAILGROUP non causi una perdita dei dati.