dimanche 18 octobre 2009

HowTo : Créer un disque ASM pour une VM Oracle dans vSphere

Suite aux différents articles parus au sujet de l'acquisition de notre baie SSD, on me pose beaucoup de questions sur la mise en oeuvre de Oracle ASM. Je vous propose humblement ici de détailler la création d'un volume. Mon serveur hôte fonctionne sous vSphere tandis que la VM est un Oracle Entreprise Server x64. Rien ne vous interdit d'utiliser du Red Hat 5 ou du CentOS 5.x en lieu et place.

Oracle ASM (Automatic Storage Management) est une fonction disponible depuis Oracle 10g qui permet à l'administrateur des bases de gérer les espaces de stockage, même hétérogènes, depuis Oracle Entreprise Manager grâce à un plug-in en principe fournis par le fabricant du stockage. A noter que sous Oracle 11gR2, tous les objets Oracle peuvent être hébergés sous ASM.

Assez parlé, au boulot !

Il faut bien sûr créer un LUN dédié sur le stockage, ici un AXIOM 600 Pillar Data Systems.
Cette machine présente l'avantage unique de travailler avec un stripping de 1Mo, soit la taille utilisée par ASM. Si l'on fait correspondre la taille des blocs logiques et blocs physiques, on s'affranchit des problèmes de latence et de saturation des buffers i/o. Ce n'est pas par hasard que Oracle est développé sur Pillar Axiom .... Bien entendu, charge à vous d'adapter en fonction de votre propre SAN.


On crée un lun avec le bon profile applicatif

On définit sa taille et le SLA attendu

On rescan les LUNs depuis la HBA sous vSPhere.
Surtout on ne formate pas le nouveau LUN en VMFS !

Il faut ensuite créer une VM avec au moins 2 vCpus et 1524 Mo de Ram.
Dans cet exemple, j'ai créé un .vmdk pour l'OS et le moteur Oracle de 64Go.
On ajoute un nouveau disque virtuel mais de type Raw Device Mapping (RDM) ou disque brut.


Pour permettre un accès totalement contrôlé par ASM, je vous recommande d'accéder au disque sans passer par les couches de virtualisation VMware.

Notre disque est créé.

Téléchargement de l'ISO de Oracle Entreprise Server de 3.2Go et installation comme il se doit :)

Lorsque votre OS est installé et après avoir booté, dans une fenêtre de commande dans la VM, vous pouvez lister les disques détectés au travers de la commande 'dmesg'. On voit distinctement la différence entre le disque vmdk accédé par le driver virtuel et l'accès direct au LUN Pillar (en rouge) :

# dmesg
.../...
scsi0 : ioc0: LSI53C1030, FwRev=01032920h, Ports=1, MaxQ=128, IRQ=51
Vendor: VMware Model: Virtual disk Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
target0:0:0: Beginning Domain Validation
target0:0:0: Domain Validation skipping write tests
target0:0:0: Ending Domain Validation
target0:0:0: FAST-160 WIDE SCSI 320.0 MB/s DT IU RDSTRM RTI WRFLOW PCOMP (6.25
ns, offset 127)
SCSI device sda: 67108864 512-byte hdwr sectors (34360 MB)
sda: test WP failed, assume Write Enabled
sda: cache data unavailable
sda: assuming drive cache: write through
SCSI device sda: 67108864 512-byte hdwr sectors (34360 MB)
sda: test WP failed, assume Write Enabled
sda: cache data unavailable
sda: assuming drive cache: write through
sda: sda1 sda2
sd 0:0:0:0: Attached scsi disk sda

Vendor: Pillar Model: Axiom 600 Rev: 0000
Type: Direct-Access ANSI SCSI revision: 05
target0:0:1: Beginning Domain Validation
target0:0:1: Domain Validation skipping write tests
target0:0:1: Ending Domain Validation
target0:0:1: FAST-160 SCSI 160.0 MB/s DT IU RDSTRM RTI WRFLOW PCOMP (6.25 ns, o
ffset 127)
SCSI device sdb: 315226112 512-byte hdwr sectors (161396 MB)
sdb: Write Protect is off
sdb: Mode Sense: 7f 00 00 08
SCSI device sdb: drive cache: write through
SCSI device sdb: 315226112 512-byte hdwr sectors (161396 MB)
sdb: Write Protect is off
sdb: Mode Sense: 7f 00 00 08
SCSI device sdb: drive cache: write through
sdb: unknown partition table
sd 0:0:1:0: Attached scsi disk sdb

On monte l'ISO d'installation de l'OS pour extraire les packages nécessaires à ASM

# mkdir /cdrom
# mount -r /dev/cdrom /cdrom
# cd Server
# rpm -ivh --nodeps kernel-debug*rpm
kernel-debug-2.6.18-164.el5.x86_64.rpm
kernel-debug-devel-2.6.18-164.el5.x86_64.rpm

# rpm -ivm --nodeps kernel-xen*rpm
kernel-xen-2.6.18-164.el5.x86_64.rpm
kernel-xen-devel-2.6.18-164.el5.x86_64.rpm

# rpm -ivm --nodeps oracleasm*rpm
oracleasm-2.6.18-164.el5-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-164.el5debug-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-164.el5xen-2.0.5-1.el5.x86_64.rpm
oracleasm-support-2.1.3-1.el5.x86_64.rpm

On configure ASM
# service oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface [] : oracle
Default group to own the driver interface [] : oracle
Start Oracle ASM library driver on boot (y/n) [y] : y
Scan for Oracle ASM disks on boot (y/n) [y] : y
Writing Oracle ASM library driver configuration : done
Initializing the Oracle ASMLib driver : [ OK ]
Scanning the system for Oracle ASMLib disks: ... /dev/sdb [ OK ]

On essaie de redémarrer le daemon ASM

# service oracleasm

Usage: /etc/init.d/oracleasm {startstoprestartenabledisableconfigurecreatediskdeletediskquerydisklistdisksscandisksstatus} # service oracle asm restart

Il faut préparer le LUN RDM et créer une partition à présenter à ASM

# fdisk /dev/sdb

Le nombre de cylindres pour ce disque est initialise a 19621.
Il n'y a rien d''incorrect avec cela, mais c'est plus grand que 1024,
et cela pourrait causer des problemes en fonction pour certaines configurations:
1) logiciels qui sont executes à l'amorçage (i.e., vieilles versions de LILO)
2) logiciels d'amorçage et de partitionnement pour d'autres SE
(i.e., DOS FDISK, OS/2 FDISK)

Commande (m pour l'aide): p

Disque /dev/sdb: 161.3 Go, 161395769344 octets
255 heads, 63 sectors/track, 19621 cylinders
Unites = cylindres de 16065 * 512 = 8225280 octets

Peripherique Amorce Debut Fin Blocs Id Systeme

Commande (m pour l'aide): n
Action de commande
e etendue
p partition primaire (1-4)
p
Numero de partition (1-4): 1
Premier cylindre (1-19621, par defaut 1): 1
Dernier cylindre ou +taille or +tailleM ou +tailleK (1-19621, par defaut 19621):
Utilisation de la valeur par defaut 19621

Commande (m pour l'aide): p

Disque /dev/sdb: 161.3 Go, 161395769344 octets
255 heads, 63 sectors/track, 19621 cylinders
Unites = cylindres de 16065 * 512 = 8225280 octets

Peripherique Amorce Debut Fin Blocs Id Systeme
/dev/sdb1 1 19621 157605651 83 Linux

Commande (m pour l'aide): w
La table de partitions a ete alteree!

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.

On édite 'rawdvices' pour permettre à Oracle d'accéder aux volumes

# vi /etc/sysconfig/rawdevices

# raw device bindings
# format:
#
# example: /dev/raw/raw1 /dev/sda1
# /dev/raw/raw2 8 5
/dev/raw/raw1 /dev/sdb1

Oracle doit être propriétaire du périphérique

# chown oracle:oracle /dev/raw/raw1;chmod 660 /dev/raw/raw1
# service oracleasm createdisk VOL1 /dev/sdb1
Marking disk "VOL1" as an ASM disk: [ OK ]

On liste pour voir si le LUN est pris en charge

# service oracleasm listdisks
VOL1

Voilà, c'est prêt, il n'y a plus qu'a ajouter d'autres LUNs ou installer le moteur Oracle Entreprise avec prise en charge de ASM.

Aucun commentaire: