RAC database sur Enterprise Edition
De wikiGite
Sommaire
- 1 Composants de RAC
- 2 Principes
- 3 Installation
- 4 Mémento de commandes cluster RAC
- 4.1 Contrôler le cluster
- 4.1.1 Contrôler l’état des ressources du cluster
- 4.1.2 Arrêt/démarrage d’une instance dans le cluster
- 4.1.3 Arrêt/démarrage d’une ressource ASM (Automatic Storage Management)
- 4.1.4 Arrêt/démarrage d’une resource listener
- 4.1.5 Arrêt/démarrage de toutes les ressources d’un même noeud
- 4.1.6 Arrêt/démarrage d’une ressource particulière
- 4.2 Contrôler le clusterWare CRS (Cluster Ready Services)
- 4.3 Contrôle de l’OCR
- 4.1 Contrôler le cluster
Composants de RAC
Dans le cadre d’un cluster RAC, la couche cluster peut être gérée par une couche logicielle provenant de fournisseurs tiers :
- Sun Cluster
- IBM HACMP
- Veritas Cluster ...
Oracle fournit sa propre couche cluster dénommée Cluster Ready Services ou CRS (ClusterWare depuis la version 10g)
Les processus principaux
L’ensemble de processus constituant le CRS est composé :
- de 3 processus d’arrière plans (CRS, CSS et EVM)
- d’un ensemble de processus supplémentaires gérant la communication avec les autres couches du cluster (Base de données, applications etc.)
NB : Sous Windows, les processus sont des threads rattachés au processus oracle.exe.
le processus CRS
Le processus CRS (CRS pour Cluster Ready Services) est la brique maîtresse du clusterWare Oracle. C’est ce processus qui gère les opérations de haute disponibilité dans le cluster. Le CRS gère l’ensemble des applications intégrées au cluster (Database, instance, service, listener etc.) définies et référencées dans l’OCR (cf définition plus loin).
Le CRS détecte les changements d’états de ressources. C’est le processus CRS qui redémarre automatiquement les ressources en cas de faute. Et ce, si la définition de la ressource dans l’OCR l’en autorise.
- Ce processus est propriété de l’utilisateur root.
- Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
- Il redémarre automatiquement en cas d’arrêt.
- Sous unix, il apparait dans la liste des processus sous le nom : crsd.bin
Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/crsd/crsd.log
le processus CSS
Le processus CSS (CSS pour Cluster Synchronisation Services) gère la configuration du cluster dans l’évolution de l’appartenance (et de la non-appartenance) des noeuds au cluster.
C’est ce processus qui informe les autres noeuds la présence de nouveau noeud, ou du retrait d’anciens noeuds.
- Ce processus est propriété de l’utilisateur oracle
- Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
- Son arrêt inopiné engendre le redémarrage du noeud.
- Sous unix, il apparait dans la liste des processus sous le nom : ocssd.bin
Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/cssd/ocssd.log
le processus EVM
Le processus EVM (EVM pour EVent Management) enregistre tous les événements enregistrés dans le cluster. Ce processus va publier les événements que le CRS génère. Pour cela, il va enregistrer ces événements dans le répertoire du logger ($CRS_HOME/evm/log) et exécuter (via le processus evmlogger, fils du processus evmd) les appels demandés.
- Ce processus est propriété de l’utilisateur oracle
- Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
- Sous unix, il apparait dans la liste des processus sous le nom : evmd.bin.
Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/evmd/log/evmd.log
Les fichiers d’événements sont dans $CRS_HOME/evm/log
Les processus annexes
OPROCD
Oprocd est un processus résident en mémoire. Ce processus surveille le cluster et réalise le "fencing" du cluster, (le Fencing est un isolement primitif d’un noeud lors d’une défaillance de celui-ci.). Lors de ce fencing, oprocd effectue des vérifications de fonctionnement, puis se fige. Si le reveil de l’OProcd n’a pas lieu avant une durée configurée, celui-ci procède au redémarrage du noeud du cluster.
RACG
Les processus RACG étendent le fonctionnement du clusterWare aux besoins des produits Oracle.
ONS (Oracle Notification Service)
ONS est un service simple fonctionnement en PUSH permettant la diffusion de message à tous les noeuds du cluster.
Les fichiers ou disques de gestion
le registre du cluster ou Oracle Cluster Registry ou OCR
Le registre du cluster ou OCR est un fichier ou disque partagé du cluster qu’il convient de sécuriser (réplication baie, multiplexage).
Cet OCR contient la définition des éléments constitutifs du cluster ainsi que leur état.
On y trouvera entre autres : la définition noeuds, les interfaces réseaux, les adresses VIP, les bases de données, la définition et le paramétrage des ressources, leur dépendances etc etc.
Ce fichier est mis à jour automatiquement lorsque l’administrateur utilise les outils de configurations comme srvctl, crs_register, crsctl).
On obtient les informations sur l’OCR par la commande ocrcheck :
# $CRS_HOME/bin/ocrcheck Status of Oracle Cluster Registry is as follows : Version : 2 Total space (kbytes) : 513652 Used space (kbytes) : 5152 Available space (kbytes) : 508500 ID : 1318599504 Device/File Name : /dev/rdsk/c3t8d0s1 Device/File integrity check succeeded Device/File Name : /dev/rdsk/c4t10d0s1 Device/File integrity check succeeded Cluster registry integrity check succeeded
NB : Lorsqu’on reconfigure un service comme vu dans cet article , on modifie directement les entrées de la ressource définie dans l’OCR
Le disque votant ou Voting Disk
Le disque votant est un périphérique disque partagé permettant de gérer l’appartenance au cluster. De ce fait, il est intimement lié au processus CSS. De plus, il permet les arbitrage d’appartenance au cluster lorsque tous les liens d’interconnexions sont rompus.
On obtient les informations des disques votant avec la commande crsctl :
# $CRS_HOME/bin/crsctl query css votedisk 0. 0 /dev/rdsk/c3t8d0s3 1. 0 /dev/rdsk/c4t10d0s3 2. 0 /dev/rdsk/c3t9d0s3 located 3 votedisk(s).
Il est recommandé de multiplexer de manière impaire le disque votant. Si il est unique, alors la redondance du support devra être assurée (par une baie, ou tout autre mécanisme).
Sa taille est d’environ 50Mo par fichier.
Principes
Sur les noeuds du cluster
Certains éléments sont spécifiques à chaque noeud du cluster, d'autres son partagés par tous.
Stockage
Les noeuds (2 ou plus) disposent chacun, individuellement, des binaires Oracle, ainsi que des fichiers d'initialisation (PFILE ou SPFILE selon la configuration de départ).
Tous les noeuds partagent les disques OCR et Voting Disk. Ils partagent également les disques de données (où sont stockés les fichiers des bases en cluster).
Adresses réseau
Chaque serveur dispose de 3 adresses réseau : Une adresse publique sur le réseau local, utilisée pour accéder à la machine en dehors d'Oracle Une adresse virtuelle (VIP), dans la même plage d'adresse du réseau local, initialisée par Oracle lorsque le cluster démarre, utilisée par les clients Oracle pour accéder aux bases en RAC (cf plus bas configuration des clients) Une adresse privée, dédiée au lien entre les noeuds du cluster. Cette adresse est dans une plage non utilisée sur le réseau local ; le lien peut passer par le réseau (non conseillé) ou être un lien croisé (entre deux noeuds) ou un « mini »-réseau dédié entre plusieurs noeuds.
Listeners
Deux modes sont disponibles, sans être exclusifs (les deux peuvent être activés simultanément) :
- FAILOVER (TAF : Transparent Application Failover)
Oracle RAC propose le FAILOVER en configurant un listener par noeud du cluster afin de gérer les requêtes de connexion à un même service (un service représente une base de données enregistrée auprès des listener du cluster). Si un noeud ou une interconnexion échoue, l'adresse IP virtuelle (VIP) est réallouée à un noeud survivant, permettant la notification de panne rapide aux clients connectés par cette VIP. Si le client (ET l'application) sont compatibles et configurés pour le TAF, le client est reconnecté à un noeud actif.
- LOAD BALANCING
Oracle RAC propose l'équilibrage de charge en distribuant les connexions entre les DISPATCHERS des noeuds du cluster, qui eux-même répartissent ces requêtes sur les instances des bases en cluster des noeuds les moins chargés.
Plusieurs LISTENER sont donc déclarés, au moins un par noeud. Chaque noeud connait son propre LISTENER et les LISTENER des autres noeuds. Exemple de configuration sur le premier noeud d'un cluster :
LISTENER_RAC1= (DESCRIPTION_LIST = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)(IP = FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)(IP = FIRST))) SID_LIST_LISTENER_RAC1= (SID_LIST= (SID_DESC= (SID_NAME=) (ORACLE_HOME=/u01/app/oracle/11/db_1)
Il en va de même pour les clients.
Sur les clients
Le tableau suivant résume les options disponibles pour le TNSNAMES.ORA (le client doit obligatoirement être en version 10g minimum).
Option | Parameter Setting |
Try each address, in order, until one succeeds | FAILOVER=on |
Try each address, randomly, until one succeeds Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager. | LOAD_BALANCE=on FAILOVER=on |
Try one address, selected at random Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager. | LOAD_BALANCE=on |
Use each address in order until destination reached | SOURCE_ROUTE=on |
Use only the first address Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager. | LOAD_BALANCE=off FAILOVER=off SOURCE_ROUTE=off |
TAF (Transparent Application Failover)
Exemples de configuration (source : http://download.oracle.com/docs/cd/B28359_01/network.111/b28316/advcfg.htm) :
Example: TAF with Connect-Time Failover and Client Load Balancing
Implement TAF with connect-time failover and client load balancing for multiple addresses. In the following example, Oracle Net connects randomly to one of the protocol addresses on sales1-server or sales2-server. If the instance fails after the connection, the TAF application fails over to the other node's listener, reserving any SELECT statements in progress.
sales.us.example.com= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (FAILOVER_MODE= (TYPE=select) (METHOD=basic))))
Example: TAF Retrying a Connection
TAF also provides the ability to automatically retry connecting if the first connection attempt fails with the RETRIES and DELAY parameters. In the following example, Oracle Net tries to reconnect to the listener on sales1-server. If the failover connection fails, Oracle Net waits 15 seconds before trying to reconnect again. Oracle Net attempts to reconnect up to 20 times.
sales.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (FAILOVER_MODE= (TYPE=select) (METHOD=basic) (RETRIES=20) (DELAY=15))))
Example: TAF Pre-Establishing a Connection
A backup connection can be pre-established. The initial and backup connections must be explicitly specified. In the following example, clients that use net service name sales1.us.example.com to connect to the listener on sales1-server are also preconnected to sales2-server. If sales1-server fails after the connection, Oracle Net fails over to sales2-server, preserving any SELECTstatements in progress. Likewise, Oracle Net preconnects to sales1-server for those clients that use sales2.us.example.com to connect to the listener on sales2-server.
sales1.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_NAME=sales1) (FAILOVER_MODE= (BACKUP=sales2.us.example.com) (TYPE=select) (METHOD=preconnect)))) sales2.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_NAME=sales2) (FAILOVER_MODE= (BACKUP=sales1.us.example.com) (TYPE=select) (METHOD=preconnect))))
LOAD BALANCING
Exemples de configuration (même source que ci-dessus) :
The following example shows a TNSNAMES.ORA file configured for client load balancing:
sales.us.example.com= (DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com)))
The following example shows a tnsnames.ora file configured for connect-time failover:
sales.us.example.com= (DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=off) (FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
Installation
L'installation sera documentée avec les éléments suivants :
- 2 noeuds dans le cluster (« rac1 » et « rac2 »), serveur 64 bits
- chaque noeud est un serveur sous Linux CentOS 5 x86_64
- le cluster est géré par Clusterware d'Oracle 10g
- ils disposent chacun d'un disque interne, et de 4 disques partagés par des liens fibre
- Les disques partagés sont gérés par ASM (Automatique Storage Management) d'Oracle, au dessus de partitions RAW DEVICE.
- les réseau publiques et VIP sont dans la plage 10.1.86
- le réseau privé est dans la plage 192.168.1
- On se connectera « root » dans un premier temps pour paramétrer le système.
IMPORTANT : CentOS n'étant pas officiellement reconnu par Oracle, il faut « faire passer » le système pour un RedHat. Editer le fichier /etc/redhat-release et remplacer le contenu par « redhat-4 » sur tous les noeuds du futur cluster.
Obtenir les logiciels
Les logiciels suivants seront utilisés :
- Oracle 10g (10.2.0.1) CRS (10201_clusterware_linux_x86_64.zip)
- Oracle DB software (10201_database_linux_x86_64.zip)
- Oracle patch upgrade to 10.2.0.4 (p6810189)
Clusterware et Oracle Database seront donc en version 10.2.0.4 à la fin de l'installation.
IMPORTANT : S'assurer qu'on dispose des versions correspondant au système : 32 ou 64 bits !
Configurer les disques partagés
Les disques partagés sont gérés sur les deux serveurs par les outils MULTIPATH compatibles avec les liens fibres multiples.
Après différents tests, la procédure correcte de configuration est la suivante.
Vérifier que les disques sont visibles sur les 2 serveurs.
Commande multipath sur le noeud 1 :
# multipath -ll mpath3 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:1:3 sdj 8:144 [active][ready] \_ 3:0:1:3 sdv 65:80 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:0:3 sdd 8:48 [active][ready] \_ 3:0:0:3 sdp 8:240 [active][ready] mpath2 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:0:2 sdc 8:32 [active][ready] \_ 3:0:0:2 sdo 8:224 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:1:2 sdi 8:128 [active][ready] \_ 3:0:1:2 sdu 65:64 [active][ready] mpath1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:0:1 sdb 8:16 [active][ready] \_ 3:0:0:1 sdn 8:208 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:1:1 sdh 8:112 [active][ready] \_ 3:0:1:1 sdt 65:48 [active][ready] mpath4 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:1:4 sdk 8:160 [active][ready] \_ 3:0:1:4 sdw 65:96 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:0:4 sde 8:64 [active][ready] \_ 3:0:0:4 sdq 65:0 [active][ready]
Commande multipath sur le noeud 2 :
# multipath -ll mpath2 (36006016009c12200a2307179ff5cdf11) dm-9 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:1:3 sdh 8:112 [active][ready] \_ 3:0:1:3 sdp 8:240 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:0:3 sdd 8:48 [active][ready] \_ 3:0:0:3 sdl 8:176 [active][ready] mpath0 (36006016009c12200902740c0ff5cdf11) dm-7 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:0:1 sdb 8:16 [active][ready] \_ 3:0:0:1 sdj 8:144 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:1:1 sdf 8:80 [active][ready] \_ 3:0:1:1 sdn 8:208 [active][ready] mpath3 (36006016009c1220056b037e9fe5cdf11) dm-6 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:0:0 sda 8:0 [active][ready] \_ 3:0:0:0 sdi 8:128 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:1:0 sde 8:64 [active][ready] \_ 3:0:1:0 sdm 8:192 [active][ready] mpath1 (36006016009c122008c806e0f005ddf11) dm-8 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] \_ round-robin 0 [prio=2][active] \_ 2:0:1:2 sdg 8:96 [active][ready] \_ 3:0:1:2 sdo 8:224 [active][ready] \_ round-robin 0 [prio=0][enabled] \_ 2:0:0:2 sdc 8:32 [active][ready] \_ 3:0:0:2 sdk 8:160 [active][ready]
Les périphériques sont visibles à la fois en tant que /dev/mpath/mpathXX, et /dev/dm-XX.
On voit cependant que les disques ne correspondent pas, sur les deux serveurs, aux mêmes numéros de périphériques mpath. Par exemple, le disque partagé ayant l'identifiant « 36006016009c12200902740c0ff5cdf11 » est reconnu comme « mpath2 » sur le noeud 1, et « mpath0 » sur le noeud 2.
Afin de faciliter l'administration, il convient tout d'abord de renommer les périphériques mpath. Dans /etc/multipath.conf, ajouter un bloc « multipaths » avec une déclaration « multipath » par périphérique à renommer, en s'appuyant sur les IDs repérés avec « multipath -ll » .
Exemple sur le noeud 1 :
multipaths { multipath { # mpath2 = dm-9 = OCR wwid 36006016009c12200902740c0ff5cdf11 alias ocr1 } multipath { # mpath1 = dm-8 = ASM1 wwid 36006016009c1220056b037e9fe5cdf11 alias asm1 } multipath { # mpath4 = dm-11 = VOTING wwid 36006016009c122008c806e0f005ddf11 alias voting1 } multipath { # mpath3 = dm-10 = ASM2 wwid 36006016009c12200a2307179ff5cdf11 alias asm2 } }
Le noeud 2 sera configuré de la même façon, avec les IDs correspondants.
Après redémarrage, « multipath -ll » donnera sur le noeud 1 :
# multipath -ll asm2 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] ... ocr1 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] ... asm1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5 [size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] ... voting1 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5 [size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] ...
Les périphériques sont vus désormais dans /dev/mpath/<LIBELLE>.
Créer des partitions sur ces disques. Sur un des deux noeuds, lancer fdisk sur chaque périphérique.
Exemple pour OCR1 sur rac1 :
# fdisk /dev/mpath/ocr1 The number of cylinders for this disk is set to 1305. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1305, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): Using default value 1305 Command (m for help): p Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/mpath/ocr1p1 1 1305 10482381 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
L'erreur à l'écriture de la table de partitions est dûe au fait que fdisk gère mal le multipath. Cependant, les partitions doivent apparaître dans /dev/mpath, sous le nom des périphériques auxquels sont ajoutés le numéro de partition créée (ici, « p1 ») :
# ls -l /dev/mpath total 0 ... lrwxrwxrwx 1 root root 7 Oct 21 12:37 asm1 -> ../dm-8 lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm1p1 -> ../dm-15 lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm2 -> ../dm-10 lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm2p1 -> ../dm-13 lrwxrwxrwx 1 root root 7 Oct 21 12:37 ocr1 -> ../dm-9 lrwxrwxrwx 1 root root 8 Oct 21 12:37 ocr1p1 -> ../dm-14 lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1 -> ../dm-11 lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1p1 -> ../dm-16
Créer les RAW DEVICES
Oracle crée ses volumes ASM obligatoirement au-dessus de disques en raw device.
Editer le fichier /etc/sysconfig/rawdevices sur chaque noeud, et ajouter :
/dev/raw/raw1 /dev/mapper/ocr1p1 /dev/raw/raw2 /dev/mapper/voting1p1 /dev/raw/raw3 /dev/mapper/asm1p1 /dev/raw/raw4 /dev/mapper/asm2p1
Relancer le service rawdevices (qui exécute des commandes « raw » en fonction de la configuration de /etc/sysconfig/rawdevices), et vérifier qu'il sera relancé au prochain redémarrage :
# service rawdevices restart # chkconfig --level 2345 rawdevices on
Editer /etc/rc.local pour donner les bon propriétaire et droits à ces devices. Ajouter :
chown oracle.oinstall /dev/raw/raw1 chown oracle.oinstall /dev/raw/raw2 chown oracle.oinstall /dev/raw/raw3 chown oracle.oinstall /dev/raw/raw4 chmod 600 /dev/raw/raw1 chmod 600 /dev/raw/raw2 chmod 600 /dev/raw/raw3 chmod 600 /dev/raw/raw4
On ne peut pas lancer manuellement ces commandes pour l'instant car l'utilisateur « oracle » et le groupe « oinstall » n'existent pas forcément sur ces serveurs, tant qu'oracle n'a pas été installé.
Par contre, il convient d' « initialiser » ces raw devices pour s'assurer qu'Oracle trouvera des partitions vierges (l'installation peut échouer pratiquement à la fin s'il y a un doute à la création de l'OCR et du Voting Disk). La commande
dd if=/dev/zero of=/dev/raw/raw1
lancée sur chacun des raw devices évite ce désagrément.
Préparer le système d'exploitation
Sur chacun des noeuds, commencer par supprimer les logiciels inutiles (s'ils ne sont pas nécessaires à une autre application sur le serveur) et installer les logiciels et librairies requises.
# yum remove –purge openoffice* php* http* mysql* # yum update # yum install setarch* compat-libstdc++* make-3* glibc-2* openmotif* compat-db-4* gcc compat-gcc* glibc-devel-2* libaio-0*
Si le serveur est en 64 bits, ajouter
# yum install glibc-2*.i386 glibc-devel-2*.i386
Editer le fichier /etc/hosts pour déclarer les adresses de tous les noeuds :
127.0.0.1 localhost.localdomain localhost # Public IP address 10.1.86.2 rac1.localdomain rac1 10.1.86.3 rac2.localdomain rac2 #Private IP address 10.1.86.5 rac1-priv.localdomain rac1-priv 10.1.86.6 rac2-priv.localdomain rac2-priv #Virtual IP address 192.168.1.1 rac1-vip.localdomain rac1-vip 192.168.1.2 rac2-vip.localdomain rac2-vip
IMPORTANT : sur tous les noeuds du cluster, les interfaces doivent porter le même nom. Si l'adresse publique correspond à eth0 sur un noeud, elle devra correspondre à eth0 sur tous les noeuds. Idem pour les adresses privées et vip.
Dans le cas contraire, durant l'installation de ClusterWare, on aura une erreur :
Thrown when the IP address os a host cannot be determined
Editer le fichier /etc/sysctl.conf, vérifier ou ajouter les paramètres suivants :
kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144
Et appliquer ces paramètres :
# /sbin/sysctl -p
Editer le fichier /etc/security/limits.conf, ajouter :
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
Editer (ou créer s'il n'existe pas) le fichier /etc/pam.d/login, y ajouter :
session required /lib/security/pam_limits.so
Dans le fichier /etc/selinux/config, s'assurer que SELinux est désactivé :
SELINUX=disabled
Lancer ou relancer le service ntp, et le configurer au démarrage
service ntpd restart chkconfig --level 2345 ntpd on
Et enfin paramétrer le module « hangcheck-timer » dans /etc/modprobe.conf, ajouter :
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
le charger pour la session en cours :
# modprobe -v hangcheck-timer
Préparer l'environnement Oracle
Créer les utilisateurs et groupes (l'utilisateur sera « oracle », répertoire personnel « /oracle ») :
# groupadd oinstall # groupadd dba # groupadd oper # useradd -g oinstall -G dba -d /oracle oracle # passwd oracle
et les répertoires (« crs » accueillera les binaires Clusterware, « db_1 » accueillera les binaires de Database Server) :
# mkdir -p /oracle/product/10.2.0/crs # mkdir -p /oracle/product/10.2.0/db_1 # mkdir -p /oradata # chown -R oracle.oinstall /oracle /oradata
L'utilisateur étant créé, on peut exécuter les commandes du fichier rc.local :
# /etc/rc.local
Configurer l'environnement de l'utilisateur. Editer /oracle/.bash_profile et ajouter :
# Oracle Settings TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME ORACLE_SID=RAC1; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi
Configurer SSH pour le « User Equivalence »
Le « User Equivalence » désigne la possibilité d'accès et d'exécution de commandes d'un noeud à l'autre, par ssh, sans demande de mot de passe. Ouvrir nue console en tant qu'utilisateur « oracle » sur chacun des noeuds.
Créer sur chacun d'eux un jeu de clé DSA (ne PAS renseigner la passphrase, sinon ssh la demandera à la connexion, ce qu'on veut justement éviter) :
oracle$ mkdir ~/.ssh oracle$ chmod 700 ~/.ssh oracle$ /usr/bin/ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_dsa. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. The key fingerprint is: af:37:ca:69:3c:a0:08:97:cb:9c:0b:b0:20:70:e3:4a oracle@rac1.localdomain
Copier le contenu du fichier ~/.ssh/id_dsa.pub généré et le coller dans un fichier « ~/.ssh/authorized_keys » sur tous les noeuds. Localement d'abord :
oracle$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys oracle$ chmod 644 ~/.ssh/authorized_keys
Puis sur l'autre noeud :
oracle$ ssh oracle@rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'ds2 (192.168.200.52)' can't be established. RSA key fingerprint is d1:23:a7:df:c5:fc:4e:10:d2:83:60:49:25:e8:eb:11. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'ds2,192.168.200.52' (DSA) to the list of known hosts. oracle@ds2's password: oracle$ ssh oracle@rac2 oracle@ds2's password: oracle$ chmod 644 ~/.ssh/authorized_keys oracle$ exit
Réaliser ces opérations sur chacun des noeuds, pour « croiser » les clés.
Vérifier que chacun se connecte localement et sur l'autre serveur par ssh sans demande de mot de passe. Exemple sur rac1 :
oracle$ hostname rac1.localdomain oracle$ ssh rac1 Last login: Fri Oct 22 11:49:35 2010 from 10.1.86.201 oracle$ exit Connection to rac1 closed. oracle$ ssh rac2 Last login: Fri Oct 22 12:11:04 2010 from 10.1.86.201 oracle$exit Connection to rac2 closed.
A partir du serveur sur lequel sera lancée l'installation de Clusterware, initialiser le « User Equivalence » (attention, cette équivalence n'est active que pour la session en cours) :
oracle$ exec /usr/bin/ssh-agent $SHELL oracle$ /usr/bin/ssh-add Identity added: /oracle/.ssh/id_dsa (/oracle/.ssh/id_dsa)
Installer Clusterware
Décompresser l'archive 10201_clusterware_linux_x86_64.zip, aller dans le répertoire ainsi créé et lancer l'installateur (attention, à partir d'une session ssh, le DISPLAY doit être initialisé pour accéder au poste client ; ou, éventuellement, lancer ssh avec l'option -X (X11 forwarding).
oracle$ unzip 10201_clusterware_linux_x86_64.zip oracle$ cd clusterware oracle$ ./runInstaller
- Cliquer sur « Next »
- Accepter le répertoire « oraInventory » par défaut.
- Entrer le chemin correct pour l'ORACLE_HOME du cluster. Ici :
« /oracle/product/10.2.0/crs »
- Attendre la vérification des pré-requis. Si une vérification échoue, régler le problème et cliquer sur « Retry ».
Il est possible de continuer en laissant un pré-requis mineur irrésolu, auquel cas un écran d'avertissement s'affiche.
- L'écran suivant liste noeud correspondant au système local. Cliquer sur « Add » pour ajouter le second noeud.
- Entrer les information du second noeud.
- Une fois les deux noeuds définis, cliquer sur « Next ».
- Définir l'usage des interfaces réseau : ici, on éditera « eth0 » (qui, contrairement à l'écran ci-joint, est pour notre exemple sur le réseau 10.1.86.0) pour lui donner le type « Public ».
- Sélectionner eth0 et cliquer sur « Edit ».
- Eth1 restera sur 192.168.1.0 en « Private ».
- Pour l'emplacement du registre OCR, sélectionner « External redundancy », si la partition prévue est sécurisée par du RAID matériel (sinon, prévoir 2 ou 3 partitions, et demander à Oracle de gérer la redondance en sélectionnant « Normal redundancy »)
- Idem pour le « Voting disk ».
- Accepter le résumé si tout est correct,
et attendre la fin de l'installation.
A la fin de l'installation, lancer sur les 2 noeuds les scripts indiqués, en tant que « root ».
Le script orainstRoot.sh doit afficher ce type de messages :
# cd /u01/app/oracle/oraInventory # ./orainstRoot.sh Changing permissions of /u01/app/oracle/oraInventory to 770. Changing groupname of /u01/app/oracle/oraInventory to oinstall. The execution of the script is complete
Sur le premier noeud (celui sur lequel a été lancé runIstaller), root.sh initialise l'OCR et le Voting Disk (cf plus bas si des erreurs apparaissent au lancement de root.sh) :
# cd /u01/crs/oracle/product/10.2.0/crs # ./root.sh WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root WARNING: directory '/u01/crs/oracle/product' is not owned by root WARNING: directory '/u01/crs/oracle' is not owned by root WARNING: directory '/u01/crs' is not owned by root WARNING: directory '/u01' is not owned by root Checking to see if Oracle CRS stack is already configured /etc/oracle does not exist. Creating it now. Setting the permissions on OCR backup directory Setting up NS directories Oracle Cluster Registry configuration upgraded successfully WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root WARNING: directory '/u01/crs/oracle/product' is not owned by root WARNING: directory '/u01/crs/oracle' is not owned by root WARNING: directory '/u01/crs' is not owned by root WARNING: directory '/u01' is not owned by root assigning default hostname rac1 for node 1. assigning default hostname rac2 for node 2. Successfully accumulated necessary OCR keys. Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897. node <nodenumber>: <nodename> <private interconnect name> <hostname> node 1: rac1 rac1-priv rac1 node 2: rac2 rac2-priv rac2 Creating OCR keys for user 'root', privgrp 'root'.. Operation successful. Now formatting voting device: /dev/raw/raw2 Format of 1 voting devices complete. Startup will be queued to init within 90 seconds. Adding daemons to inittab Expecting the CRS daemons to be up within 600 seconds. CSS is active on these nodes. rac1 CSS is inactive on these nodes. rac2 Local node checking complete. Run root.sh on remaining nodes to start CRS daemons.
Les « WARNINGS » sur les propriétaires des répertoires peuvent être ignorés.
Sur l'autre noeuds, certaines opérations sont omises car déjà réalisées sur le noeud 1 :
# cd /u01/crs/oracle/product/10.2.0/crs # ./root.sh WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root WARNING: directory '/u01/crs/oracle/product' is not owned by root WARNING: directory '/u01/crs/oracle' is not owned by root WARNING: directory '/u01/crs' is not owned by root WARNING: directory '/u01' is not owned by root Checking to see if Oracle CRS stack is already configured /etc/oracle does not exist. Creating it now. Setting the permissions on OCR backup directory Setting up NS directories Oracle Cluster Registry configuration upgraded successfully WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root WARNING: directory '/u01/crs/oracle/product' is not owned by root WARNING: directory '/u01/crs/oracle' is not owned by root WARNING: directory '/u01/crs' is not owned by root WARNING: directory '/u01' is not owned by root clscfg: EXISTING configuration version 3 detected. clscfg: version 3 is 10G Release 2. assigning default hostname rac1 for node 1. assigning default hostname rac2 for node 2. Successfully accumulated necessary OCR keys. Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897. node <nodenumber>: <nodename> <private interconnect name> <hostname> node 1: rac1 rac1-priv rac1 node 2: rac2 rac2-priv rac2 clscfg: Arguments check out successfully. NO KEYS WERE WRITTEN. Supply -force parameter to override. -force is destructive and will destroy any previous cluster configuration. Oracle Cluster Registry for cluster has already been initialized Startup will be queued to init within 90 seconds. Adding daemons to inittab Expecting the CRS daemons to be up within 600 seconds. CSS is active on these nodes. rac1 rac2 CSS is active on all nodes. Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Waiting for the Oracle CRSD and EVMD to start Oracle CRS stack installed and running under init(1M) Running vipca(silent) for configuring nodeapps The given interface(s), "eth0" is not public. Public interfaces should be used to configure virtual IPs.
En cas d'erreurs, sans sortir de runInstaller et de l'écran « Execute configuration scripts » (runInstaller sous Xwindow fonctionne en tâche de fond et ne bloque pas la console ssh à partir de laquelle il est lancé : appuyer sur « Entrée » pour retrouver le prompt), appliquer les corrections suivantes :
- Erreur 1 :
PROT-1: Failed to initialize ocrconfig Failed to upgrade Oracle Cluster Registry configuration
Il faut appliquer un patch spécifique aux systèmes 64 bits. Le patch 4679769 est téléchargeable sur le site d'Oracle Metalink. Il ne contient qu'un exécutable (clsfmt.bin) à placer dans le répertoire $ORACLE_HOME/bin (sauvegarder l'ancien clsfmt.bin avant de l'écraser).
- Erreur 2 :
/u01/app/oracle/product/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
il faut éditer deux fichiers :
dans $ORACLE_HOME/vipca, commenter les lignes suivantes (aux alentours de la ligne 120) :
if [ "$arch" = "i686" -o "$arch" = "ia64" ] then LD_ASSUME_KERNEL=2.4.19 export LD_ASSUME_KERNEL fi
dans $ORACLE_HOME/srvctl, chercher et commenter également ces lignes :
#Remove this workaround when the bug 3937317 is fixed LD_ASSUME_KERNEL=2.4.19 export LD_ASSUME_KERNEL
- Erreur 3 : La dernière étape du script root.sh (lancement de « vipca » en mode silencieux) échoue la plupart du temps parce que l'adresse VIP est souvent dans une plage d'adresses privées (192.168.1) :
Error 0(Native: listNetInterfaces:[3]) [Error 0(Native: listNetInterfaces:[3])]
Il faut alors le relancer manuellement :
# cd /u01/crs/oracle/product/10.2.0/crs/bin # ./vipca
- Cliquer sur « Next » sur l'écran d'accueil.
- Sélectionner eth0 et cliquer sur « Next »
- Entrer les adresse IP virtuelles de chaque noeud.
- Accepter le résumé en cliquant sur « Finish ».
Attendre la fin de l'installation pour valider le résultat en cliquant sur « Exit ».
A ce moment, on retourne sur l'écran « Execute Configuration scripts », qu'on peut valider.
De la même manière, attendre la fin de l'installation pour valider en cliquent sur « Exit ».
Installer Database Server et créer l'instance ASM
IMPORTANT : si Oracle est déjà installé sur un ou plusieurs des serveurs constituant le cluster (exemple : Oracle 10g 10.2.0.1 est installé en « single » sur un serveur, on ne peut pas le mettre à jour pour des raisons de compatibilité avec une application. On installe Oracle 10g RAC 10.2.0.4 dans un ORACLE_HOME séparé), s'assurer que l'utilisateur qui lance l'installation de Database Server en RAC a les droits d'écriture sur le répertoire parent de son ORACLE_HOME.
Exemple : Oracle 10.2.0.1 est installé dans /oracle/product/10.2.0/db_1, on veut installer Oracle 10.2.0.4 en RAC dans /oracle/product/10.2.0/db_2. L'utilisateur doit avoir les droits d'écriture sur /oracle/product/10.2.0 pour créer son arborescence et copier ses fichiers.
S'assurer que ce même utilisateur a les droits d'écriture sur /etc/oratab
L'instance ASM est nécessaire pour la gestion par Oracle des volumes ASM qui contiendront les données des bases utilisateurs. Elle doit donc être créée avant toute autre base. Elle n'est constituée que d'une instance en mémoire, elle n'a pas de fichier de données sur disque, à part son SPFILE.
Comme pour Clusterware, décompresser l'archive et lancer runInstaller.
oracle$ unzip 10201_database_linux_x86_64.zip oracle$ cd database oracle$ ./runInstaller
- Cliquer sur « Next » sur l'écran d'accueil
- Sélectionner « Enterprise Edition » et cliquer sur « Next »
- Indiquer le répertoire d'installation (ORACLE_HOME). Si une autre version d'Oracle est déjà installée et qu'il ne faut pas l'écraser, changer le nom et le répertoire (pour « db_2 » par exemple)
- Sélectionner « Cluster Installation » et cocher les 2 noeuds du cluster
- Vérifier les pré-requis, corriger les problèmes éventuels
- Créer l'instance ASM, donner le mot de passe SYS de l'instance
- Si la redondance doit être gérée par Oracle, sélectionner « High » (RAID5) ou « Normal » (RAID1) et indiquer les partitions à intégrer au RAID logiciel.
- Si la sécurité est assurée par le matériel, sélectionner « External » et indiquer une ou plusieurs partitions (dont les tailles s'ajouteront, dans ce cas)
- Valider le résumé en cliquant sur « Install ».
Attendre que l'installation se termine et la fin des assistants de configuration.
Exécuter le script « root.sh » comme indiqué sur tous les noeuds du cluster
Valider la fin de l'installation.
Oracle Database Server est désormais installé, et l'instance ASM créée. Les bases utilisateurs peuvent désormais être créées avec « dbca » (DataBase Configuration Assistant), en indiquant si on souhaite intégrer cette base au cluster, ou l'installer sulement en « single » sur un des noeuds.
Lors de l'installation, on indiquera le groupe ASM « DATA » comme destination de la base de données.
Mémento de commandes cluster RAC
Contrôler le cluster
Contrôler l’état des ressources du cluster
Pour cela on utilise la commande crs_stat du clusterWare :
(l'option -t sert à obtenir une sortie tabulée, l'option -v permet d'obtenir quelque chose de plus verbeux)
$ $CRS_HOME/bin/crs_stat -t -v Name Type R/RA F/FT Target State Host ---------------------------------------------------------------------- ora....11.inst application 0/5 0/0 ONLINE ONLINE NODE1 ora....12.inst application 0/5 0/0 ONLINE ONLINE NODE2 ora....db1.srv application 0/0 0/0 ONLINE ONLINE NODE1 ora....db2.srv application 0/0 0/0 ONLINE ONLINE NODE2 ora....bsrv.cs application 0/0 0/1 ONLINE ONLINE NODE2 ora.clustdb.db application 0/0 0/1 ONLINE ONLINE NODE1 ora....SM1.asm application 0/5 0/0 ONLINE ONLINE NODE1 ora....E1.lsnr application 0/5 0/0 ONLINE ONLINE NODE1 ora....DE1.gsd application 0/5 0/0 ONLINE ONLINE NODE1 ora....DE1.ons application 1/10 0/0 ONLINE ONLINE NODE1 ora....DE1.vip application 0/0 0/0 ONLINE ONLINE NODE1 ora....SM2.asm application 0/5 0/0 ONLINE ONLINE NODE2 ora....E2.lsnr application 0/5 0/0 ONLINE ONLINE NODE2 ora....DE2.gsd application 0/5 0/0 ONLINE ONLINE NODE2 ora....DE2.ons application 3/10 0/0 ONLINE ONLINE NODE2 ora....DE2.vip application 0/0 0/0 ONLINE ONLINE NODE2 Si on veut obtenir le nom complet des ressources, il faut utiliser la commande crs_stat sans option.
NB : Cette commande reflète l’état des ressources dans le OCR.
Arrêt/démarrage d’une instance dans le cluster
pour arréter l'instance clustdb1 de la base de cluster clustdb :
$ $ORACLE_HOME/bin/srvctl stop instance -i clustdb1 -d clustdb
pour démarrer l'instance clustdb2 de la base de cluster clustdb
$ $ORACLE_HOME/bin/srvctl start instance -i clustdb2 -d clustdb
Arrêt/démarrage d’une ressource ASM (Automatic Storage Management)
pour arréter la ressource ASM sur le noeud NODE1
$ $ORACLE_HOME/bin/srvctl stop asm -n NODE1
pour démarrer la ressource ASM sur le noeud NODE2
$ $ORACLE_HOME/bin/srvctl start asm -n NODE2
Arrêt/démarrage d’une resource listener
pour arréter la ressource listener sur le noeud NODE2
$ $ORACLE_HOME/bin/srvctl stop listener -n NODE2
pour démarrer la ressource listener sur le noeud NODE1
$ $ORACLE_HOME/bin/srvctl start listener -n NODE1
Arrêt/démarrage de toutes les ressources d’un même noeud
pour arréter les ressources du noeud NODE2
$ $ORACLE_HOME/bin/srvctl stop nodeapps -n NODE2
pour démarrer les ressources du noeud NODE1
$ $ORACLE_HOME/bin/srvctl start nodeapps -n NODE1
Arrêt/démarrage d’une ressource particulière
pour arréter la ressource "ora.NODE1.ons"
$CRS_HOME/bin/crs_start ora.NODE1.ons Attempting to start `ora.NODE1.ons` on member `NODE1` Start of `ora.NODE1.ons` on member `NODE1` succeeded.
pour démarrer la ressource "ora.NODE1.ons"
$CRS_HOME/bin/crs_stop ora.NODE1.ons Attempting to stop `ora.NODE1.ons` on member `NODE1` Stop of `ora.NODE1.ons` on member `NODE1` succeeded.
Contrôler le clusterWare CRS (Cluster Ready Services)
Contrôler le statut des processus CRS
$CRS_HOME/bin/crsctl check crs CSS appears healthy CRS appears healthy EVM appears healthy
Arréter et redémarrer le CRS
Attention, ces processus appartenant à root, ils doivent être réaliser par cet utilisateur. De plus, ces commandes sont asynchrones, veillez donc à contrôler l’état du CRS après avoir taper ces commandes.
Pour arréter le service :
# $CRS_HOME/bin/crsctl stop crs
Pour démarrer le service :
# $CRS_HOME/bin/crsctl start crs
Obtenir la localisation du ou des disques votant (ou voting disks)
Ceci s’effectue avec la commande suivante :
$ $CRS_HOME/bin/crsctl query css votedisk 0. 0 /dev/rdsk/emcpower0g located 1 votedisk(s).
Contrôle de l’OCR
L’OCR (Oracle Cluster Registry) contient, comme son nom l’indique, la défition du cluster : les noeuds, les bases, les instances, les services etc.
Il peut être décliné sous deux formes :
- un simple fichier sur un système de fichiers en cluster (car il doit être accessible des deux noeuds)
- une partition brute partagée (Shared Raw partition). De plus, ces fichiers/partitions peuvent être multiplexées sur différents axes. (Si il est unique, la redondance est laissée à un système tiers : RAID, mirroring de baies, SAN etc.
Il est donc important, dans la gestion de son cluster, de connaître les informations de l’OCR (localisation, taille, redondance etc.), mais aussi de savoir le sécuriser en le sauvegardant, et enfin de savoir le restaurer en cas de perte du volume/fichier.
Obtenir les infos de l’OCR
Les infos de l’OCR s’obtiennent avec la commande ocrcheck.
$ $CRS_HOME/bin/ocrcheck Status of Oracle Cluster Registry is as follows : Version : 2 <----- Version du registre Total space (kbytes) : 51200 <----- Espace total alloué au registre Used space (kbytes) : 6220 <----- Taille du registre Available space (kbytes) : 44980 <----- Espace disponible ID : 507221704 Device/File Name : /dev/rdsk/emcpower1g <----- Emplacement du registre Device/File integrity check succeeded ^----- Vérification de l'intégrité du périphérique Device/File not configured ^----- Définition de la deuxième partition (si multipléxé) Cluster registry integrity check succeeded
Exporter et importer l’OCR
L’export et l’import de l’OCR se fait par la commande ocrconfig. Dans la mesure où l’OCR (qu’il soit fichier ou partition brute) est détenu par root, mais qu’il reste accessible en lecture aux utilisateur du groupe dba. Il est conseillé de réaliser l’export en tant qu’utilisateur oracle (par exemple). L’import doit, quant à lui, être réalisé par le root.
Le but de l’opération est donc de garder une copie de l’OCR (dans un format texte certes, mais peu lisible ;) ). Cette copie peut-être réalisé en cas de perte de la partition, ou de corruption des données du registre.
- Export de l’OCR
$ $CRS_HOME/bin/ocrconfig -export export_File.dmp -s online
l'option "-s online" permet d'effectuer cet export en ligne sans arréter le CRS.
- Import de l’OCR
Eventuellement restaurer/recrer la partition, et ou le fichier.
# $CRS_HOME/bin/ocrconfig --import export_File.dmp
- Sauvegarder à froid l’OCR
La sauvegarde à froid de l’OCR, se réalise simplement :
- par une copie de fichier, si l’OCR est matérialisé dans un ou plusieurs fichiers
- par un ordre unix "dd", dans le cas d’une partition partagées. Pour l’import par dd, il suffit d’inverser l’input file (if) et l’output file (of) dans la commande dd :
pour exporter :
# dd if=/dev/rdsk/emcpower1g of=/HOME/ocr/backup/ocr_010507.bkp bs=1024 count=51200
pour importer :
# dd if=/HOME/ocr/backup/ocr_010507.bkp of=/dev/rdsk/emcpower1g bs=1024 count=51200