Outils personnels

RAC database sur Enterprise Edition : Différence entre versions

De wikiGite

(Mémento de commandes cluster RAC)
 
(2 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 130 : Ligne 130 :
  
 
<table border=1>
 
<table border=1>
<tr><td>Option</td><td>Parameter Setting</td></tr>
+
<tr><td>'''Option'''</td><td>'''Parameter Setting'''</td></tr>
 
<tr><td>Try each address, in order, until one succeeds</td><td>FAILOVER=on</td></tr>
 
<tr><td>Try each address, in order, until one succeeds</td><td>FAILOVER=on</td></tr>
 
<tr><td>Try each address, randomly, until one succeeds<br/>
 
<tr><td>Try each address, randomly, until one succeeds<br/>
Ligne 138 : Ligne 138 :
 
<tr><td>Use each address in order until destination reached</td><td>SOURCE_ROUTE=on</td></tr>
 
<tr><td>Use each address in order until destination reached</td><td>SOURCE_ROUTE=on</td></tr>
 
<tr><td>Use only the first address<br/>
 
<tr><td>Use only the first address<br/>
Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager.</td><td>LOAD_BALANCE=off<br>FAILOVER=off
+
Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager.</td><td>LOAD_BALANCE=off<br/>FAILOVER=off<br/>SOURCE_ROUTE=off</td></tr>
 +
</table>
  
SOURCE_ROUTE=off</td></tr>
+
=== TAF (Transparent Application Failover) ===
</table>
+
Exemples de configuration (source : http://download.oracle.com/docs/cd/B28359_01/network.111/b28316/advcfg.htm) :
  
2.2.1  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
 
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.
 
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=
+
sales.us.example.com=
(DESCRIPTION=
+
  (DESCRIPTION=
  (LOAD_BALANCE=on)  
+
  (LOAD_BALANCE=on)  
  (FAILOVER=on)  
+
  (FAILOVER=on)  
  (ADDRESS=
+
  (ADDRESS=
      (PROTOCOL=tcp)   
+
        (PROTOCOL=tcp)   
      (HOST=sales1-server)   
+
        (HOST=sales1-server)   
      (PORT=1521))  
+
        (PORT=1521))  
  (ADDRESS=
+
  (ADDRESS=
      (PROTOCOL=tcp)   
+
        (PROTOCOL=tcp)   
      (HOST=sales2-server)   
+
        (HOST=sales2-server)   
      (PORT=1521))  
+
        (PORT=1521))  
  (CONNECT_DATA=
+
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com)  
+
      (SERVICE_NAME=sales.us.example.com)  
    (FAILOVER_MODE=
+
      (FAILOVER_MODE=
      (TYPE=select)  
+
        (TYPE=select)  
      (METHOD=basic))))
+
        (METHOD=basic))))
13.3.5.2 Example: TAF Retrying a Connection
+
 
 +
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.
 
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=
+
sales.us.example.com=
(DESCRIPTION=
+
  (DESCRIPTION=
  (ADDRESS=
+
  (ADDRESS=
      (PROTOCOL=tcp)   
+
        (PROTOCOL=tcp)   
      (HOST=sales1-server)   
+
        (HOST=sales1-server)   
      (PORT=1521))  
+
        (PORT=1521))  
  (CONNECT_DATA=
+
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com)  
+
      (SERVICE_NAME=sales.us.example.com)  
    (FAILOVER_MODE=
+
      (FAILOVER_MODE=
      (TYPE=select)  
+
        (TYPE=select)  
      (METHOD=basic)
+
        (METHOD=basic)
      (RETRIES=20)
+
        (RETRIES=20)
      (DELAY=15))))
+
        (DELAY=15))))
13.3.5.3 Example: TAF Pre-Establishing a Connection
+
 
 +
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.
 
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=
+
sales1.us.example.com=
(DESCRIPTION=
+
  (DESCRIPTION=
  (ADDRESS=
+
  (ADDRESS=
      (PROTOCOL=tcp)   
+
        (PROTOCOL=tcp)   
      (HOST=sales1-server) 
+
        (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))  
 
       (PORT=1521))  
  (CONNECT_DATA=
+
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com)  
+
      (SERVICE_NAME=sales.us.example.com)  
    (INSTANCE_NAME=sales2)
+
      (INSTANCE_NAME=sales1)  
    (FAILOVER_MODE=
+
      (FAILOVER_MODE=
      (BACKUP=sales1.us.example.com)  
+
        (BACKUP=sales2.us.example.com)  
      (TYPE=select)  
+
        (TYPE=select)  
      (METHOD=preconnect))))
+
        (METHOD=preconnect))))
  2.2.2 LOAD BALANCING
+
  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) :
 
Exemples de configuration (même source que ci-dessus) :
 +
 
The following example shows a TNSNAMES.ORA file configured for client load balancing:
 
The following example shows a TNSNAMES.ORA file configured for client load balancing:
sales.us.example.com=
+
sales.us.example.com=
(DESCRIPTION=
+
  (DESCRIPTION=
  (ADDRESS_LIST=
+
  (ADDRESS_LIST=
  (LOAD_BALANCE=on)
+
  (LOAD_BALANCE=on)
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))  
+
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))  
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
+
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
  (CONNECT_DATA=
+
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com)))  
+
    (SERVICE_NAME=sales.us.example.com)))  
 +
 
 
The following example shows a tnsnames.ora file configured for connect-time failover:
 
The following example shows a tnsnames.ora file configured for connect-time failover:
sales.us.example.com=
+
sales.us.example.com=
(DESCRIPTION=
+
  (DESCRIPTION=
  (ADDRESS_LIST=
+
  (ADDRESS_LIST=
  (LOAD_BALANCE=off)
+
    (LOAD_BALANCE=off)
  (FAILOVER=ON)
+
    (FAILOVER=ON)
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))  
+
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))  
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
+
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
  (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
+
  (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
Installation
+
= Installation =
 
L'installation sera documentée avec les éléments suivants :
 
L'installation sera documentée avec les éléments suivants :
2 noeuds dans le cluster (« rac1 » et « rac2 »), serveur 64 bits
+
* 2 noeuds dans le cluster (« rac1 » et « rac2 »), serveur 64 bits
chaque noeud est un serveur sous Linux CentOS 5 x86_64
+
* chaque noeud est un serveur sous Linux CentOS 5 x86_64
le cluster est géré par Clusterware d'Oracle 10g
+
* 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
+
* 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 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
+
* les réseau publiques et VIP sont dans la plage 10.1.86
le réseau privé est dans la plage 192.168.1
+
* 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.
+
* 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.
 
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.
3.1  Obtenir les logiciels
+
== Obtenir les logiciels ==
 
Les logiciels suivants seront utilisés :
 
Les logiciels suivants seront utilisés :
Oracle 10g (10.2.0.1) CRS (10201_clusterware_linux_x86_64.zip)
+
* Oracle 10g (10.2.0.1) CRS (10201_clusterware_linux_x86_64.zip)
Oracle DB software (10201_database_linux_x86_64.zip)
+
* Oracle DB software (10201_database_linux_x86_64.zip)
Oracle patch upgrade to 10.2.0.4 (p6810189)
+
* 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.
 
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 !
 
IMPORTANT : S'assurer qu'on dispose des versions correspondant au système : 32 ou 64 bits !
3.2  Configurer les disques partagés
+
== 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.
 
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.
 
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.
 
Vérifier que les disques sont visibles sur les 2 serveurs.
 +
 
Commande multipath sur le noeud 1 :
 
Commande multipath sur le noeud 1 :
# multipath -ll  
+
# multipath -ll  
mpath3 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5  
+
mpath3 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:1:3 sdj 8:144  [active][ready]  
+
  \_ 2:0:1:3 sdj 8:144  [active][ready]  
\_ 3:0:1:3 sdv 65:80  [active][ready]  
+
  \_ 3:0:1:3 sdv 65:80  [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:0:3 sdd 8:48  [active][ready]  
+
  \_ 2:0:0:3 sdd 8:48  [active][ready]  
\_ 3:0:0:3 sdp 8:240  [active][ready]  
+
  \_ 3:0:0:3 sdp 8:240  [active][ready]  
mpath2 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5  
+
mpath2 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:0:2 sdc 8:32  [active][ready]  
+
  \_ 2:0:0:2 sdc 8:32  [active][ready]  
\_ 3:0:0:2 sdo 8:224  [active][ready]  
+
  \_ 3:0:0:2 sdo 8:224  [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
  \_ round-robin 0 [prio=0][enabled]  
\_ 2:0:1:2 sdi 8:128  [active][ready]  
+
  \_ 2:0:1:2 sdi 8:128  [active][ready]  
\_ 3:0:1:2 sdu 65:64  [active][ready]  
+
  \_ 3:0:1:2 sdu 65:64  [active][ready]  
mpath1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5  
+
mpath1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:0:1 sdb 8:16  [active][ready]  
+
  \_ 2:0:0:1 sdb 8:16  [active][ready]  
\_ 3:0:0:1 sdn 8:208  [active][ready]  
+
  \_ 3:0:0:1 sdn 8:208  [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:1:1 sdh 8:112  [active][ready]  
+
  \_ 2:0:1:1 sdh 8:112  [active][ready]  
\_ 3:0:1:1 sdt 65:48  [active][ready]  
+
  \_ 3:0:1:1 sdt 65:48  [active][ready]  
mpath4 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5  
+
mpath4 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:1:4 sdk 8:160  [active][ready]  
+
  \_ 2:0:1:4 sdk 8:160  [active][ready]  
\_ 3:0:1:4 sdw 65:96  [active][ready]  
+
  \_ 3:0:1:4 sdw 65:96  [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:0:4 sde 8:64  [active][ready]  
+
  \_ 2:0:0:4 sde 8:64  [active][ready]  
\_ 3:0:0:4 sdq 65:0  [active][ready]  
+
  \_ 3:0:0:4 sdq 65:0  [active][ready]
  
 
Commande multipath sur le noeud 2 :
 
Commande multipath sur le noeud 2 :
# multipath -ll  
+
# multipath -ll
mpath2 (36006016009c12200a2307179ff5cdf11) dm-9 DGC,RAID 5  
+
mpath2 (36006016009c12200a2307179ff5cdf11) dm-9 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:1:3 sdh 8:112 [active][ready]  
+
  \_ 2:0:1:3 sdh 8:112 [active][ready]  
\_ 3:0:1:3 sdp 8:240 [active][ready]  
+
  \_ 3:0:1:3 sdp 8:240 [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:0:3 sdd 8:48  [active][ready]  
+
  \_ 2:0:0:3 sdd 8:48  [active][ready]  
\_ 3:0:0:3 sdl 8:176 [active][ready]  
+
  \_ 3:0:0:3 sdl 8:176 [active][ready]  
mpath0 (36006016009c12200902740c0ff5cdf11) dm-7 DGC,RAID 5  
+
mpath0 (36006016009c12200902740c0ff5cdf11) dm-7 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:0:1 sdb 8:16  [active][ready]  
+
  \_ 2:0:0:1 sdb 8:16  [active][ready]  
\_ 3:0:0:1 sdj 8:144 [active][ready]  
+
  \_ 3:0:0:1 sdj 8:144 [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:1:1 sdf 8:80  [active][ready]  
+
  \_ 2:0:1:1 sdf 8:80  [active][ready]  
\_ 3:0:1:1 sdn 8:208 [active][ready]  
+
  \_ 3:0:1:1 sdn 8:208 [active][ready]  
mpath3 (36006016009c1220056b037e9fe5cdf11) dm-6 DGC,RAID 5  
+
mpath3 (36006016009c1220056b037e9fe5cdf11) dm-6 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:0:0 sda 8:0  [active][ready]  
+
  \_ 2:0:0:0 sda 8:0  [active][ready]  
\_ 3:0:0:0 sdi 8:128 [active][ready]  
+
  \_ 3:0:0:0 sdi 8:128 [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:1:0 sde 8:64  [active][ready]  
+
  \_ 2:0:1:0 sde 8:64  [active][ready]  
\_ 3:0:1:0 sdm 8:192 [active][ready]  
+
  \_ 3:0:1:0 sdm 8:192 [active][ready]  
mpath1 (36006016009c122008c806e0f005ddf11) dm-8 DGC,RAID 5  
+
mpath1 (36006016009c122008c806e0f005ddf11) dm-8 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
\_ round-robin 0 [prio=2][active]  
+
\_ round-robin 0 [prio=2][active]  
\_ 2:0:1:2 sdg 8:96  [active][ready]  
+
  \_ 2:0:1:2 sdg 8:96  [active][ready]  
\_ 3:0:1:2 sdo 8:224 [active][ready]  
+
  \_ 3:0:1:2 sdo 8:224 [active][ready]  
\_ round-robin 0 [prio=0][enabled]  
+
\_ round-robin 0 [prio=0][enabled]  
\_ 2:0:0:2 sdc 8:32  [active][ready]  
+
  \_ 2:0:0:2 sdc 8:32  [active][ready]  
\_ 3:0:0:2 sdk 8:160 [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.
 
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.
 
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 » .
 
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 :
 
Exemple sur le noeud 1 :
multipaths {  
+
multipaths {  
multipath {
 
# mpath2 = dm-9 = OCR
 
wwid 36006016009c12200902740c0ff5cdf11
 
alias ocr1
 
}
 
multipath {
 
# mpath1 = dm-8 = ASM1
 
wwid 36006016009c1220056b037e9fe5cdf11
 
alias asm1
 
}
 
 
         multipath {  
 
         multipath {  
#               mpath4 = dm-11 = VOTING
+
#             mpath2 = dm-9 = OCR
                 wwid                   36006016009c122008c806e0f005ddf11
+
                 wwid 36006016009c12200902740c0ff5cdf11
                 alias                   voting1
+
                 alias ocr1
        }  
+
}
 +
multipath {
 +
#              mpath1 = dm-8 = ASM1
 +
                wwid 36006016009c1220056b037e9fe5cdf11
 +
                alias asm1
 +
}
 
         multipath {  
 
         multipath {  
#              mpath3 = dm-10 = ASM2  
+
#              mpath4 = dm-11 = VOTING
                wwid                    36006016009c12200a2307179ff5cdf11  
+
                wwid                    36006016009c122008c806e0f005ddf11
                alias                  asm2  
+
                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.
  
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 :
 
Après redémarrage, « multipath -ll »  donnera sur le noeud 1 :
# multipath -ll
+
# multipath -ll
asm2 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5  
+
asm2 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
...
+
...
ocr1 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5  
+
ocr1 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
...
+
...
asm1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5  
+
asm1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5  
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
...
+
...
voting1 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5  
+
voting1 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5  
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
+
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw]  
...
+
...
 
Les périphériques sont vus désormais dans /dev/mpath/<LIBELLE>.
 
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.
 
Créer des partitions sur ces disques.  Sur un des deux noeuds, lancer fdisk sur chaque périphérique.
 +
 
Exemple pour OCR1 sur rac1 :
 
Exemple pour OCR1 sur rac1 :
# fdisk /dev/mpath/ocr1
+
# fdisk /dev/mpath/ocr1
 
+
The number of cylinders for this disk is set to 1305.  
+
The number of cylinders for this disk is set to 1305.  
There is nothing wrong with that, but this is larger than 1024,  
+
There is nothing wrong with that, but this is larger than 1024,  
and could in certain setups cause problems with:  
+
and could in certain setups cause problems with:  
1) software that runs at boot time (e.g., old versions of LILO)  
+
1) software that runs at boot time (e.g., old versions of LILO)  
2) booting and partitioning software from other OSs  
+
2) booting and partitioning software from other OSs  
  (e.g., DOS FDISK, OS/2 FDISK)  
+
    (e.g., DOS FDISK, OS/2 FDISK)
 
+
Command (m for help): p
+
Command (m for help): p
 
+
Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes  
+
Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes  
255 heads, 63 sectors/track, 1305 cylinders  
+
255 heads, 63 sectors/track, 1305 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
+
Units = cylinders of 16065 * 512 = 8225280 bytes
 
+
          Device Boot      Start        End      Blocks  Id  System  
+
            Device Boot      Start        End      Blocks  Id  System  
 
+
Command (m for help): n
+
Command (m for help): n
  Command action
+
    Command action
      e  extended
+
      e  extended
      p  primary partition (1-4)
+
      p  primary partition (1-4)
  p
+
    p
  Partition number (1-4): 1
+
    Partition number (1-4): 1
  First cylinder (1-1305, default 1):
+
    First cylinder (1-1305, default 1):
  Using default value 1
+
    Using default value 1
  Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):
+
    Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):
  Using default value 1305
+
    Using default value 1305
 
+
  Command (m for help): p
+
    Command (m for help): p
 
+
Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes  
+
Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes  
255 heads, 63 sectors/track, 1305 cylinders  
+
255 heads, 63 sectors/track, 1305 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
+
Units = cylinders of 16065 * 512 = 8225280 bytes  
 
+
          Device Boot      Start        End      Blocks  Id  System  
+
            Device Boot      Start        End      Blocks  Id  System  
/dev/mpath/ocr1p1              1        1305    10482381  83  Linux  
+
/dev/mpath/ocr1p1              1        1305    10482381  83  Linux  
Command (m for help): w
+
  Command (m for help): w
  The partition table has been altered!
+
    The partition table has been altered!
 
+
  Calling ioctl() to re-read partition table.
+
    Calling ioctl() to re-read partition table.
 
+
  WARNING: Re-reading the partition table failed with error 22: Invalid argument.
+
    WARNING: Re-reading the partition table failed with error 22: Invalid argument.
  The kernel still uses the old table.
+
    The kernel still uses the old table.
  The new table will be used at the next reboot.
+
    The new table will be used at the next reboot.
  Syncing disks.
+
    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 ») :
 
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  
+
# ls -l /dev/mpath  
total 0  
+
total 0  
...
+
...
lrwxrwxrwx 1 root root 7 Oct 21 12:37 asm1 -> ../dm-8  
+
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 asm1p1 -> ../dm-15  
lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm2 -> ../dm-10  
+
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 8 Oct 21 12:37 asm2p1 -> ../dm-13  
lrwxrwxrwx 1 root root 7 Oct 21 12:37 ocr1 -> ../dm-9  
+
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 ocr1p1 -> ../dm-14  
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1 -> ../dm-11  
+
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1 -> ../dm-11  
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1p1 -> ../dm-16  
+
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1p1 -> ../dm-16  
3.3  Créer les RAW DEVICES
+
== Créer les RAW DEVICES ==
 
Oracle crée ses volumes ASM obligatoirement au-dessus de disques en raw device.
 
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 :
 
Editer le fichier /etc/sysconfig/rawdevices sur chaque noeud, et ajouter :
/dev/raw/raw1 /dev/mapper/ocr1p1  
+
/dev/raw/raw1 /dev/mapper/ocr1p1  
/dev/raw/raw2 /dev/mapper/voting1p1  
+
/dev/raw/raw2 /dev/mapper/voting1p1  
/dev/raw/raw3 /dev/mapper/asm1p1  
+
/dev/raw/raw3 /dev/mapper/asm1p1  
/dev/raw/raw4 /dev/mapper/asm2p1  
+
/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 :
 
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
+
# service rawdevices restart
# chkconfig --level 2345 rawdevices on
+
# 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é.
  
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 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
 
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
+
dd if=/dev/zero of=/dev/raw/raw1
 
lancée sur chacun des raw devices évite ce désagrément.
 
lancée sur chacun des raw devices évite ce désagrément.
3.4  Préparer le système d'exploitation
+
== 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.
 
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 remove –purge openoffice* php* http* mysql*
# yum update
+
# yum update
# yum install setarch* compat-libstdc++* make-3* glibc-2* openmotif* compat-db-4* gcc compat-gcc* glibc-devel-2* libaio-0*  
+
# 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
 
Si le serveur est en 64 bits, ajouter
# yum install glibc-2*.i386 glibc-devel-2*.i386
+
# yum install glibc-2*.i386 glibc-devel-2*.i386
  
 
Editer le fichier /etc/hosts pour déclarer les adresses de tous les noeuds :
 
Editer le fichier /etc/hosts pour déclarer les adresses de tous les noeuds :
127.0.0.1      localhost.localdomain  localhost
+
127.0.0.1      localhost.localdomain  localhost
# Public IP address
+
# Public IP address
10.1.86.2  rac1.localdomain        rac1
+
10.1.86.2  rac1.localdomain        rac1
10.1.86.3  rac2.localdomain        rac2
+
10.1.86.3  rac2.localdomain        rac2
#Private IP address
+
#Private IP address
10.1.86.5  rac1-priv.localdomain  rac1-priv
+
10.1.86.5  rac1-priv.localdomain  rac1-priv
10.1.86.6  rac2-priv.localdomain  rac2-priv
+
10.1.86.6  rac2-priv.localdomain  rac2-priv
#Virtual IP address
+
#Virtual IP address
192.168.1.1  rac1-vip.localdomain    rac1-vip
+
192.168.1.1  rac1-vip.localdomain    rac1-vip
192.168.1.2  rac2-vip.localdomain    rac2-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.
  
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 :
 
Dans le cas contraire, durant l'installation de ClusterWare, on aura une erreur :
Thrown when the IP address os a host cannot be determined
+
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 :
 
Editer le fichier /etc/sysctl.conf, vérifier ou ajouter les paramètres suivants :
kernel.shmall = 2097152
+
kernel.shmall = 2097152
kernel.shmmax = 2147483648
+
kernel.shmmax = 2147483648
kernel.shmmni = 4096
+
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
+
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
+
kernel.sem = 250 32000 100 128
fs.file-max = 65536
+
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
+
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
+
net.core.rmem_default=262144
net.core.rmem_max=262144
+
net.core.rmem_max=262144
net.core.wmem_default=262144
+
net.core.wmem_default=262144
net.core.wmem_max=262144
+
net.core.wmem_max=262144
 
Et appliquer ces paramètres :
 
Et appliquer ces paramètres :
# /sbin/sysctl -p
+
# /sbin/sysctl -p
  
 
Editer le fichier /etc/security/limits.conf, ajouter :
 
Editer le fichier /etc/security/limits.conf, ajouter :
oracle          soft    nproc  2047  
+
oracle          soft    nproc  2047  
oracle          hard    nproc  16384  
+
oracle          hard    nproc  16384  
oracle          soft    nofile  1024  
+
oracle          soft    nofile  1024  
oracle          hard    nofile  65536  
+
oracle          hard    nofile  65536  
  
 
Editer (ou créer s'il n'existe pas) le fichier /etc/pam.d/login, y ajouter :
 
Editer (ou créer s'il n'existe pas) le fichier /etc/pam.d/login, y ajouter :
session    required    /lib/security/pam_limits.so
+
session    required    /lib/security/pam_limits.so
  
 
Dans le fichier /etc/selinux/config, s'assurer que SELinux est désactivé :
 
Dans le fichier /etc/selinux/config, s'assurer que SELinux est désactivé :
SELINUX=disabled
+
SELINUX=disabled
  
 
Lancer ou relancer le service ntp, et le configurer au démarrage
 
Lancer ou relancer le service ntp, et le configurer au démarrage
service ntpd restart
+
service ntpd restart
chkconfig --level 2345 ntpd on
+
chkconfig --level 2345 ntpd on
  
 
Et enfin paramétrer le module « hangcheck-timer » dans /etc/modprobe.conf, ajouter :
 
Et enfin paramétrer le module « hangcheck-timer » dans /etc/modprobe.conf, ajouter :
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
+
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
 
le charger pour la session en cours :
 
le charger pour la session en cours :
# modprobe -v hangcheck-timer
+
# modprobe -v hangcheck-timer
3.5  Préparer l'environnement Oracle
+
== Préparer l'environnement Oracle ==
 
Créer les utilisateurs et groupes (l'utilisateur sera « oracle », répertoire personnel « /oracle ») :
 
Créer les utilisateurs et groupes (l'utilisateur sera « oracle », répertoire personnel « /oracle ») :
# groupadd oinstall
+
# groupadd oinstall
# groupadd dba
+
# groupadd dba
# groupadd oper
+
# groupadd oper
# useradd -g oinstall -G dba -d /oracle oracle
+
# useradd -g oinstall -G dba -d /oracle oracle
# passwd oracle
+
# passwd oracle
  
 
et les répertoires (« crs » accueillera les binaires Clusterware, « db_1 » accueillera les binaires de Database Server) :
 
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/crs
# mkdir -p /oracle/product/10.2.0/db_1
+
# mkdir -p /oracle/product/10.2.0/db_1
# mkdir -p /oradata
+
# mkdir -p /oradata
# chown -R oracle.oinstall /oracle /oradata
+
# chown -R oracle.oinstall /oracle /oradata
  
 
L'utilisateur étant créé, on peut exécuter les commandes du fichier rc.local :
 
L'utilisateur étant créé, on peut exécuter les commandes du fichier rc.local :
# /etc/rc.local
+
# /etc/rc.local
  
 
Configurer l'environnement de l'utilisateur. Editer /oracle/.bash_profile et ajouter :
 
Configurer l'environnement de l'utilisateur. Editer /oracle/.bash_profile et ajouter :
# Oracle Settings
+
# Oracle Settings
TMP=/tmp; export TMP
+
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
+
TMPDIR=$TMP; export TMPDIR
 
+
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
+
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
+
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=RAC1; export ORACLE_SID
+
ORACLE_SID=RAC1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
+
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
+
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
+
PATH=$ORACLE_HOME/bin:$PATH; export PATH
 
+
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_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
+
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
 
+
if [ $USER = "oracle" ]; then
+
if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
+
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
+
    ulimit -p 16384
    ulimit -n 65536
+
    ulimit -n 65536
  else
+
  else
    ulimit -u 16384 -n 65536
+
    ulimit -u 16384 -n 65536
  fi
+
  fi
fi
+
fi
3.6  Configurer SSH pour le « User Equivalence »
+
== 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.
 
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.
 
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) :
 
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$ mkdir ~/.ssh
oracle$ chmod 700 ~/.ssh
+
oracle$ chmod 700 ~/.ssh
oracle$ /usr/bin/ssh-keygen -t dsa
+
oracle$ /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
+
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
+
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
+
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
+
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
+
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
+
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
+
The key fingerprint is:
af:37:ca:69:3c:a0:08:97:cb:9c:0b:b0:20:70:e3:4a oracle@rac1.localdomain
+
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.
 
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 :
 
Localement d'abord :
oracle$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
+
oracle$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle$ chmod 644 ~/.ssh/authorized_keys
+
oracle$ chmod 644 ~/.ssh/authorized_keys
 
Puis sur l'autre noeud :
 
Puis sur l'autre noeud :
oracle$ ssh oracle@rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
+
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.
+
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.
+
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
+
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.
+
Warning: Permanently added 'ds2,192.168.200.52' (DSA) to the list of known hosts.
oracle@ds2's password:  
+
oracle@ds2's password:  
 +
 +
oracle$ ssh oracle@rac2
 +
oracle@ds2's password:
 +
 +
oracle$ chmod 644 ~/.ssh/authorized_keys
 +
oracle$ exit
  
oracle$ ssh oracle@rac2
+
Réaliser ces opérations sur chacun des noeuds, pour « croiser » les clés.
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 :
 
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
+
oracle$ hostname
rac1.localdomain
+
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.
  
oracle$ ssh rac1
+
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) :
Last login: Fri Oct 22 11:49:35 2010 from 10.1.86.201
+
oracle$ exec /usr/bin/ssh-agent $SHELL
oracle$ exit
+
oracle$ /usr/bin/ssh-add
Connection to rac1 closed.
+
Identity added: /oracle/.ssh/id_dsa (/oracle/.ssh/id_dsa)
 
 
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) :
+
== Installer Clusterware ==
oracle$ exec /usr/bin/ssh-agent $SHELL
 
oracle$ /usr/bin/ssh-add
 
Identity added: /oracle/.ssh/id_dsa (/oracle/.ssh/id_dsa)
 
oracle$
 
3.7  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).
 
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$ unzip 10201_clusterware_linux_x86_64.zip
oracle$ cd clusterware
+
oracle$ cd clusterware
oracle$ ./runInstaller
+
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 cet écran 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,
 
  
 +
* 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.
 
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 ».
  
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 :
 
Le script orainstRoot.sh doit afficher ce type de messages :
# cd /u01/app/oracle/oraInventory
+
# cd /u01/app/oracle/oraInventory
# ./orainstRoot.sh
+
# ./orainstRoot.sh
Changing permissions of /u01/app/oracle/oraInventory to 770.
+
Changing permissions of /u01/app/oracle/oraInventory to 770.
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
+
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
The execution of the script is complete
+
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) :
 
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
+
# cd /u01/crs/oracle/product/10.2.0/crs
# ./root.sh
+
# ./root.sh
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
+
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/product' is not owned by root
WARNING: directory '/u01/crs/oracle' 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/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
+
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
+
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.
+
/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.
  
Setting the permissions on OCR backup directory
+
Les « WARNINGS » sur les propriétaires des répertoires peuvent être ignorés.
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 :
 
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
+
# cd /u01/crs/oracle/product/10.2.0/crs
# ./root.sh
+
# ./root.sh
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
+
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/product' is not owned by root
WARNING: directory '/u01/crs/oracle' 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/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
+
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
+
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.
+
/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.
  
Setting the permissions on OCR backup directory
+
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 :
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
 
  
 +
* 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).
 
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 :
+
* 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
+
/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 :
  
il faut éditer deux fichiers :
 
 
dans $ORACLE_HOME/vipca, commenter les lignes suivantes (aux alentours de la ligne 120) :
 
dans $ORACLE_HOME/vipca, commenter les lignes suivantes (aux alentours de la ligne 120) :
if [ "$arch" = "i686" -o "$arch" = "ia64" ]
+
if [ "$arch" = "i686" -o "$arch" = "ia64" ]
then
+
then
LD_ASSUME_KERNEL=2.4.19
+
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
+
export LD_ASSUME_KERNEL
fi
+
fi
  
 
dans $ORACLE_HOME/srvctl, chercher et commenter également ces lignes :
 
dans $ORACLE_HOME/srvctl, chercher et commenter également ces lignes :
#Remove this workaround when the bug 3937317 is fixed
+
#Remove this workaround when the bug 3937317 is fixed
LD_ASSUME_KERNEL=2.4.19
+
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
+
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) :
+
* 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])
[Error 0(Native: listNetInterfaces:[3])]
+
[Error 0(Native: listNetInterfaces:[3])]
  
 
Il faut alors le relancer manuellement  :
 
Il faut alors le relancer manuellement  :
# cd /u01/crs/oracle/product/10.2.0/crs/bin
+
# cd /u01/crs/oracle/product/10.2.0/crs/bin
# ./vipca
+
# ./vipca
 
+
** Cliquer sur « Next » sur l'écran d'accueil.
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 ».
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.
 
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 ».
  
De la même manière, attendre la fin de l'installation...
+
== 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.
  
… pour valider en cliquent sur « Exit ».
+
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
 
 
 
 
 
 
3.8  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.
 
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.
 
Comme pour Clusterware, décompresser l'archive et lancer runInstaller.
oracle$ unzip 10201_database_linux_x86_64.zip
+
oracle$ unzip 10201_database_linux_x86_64.zip
oracle$ cd database
+
oracle$ cd database
oracle$ ./runInstaller
+
oracle$ ./runInstaller
 
 
Cliquer sur « Next » sur l'écran d'accueil, puis :
 
 
 
 
 
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
 
  
 +
* 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.
  
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.
+
Exécuter le script « root.sh » comme indiqué sur tous les noeuds du cluster
 
 
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 » sur tous les noeuds du cluster
 
 
 
  
 
Valider la fin de l'installation.
 
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.
 
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.
 
Lors de l'installation, on indiquera le groupe ASM « DATA » comme destination de la base de données.
Mémento de commandes cluster RAC
+
= Mémento de commandes cluster RAC =
Contrôler l’état des ressources du cluster  
+
== Contrôler le cluster ==
 +
=== Contrôler l’état des ressources du cluster ===
 
Pour cela on utilise la commande crs_stat du clusterWare :  
 
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  
+
(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  
+
$ $CRS_HOME/bin/crs_stat -t -v  
Name          Type          R/RA  F/FT  Target    State    Host  
+
Name          Type          R/RA  F/FT  Target    State    Host  
----------------------------------------------------------------------  
+
----------------------------------------------------------------------  
ora....11.inst application    0/5    0/0    ONLINE    ONLINE    NODE1  
+
ora....11.inst application    0/5    0/0    ONLINE    ONLINE    NODE1  
ora....12.inst application    0/5    0/0    ONLINE    ONLINE    NODE2  
+
ora....12.inst application    0/5    0/0    ONLINE    ONLINE    NODE2  
ora....db1.srv application    0/0    0/0    ONLINE    ONLINE    NODE1  
+
ora....db1.srv application    0/0    0/0    ONLINE    ONLINE    NODE1  
ora....db2.srv application    0/0    0/0    ONLINE    ONLINE    NODE2  
+
ora....db2.srv application    0/0    0/0    ONLINE    ONLINE    NODE2  
ora....bsrv.cs application    0/0    0/1    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.clustdb.db application    0/0    0/1    ONLINE    ONLINE    NODE1  
ora....SM1.asm application    0/5    0/0    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....E1.lsnr application    0/5    0/0    ONLINE    ONLINE    NODE1  
ora....DE1.gsd 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.ons application    1/10  0/0    ONLINE    ONLINE    NODE1  
ora....DE1.vip application    0/0    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....SM2.asm application    0/5    0/0    ONLINE    ONLINE    NODE2  
ora....E2.lsnr 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.gsd application    0/5    0/0    ONLINE    ONLINE    NODE2  
ora....DE2.ons application    3/10  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  
+
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.  
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.  
+
NB : Cette commande reflète l’état des ressources dans le OCR.  
  
Arrêt/démarrage d’une instance dans le cluster  
+
=== 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
  
-- pour arréter l'instance clustdb1 de la base de cluster clustdb
+
=== Arrêt/démarrage d’une ressource ASM (Automatic Storage Management) ===
$ $ORACLE_HOME/bin/srvctl stop instance -i clustdb1 -d clustdb
+
pour arréter la ressource ASM sur le noeud NODE1
-- pour démarrer l'instance clustdb2 de la base de cluster clustdb
+
$ $ORACLE_HOME/bin/srvctl stop asm -n NODE1
$ $ORACLE_HOME/bin/srvctl start instance -i clustdb2 -d clustdb
+
pour démarrer la ressource ASM sur le noeud NODE2
Arrêt/démarrage d’une ressource ASM (Automatic Storage Management)
+
$ $ORACLE_HOME/bin/srvctl start asm -n NODE2
  
-- pour arréter la ressource ASM sur le noeud NODE1
+
=== Arrêt/démarrage d’une resource listener ===
$ $ORACLE_HOME/bin/srvctl stop asm -n NODE1
+
pour arréter la ressource listener sur le noeud NODE2
-- pour démarrer la ressource ASM sur le noeud NODE2
+
$ $ORACLE_HOME/bin/srvctl stop listener -n NODE2
$ $ORACLE_HOME/bin/srvctl start asm -n NODE2
+
pour démarrer la ressource listener sur le noeud NODE1
Arrêt/démarrage d’une resource listener
+
$ $ORACLE_HOME/bin/srvctl start listener -n NODE1
  
-- pour arréter la ressource listener sur le noeud NODE2  
+
=== Arrêt/démarrage de toutes les ressources d’un même noeud ===
$ $ORACLE_HOME/bin/srvctl stop listener -n NODE2  
+
pour arréter les ressources du noeud NODE2  
-- pour démarrer la ressource listener sur le noeud NODE1  
+
$ $ORACLE_HOME/bin/srvctl stop nodeapps -n NODE2  
$ $ORACLE_HOME/bin/srvctl start listener -n NODE1  
+
pour démarrer les ressources du noeud NODE1  
Arrêt/démarrage de toutes les ressources d’un même noeud
+
$ $ORACLE_HOME/bin/srvctl start nodeapps -n NODE1  
  
-- pour arréter les ressources du noeud NODE2
+
=== Arrêt/démarrage d’une ressource particulière ===
$ $ORACLE_HOME/bin/srvctl stop nodeapps -n NODE2
+
pour arréter la ressource "ora.NODE1.ons"
-- pour démarrer les ressources du noeud NODE1  
+
$CRS_HOME/bin/crs_start ora.NODE1.ons
$ $ORACLE_HOME/bin/srvctl start nodeapps -n NODE1  
+
Attempting to start `ora.NODE1.ons` on member `NODE1`
Arrêt/démarrage d’une ressource particulière
+
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.
  
-- pour arréter la ressource "ora.NODE1.ons"
+
== Contrôler le clusterWare CRS (Cluster Ready Services) ==
$CRS_HOME/bin/crs_start ora.NODE1.ons
+
=== Contrôler le statut des processus CRS ===
Attempting to start `ora.NODE1.ons` on member `NODE1`
+
$CRS_HOME/bin/crsctl check crs  
Start of `ora.NODE1.ons` on member `NODE1` succeeded.
+
CSS appears healthy  
 
+
CRS appears healthy  
-- pour démarrer la ressource "ora.NODE1.ons"
+
EVM appears healthy  
$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  
 
-- Sortie typique si tout est OK
 
Arréter et redémarrer le CRS
 
  
 +
=== 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.  
 
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 :  
+
Pour arréter le service :  
 
+
# $CRS_HOME/bin/crsctl stop crs  
# $CRS_HOME/bin/crsctl stop crs  
+
Pour démarrer le service :  
 
+
# $CRS_HOME/bin/crsctl start crs  
* Pour démarrer le service :  
 
 
 
# $CRS_HOME/bin/crsctl start crs  
 
Obtenir la localisation du ou des disques votant (ou voting disks)
 
  
 +
=== Obtenir la localisation du ou des disques votant (ou voting disks) ===
 
Ceci s’effectue avec la commande suivante :  
 
Ceci s’effectue avec la commande suivante :  
 +
$ $CRS_HOME/bin/crsctl query css votedisk
 +
0.    0    /dev/rdsk/emcpower0g
 +
 +
located 1 votedisk(s).
  
$ $CRS_HOME/bin/crsctl query css votedisk
+
== Contrôle de l’OCR ==
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.  
 
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 :  
 
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)  
+
* 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.  
+
* 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.  
 
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
 
  
 +
=== Obtenir les infos de l’OCR ===
 
Les infos de l’OCR s’obtiennent avec la commande ocrcheck.  
 
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
  
$ $CRS_HOME/bin/ocrcheck
+
=== Exporter et importer l’OCR ===
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.  
 
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.  
 
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  
+
* Export de l’OCR  
 
+
$ $CRS_HOME/bin/ocrconfig -export export_File.dmp -s online  
$ $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.  
-- 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.  
- Import de l’OCR  
+
# $CRS_HOME/bin/ocrconfig --import export_File.dmp  
 
 
-- Eventuellement restaurer/recrer la partition, et ou le fichier.  
 
# $CRS_HOME/bin/ocrconfig --import export_File.dmp  
 
Sauvegarder à froid l’OCR
 
  
 +
* Sauvegarder à froid l’OCR
 
La sauvegarde à froid de l’OCR, se réalise simplement :  
 
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 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 :
+
** 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
+
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

Version actuelle datée du 11 février 2011 à 10:57

Sommaire

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).

OptionParameter Setting
Try each address, in order, until one succeedsFAILOVER=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 reachedSOURCE_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