Exadata : Reconfiguration de la couche GRID 12cR1 sur EXADATA

Dans cet article, je vais vous montrer comment dé-configurer/reconfigurer la couche Grid Infrastructure 12.1 sur Exadata.

La dé-configuration et la reconfiguration du cluster entier reconstruisent l’OCR et Voting Disks.
Les ressources utilisateurs (base de données, instance, service, listener, etc.) devront être rajoutées manuellement au cluster une fois la reconfiguration terminée.

Pourquoi la dé-configuration est-elle nécessaire ?

La dé-configuration est nécessaire lorsque :

  • L’OCR est corrompu sans aucune sauvegarde
  • On souhaite changer le séquence number des instances ASM (+ASM1, +ASM2 , etc.)
  • $GRID_HOME est intact, car la dé-configuration ne corrigera pas la corruption

Vérifier l’état des nœuds :

Avant de dé-configurer un nœud, il faut s’assurer qu’il n’est pas épinglé :

/u01/app/12.1.0.2/grid/bin/olsnodes -s -t
racnode1 Inactive Pinned
racnode2 Active Unpinned
racnode3 Active Unpinned
racnode4 Active Unpinned

Si le nœud est épinglé, vous devriez le détacher en premier, en tant que root :

/u01/app/12.1.0.2/grid/bin/crsctl unpin css -n racnode1

Collecter les ressources du cluster :

Avant de dé-configurer, vous devez collecter les éléments suivants en tant qu’utilisateur grid, afin de générer une liste des ressources utilisateurs à rajouter au cluster une fois la reconfiguration terminée, un exemple des éléments à récupérer :

echo "########### /u01/app/12.1.0.2/grid/bin/crsctl stat res -t ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/crsctl stat res -t >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/crsctl stat res -p ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/crsctl stat res -p >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/crsctl query css votedisk ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/crsctl query css votedisk >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/ocrcheck ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/ocrcheck >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/oifcfg getif ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/oifcfg getif >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/srvctl config nodeapps -a ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/srvctl config nodeapps -a >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/srvctl config scan ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/srvctl config scan >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/srvctl config asm -a ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/srvctl config asm -a >> health_crs.txt

echo "########### /u01/app/12.1.0.2/grid/bin/srvctl config listener -l LISTENER -a ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/srvctl config listener -l LISTENER -a >> health_crs.txt
echo "########### /u01/app/12.1.0.2/grid/bin/srvctl config listener -l LISTENER_IB -a ###########" >> health_crs.txt
/u01/app/12.1.0.2/grid/bin/srvctl config listener -l LISTENER_IB -a >> health_crs.txt

srvctl config database | while read SID ;
do export ORACLE_SID=$SID;
export ORAENV_ASK=NO;
. oraenv;
echo "########### /u01/app/oracle/product/12.1.0.2/dbhome_1/bin/srvctl config database -d $SID -a ###########" >> health_crs.txt
/u01/app/oracle/product/12.1.0.2/dbhome_1/bin/srvctl config database -d $SID -a >> health_crs.txt
done

Si ACFS (ASM Cluster File System) ou bien AFD (ASM Filter Driver) est utilisé, les données ci-dessous doivent être collectées avant de dé-configurer la couche GRID :

uname -a
df -k
lsmod | grep oracle
rpm -qa | grep -i kmod
/u01/app/12.1.0.2/grid/bin/acfsdriverstate supported
/u01/app/12.1.0.2/grid/bin/acfsdriverstate version
/u01/app/12.1.0.2/grid/bin/acfsdriverstate installed
/u01/app/12.1.0.2/grid/bin/acfsdriverstate loaded
/u01/app/12.1.0.2/grid/bin/afddriverstate supported
/u01/app/12.1.0.2/grid/bin/afddriverstate version
/u01/app/12.1.0.2/grid/bin/afddriverstate installed
/u01/app/12.1.0.2/grid/bin/afddriverstate loaded
$ /sbin/acfsutil info fs
/u01/app/12.1.0.2/grid/bin/asmcmd showclustermode
/u01/app/12.1.0.2/grid/bin/asmcmd volinfo --all
/u01/app/12.1.0.2/grid/bin/asmcmd lsdg

Arrêter du cluster GRID

Avant de dé-configurer le cluster, vous devez arrêter le cluster sur tous les nœuds :

crsctl stop cluster -all
crsctl stop crs (sur chaque noeud du cluster)

Dé-configuration de la couche GRID

1. Si l’OCR et Voting Disks ne sont pas dans l’ASM ou si l’OCR et Voting Disks sont sur ASM et qu’il n’y a pas de données utilisateur dans l’OCR et Voting Disks :

Sur tous les nœuds distants, en tant que root :

/u01/app/12.1.0.2/grid/crs/install/rootcrs.sh -deconfig -force -verbose

Une fois la commande ci-dessus est terminée sur les nœuds distants, sur le nœud local, en tant que root:

/u01/app/12.1.0.2/grid/crs/install/rootcrs.sh -deconfig -force -verbose -lastnode

2. Si l’OCR et Voting Disks sont sur ASM et qu’il existe des données utilisateur dans l’OCR et Voting Disks :

Sur tous les nœuds distants, en tant que root :

/u01/app/12.1.0.2/grid/crs/install/rootcrs.sh -deconfig -force -verbose

Une fois la commande ci-dessus terminée sur les nœuds distants, sur le nœud local, en tant que root :

/u01/app/12.1.0.2/grid/crs/install/rootcrs.sh -deconfig -force -verbose -keepdg -lastnode

Sur cet article, je vais traiter le deuxième cas (OCR et Voting Disks sont sur ASM et il existe des données utilisateur dans l’OCR et Voting Disks) :

Création d’un nouveau GRIDDISK

Création d’un nouveau GRIDDISK sur l’ensemble des storage cells de l’exadata :

CREATE GRIDDISK ALL HARDDISK PREFIX=DATAREC1, size=300G

Configuration de la couche GRID 12cR1

Le fichier Grid-racnode1.oracle.com.rsp est auto-généré au moment du déploiement de la couche GRID avec l’outil onecommand, exemple de l’emplacement du fichier « onecommand/linux-x64/WorkDir/Grid-racnode1.oracle.com.rsp »

Un exemple de l’output du fichier rsp généré (vous devez changer tous les occurrences DATA1 en DATAREC1)

oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v12.1.0
ORACLE_HOSTNAME=racnode1.oracle.com
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=all_langs
oracle.install.option=CRS_CONFIG
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/12.1.0.2/grid
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.gpnp.scanName=racnode-scan
oracle.install.crs.config.gpnp.scanPort=1530
oracle.install.crs.config.ClusterType=STANDARD
oracle.install.crs.config.clusterName=racnode-clu
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
oracle.install.crs.config.gpnp.gnsOption=CREATE_NEW_GNS
oracle.install.crs.config.clusterNodes=racnode3.oracle.com:racnode03-vip.oracle.com,racnode4.oracle.com:racnode04-vip.oracle.com
oracle.install.crs.config.networkInterfaceList=bondeth0:192.168.0.0:1,ib0:192.168.240.0:2,ib1:192.168.240.0:2
oracle.install.crs.config.storageOption=LOCAL_ASM_STORAGE
oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL
oracle.install.crs.config.useIPMI=false
oracle.install.asm.SYSASMPassword=We1come$
oracle.install.asm.diskGroup.name=DATA1
oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
oracle.install.crs.config.ignoreDownNodes=false
oracle.install.config.managementOption=NONE
oracle.install.asm.diskGroup.redundancy=HIGH
oracle.install.asm.diskGroup.AUSize=4
oracle.install.asm.monitorPassword=We1come$
[ConfigWizard]
oracle.install.asm.useExistingDiskGroup=false
[ConfigWizard]

Lancer le script config.sh :

/u01/app/12.1.0.2/grid/crs/config/config.sh -silent -responseFile /home/grid/Grid-racnode1.oracle.com.rsp

Exécuter le script root.sh

Le script root.sh doit être lancé sur le premier nœud et attendre la fin de son exécution. Puis vous pouvez le démarrer sur tous les autres nœuds sauf le dernier, attendez qu’il se termine sur tous les nœuds; et enfin l’exécuter sur le dernier nœud.

/u01/app/12.1.0.2/grid/root.sh
#### Vous pouvez rencontrer une erreur de script root.sh sur les noeuds distants (Doc ID 1919825.1) :
CLSRSC-507: The root script cannot proceed on this node <node-n> (Doc ID 1919825.1)
The workaround is to modify /u01/app/12.1.0.2/grid/crs/install/crsutils.pm as following:
sub isOcrKeyExists
return TRUE; <---

Récupérer les diskgroups

Une fois l’installation est terminée, vous devez récupérer les données utilisateurs qui étaient sur les diskgroups DATA1 et RECO1.
En tant que grid :

asmcmd mount DATA1
asmcmd mount RECO1

Démarrer le diskgroup sur les nœuds distants :

srvctl start diskgroup -diskgroup DATA1 -node racnode2,racnode3,racnode4
srvctl start diskgroup -diskgroup RECO1 -node racnode2,racnode3,racnode4

Changer l’emplacement de l’OCR et VOTING DISK

OCR :

/u01/app/12.1.0.2/grid/bin/ocrconfig -add +DATA1
/u01/app/12.1.0.2/grid/bin/ocrconfig -delete +DATAREC1

Voting disk :

/u01/app/12.1.0.2/grid/bin/crsctl replace votedisk +DATA1

Supprimer le diskgroup temporaire

srvctl stop diskgroup -diskgroup DATAREC1
srvctl remove diskgroup -diskgroup DATAREC1

Création de ressources cluster

Quelques exemples de recréation des ressources cluster.

1. Création de la ressource listener infiniband :
En tant que root :

srvctl add network -k 2 -S 192.168.240.0/255.255.255.0/ib0\|ib1
srvctl add vip -n racnode1 -A racnode1-ib-vip/255.255.255.0/ib0\|ib1 -k 2
srvctl add vip -n racnode2 -A racnode2-ib-vip/255.255.255.0/ib0\|ib1 -k 2
srvctl add vip -n racnode3 -A racnode3-ib-vip/255.255.255.0/ib0\|ib1 -k 2
srvctl add vip -n racnode4 -A racnode4-ib-vip/255.255.255.0/ib0\|ib1 -k 2
srvctl start vip -i racnode1-ib-vip
srvctl start vip -i racnode2-ib-vip
srvctl start vip -i racnode3-ib-vip
srvctl start vip -i racnode4-ib-vip
srvctl add scan -scanname racnode-ib-scan.oracle.com -netnum 2

En tant que grid :

srvctl add listener -listener LISTENER_IB -netnum 2 -p 1540
srvctl add scan_listener -netnum 2 -listener listener_ib -p 1541
srvctl start listener -l listener_ib
srvctl start scan_listener -k 2

2. Création de la ressource database :
En tant que oracle :

srvctl add database -d DBTEST -o /u01/app/oracle/product/12.1.0.2/dbhome_1 -dbtype RAC -spfile +DATA1/DBTEST/PARAMETERFILE/spfile.657.970353407 -diskgroup DATA1,RECO1 -pwfile +DATA1/DBTEST/PASSWORD/orapwDBTEST
srvctl add instance -i DBTEST1 -d DBTEST -n racnode1
srvctl add instance -i DBTEST2 -d DBTEST -n racnode2
srvctl add instance -i DBTEST3 -d DBTEST -n racnode3
srvctl add instance -i DBTEST4 -d DBTEST -n racnode4
srvctl start database -d DBTEST
srvctl add service -db DBTEST -service dbtest -netnum 2
srvctl start service -db DBTEST -service dbtest

Objectif atteint !
Vous avez ré-configuré de nouveau la couche GRID 12cR1.