Asm

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Gestion de stockage (Automatic Storage Management)
Composant Oracle Grid Infrastructure
Voir aussi Asmcmd · PB detection ASM · Udev · ACFS

ASM (Automatic Storage Management) est le gestionnaire de volumes et de fichiers intégré à Oracle Grid Infrastructure. Il prend en charge le stockage des fichiers d'une base de données (datafiles, fichiers de contrôle, redo logs, fichiers RMAN...) en s'appuyant directement sur des disques bruts (ou des partitions dédiées), sans passer par un gestionnaire de volumes logiques classique (LVM) ni un filesystem traditionnel. Les disques sont regroupés en diskgroups, l'unité de gestion de base d'ASM (répartition et redondance des données).

Préparer les disques

Avant l'installation, les disques destinés à ASM doivent être identifiés et leurs droits d'accès fixés via des règles udev — voir la page dédiée pour le détail des règles. Deux approches ont été rencontrées :

  • passer par ASMLib (RPM `oracleasm-support`), qui fournit ses propres outils de labellisation des disques (`oracleasm createdisk`) — approche « historique » sur Oracle Enterprise Linux ;
  • ou définir directement des règles udev sur les partitions, sans ASMLib — utilisé par exemple pour des disques virtuels sous Xen (voir plus bas).

Ajuster le scheduler I/O

Sur les disques destinés à ASM, positionner le scheduler I/O sur `deadline` ou `noop` (recommandation Oracle historique sur disques mécaniques/SAN classique — sur du SSD/NVMe récent, `none`/`mq-deadline` sont plus pertinents, à évaluer selon le noyau) :

# cat /sys/block/sdb/queue/scheduler
noop anticipatory [deadline] cfq
# echo noop > /sys/block/sdb/queue/scheduler

Exemple de règle udev pour appliquer ce réglage automatiquement sur un modèle de baie donné :

# vi /etc/udev/rules.d/60-vshare.rules
KERNEL=="sd*[!0-9]|sg*", BUS=="scsi", SYSFS{vendor}=="VIOLIN", SYSFS{model}=="SAN ARRAY*", RUN+="/bin/sh -c 'echo noop > /sys/$devpath/queue/scheduler && echo 1024 > /sys/$devpath/queue/nr_requests'"
# udevadm control --reload-rules
# udevadm trigger

(Sur les systèmes anciens, ces commandes s'appelaient `udevcontrol reload_rules` / `udevtrigger` — remplacées depuis par `udevadm control --reload-rules` / `udevadm trigger`.)

Installation d'ASMLib

Sur Oracle Enterprise Linux (avant OL7, où ASMLib est remplacé par ASM Filter Driver — ASMFD, plus intégré au noyau, à vérifier selon la version) :

# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-el5.repo
# yum install oracleasm-support -y
# yum install oracle-validated
# /etc/init.d/oracleasm configure

Bien répondre aux questions (les valeurs par défaut proposées ne conviennent généralement pas) :

Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done

⚠️ Si on laisse les réponses par défaut à cette étape, les disques créés ensuite appartiennent à `root` et deviennent invisibles pour l'instance Oracle — cause fréquente d'échec de détection (voir PB detection ASM).

Créer et gérer les disques ASM

Ajouter les disques par grappes homogènes (4 ou 8), puis créer sur chacun une partition de type `83` (Linux) avant de les déclarer à ASM :

# /usr/sbin/oracleasm init
# /usr/sbin/oracleasm createdisk DISK1 /dev/sdb1
# /usr/sbin/oracleasm createdisk DISK2 /dev/sdc1
# /usr/sbin/oracleasm createdisk DISK3 /dev/sdd1
# /usr/sbin/oracleasm createdisk DISK4 /dev/sde1
# /usr/sbin/oracleasm scandisks
# /usr/sbin/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4

Les disques apparaissent alors dans `/dev/oracleasm/disks`, avec les droits grid:asmadmin (à ne pas confondre avec une installation standard en `oracle:dba`) :

# ll /dev/oracleasm/disks

`oracleasm update-driver` permet de mettre à jour le module noyau ASMLib pour l'aligner sur le noyau courant — nécessite un compte Oracle avec un support actif (ULN).

Variante sans ASMLib : udev direct

Sur certaines plateformes (par exemple des disques virtuels sous Xen), ASMLib n'est pas utilisé : les règles udev créent directement les device nodes avec les bons droits, sans passer par le driver `oracleasm`. Fichier `/etc/udev/rules.d/99-oracle-asmdevices.rules` (exemple, à adapter aux chemins de périphériques réels) :

KERNEL=="cciss/c0d1p5", NAME+="oracleasm/ASM_DATA_01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p6", NAME+="oracleasm/ASM_DATA_02", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p7", NAME+="oracleasm/ASM_DATA_03", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p8", NAME+="oracleasm/ASM_DATA_04", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p9", NAME+="oracleasm/ASM_DATA_05", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p10", NAME+="oracleasm/ASM_DATA_06", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p11", NAME+="oracleasm/ASM_FRA_01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d1p12", NAME+="oracleasm/ASM_FRA_02", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p5", NAME+="oracleasm/ASM_INDX_01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p6", NAME+="oracleasm/ASM_INDX_02", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p7", NAME+="oracleasm/ASM_INDX_03", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p8", NAME+="oracleasm/ASM_INDX_04", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p9", NAME+="oracleasm/ASM_INDX_05", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p10", NAME+="oracleasm/ASM_REDO1_01", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="cciss/c0d0p11", NAME+="oracleasm/ASM_REDO2_01", OWNER="oracle", GROUP="dba", MODE="0660"

Un rechargement d'udev (`udevadm control --reload-rules && udevadm trigger`, ou historiquement `start_udev`) est nécessaire pour la prise en compte. Les disques sont alors disponibles sous `/dev/oracleasm/*`.

Rebalance et diskgroups

Opérations de base sur un diskgroup (montage/démontage, suppression, rebalance après ajout/retrait de disques) :

alter diskgroup data dismount force;
drop diskgroup data force including contents;
alter diskgroup data mount;
alter diskgroup PROD_DATA rebalance power 5;

⚠️ `drop diskgroup ... force including contents` est destructif et irréversible — à n'utiliser qu'en connaissance de cause.

Voir aussi

  • Asmcmd — utilitaire en ligne de commande pour administrer ASM
  • PB detection ASM — pistes de dépannage quand les disques ne sont pas détectés
  • Udev — détail des règles udev utilisées pour les disques ASM
  • ACFS — filesystem cluster construit sur ASM
  • Memo RAC — commandes courantes en environnement RAC/ASM