What is GPnP profile and Why it is needed?
In Oracle 11g R2 RAC, we can store OCR and Voting disk in ASM, but clusterware needs OCR and Voting disk to start CRSD and CSSD process but point is, both OCR and Voting disk are stored in ASM, which itself is a resource for the nodes that means CRSD and CSSD process needs the OCR and Voting file before the ASM startup. So the question arise ” how the clusterware will start?”, we shall find the answer of this question in this same document, just wait..
To resolve this issue Oracle introduced two new node specific files OLR & GPnP, in Oracle 11g R2.
Now If we talk about GPnP profile, This GPnP profile is a new feature included in Oracle 11g R2.The GPnP profile is a small XML file located in
$GRID_HOME/gpnp//profiles/peer with name profile.xml.
Each node of the cluster maintains a local copy of this profile and is maintained by GPnP daemon along with mdns daemon . GPnP deamon ensures the synchronization of GPnP profile across all the nodes in the cluster and GPnP profile is used by clusterware to establish the correct global personality of a node. it cannot be stored on ASM as it is required prior to start of ASM. Hence, it is stored locally on each node and is kept synchronized across all the nodes by GPnPd.
Local copy of Gpnp profile is stored under <GRID_HOME/gpnp/<hostname>/profiles/peer as profile.xml
How does GPnP Profile used ?:
When a node of an Oracle Clusterware cluster restarts, OHASD is started by platform-specific means, OHASD has access to the OLR (Oracle Local Registry) stored on the local file system. OLR provides needed data to complete OHASD initialization. OHASD brings up GPnP Daemon and CSS Daemon. CSS Daemon has access to the GPNP Profile stored on the local file system. The information regarding voting disk is on ASM , is read from GPnP profile i.e.
We can even read voting disk by using kfed utility ,even if ASM is not up.
In next step, the clusterware checks whether all the nodes have the updated GPnP profile and the nodes joins the cluster based on the GPnP configuration . Whenever a node is started or added to the cluster, the clusterware software on the starting node starts a GPnP agent and perform following task.
- If the node is already part of the cluster, the GPnP agent reads the existing profile on that node.
- If the node is being added to the cluster, GPnP agent locates agent on another existing node using multicast protocol (provided by mDNS) and gets the profile from other node’s GPnP agent.
The Voting Files locations on ASM Disks are accessed by CSSD with well-known pointers in the ASM Disk headers and CSSD is able to complete initialization and start or join an existing cluster.
Now OHASD starts an ASM instance and ASM can now operate with initialized and operating CSSD.
With, an ASM instance running and its Diskgroup mounted, access to Clusterware’s OCR is available to CRSD (CRSD needs to read OCR to startup various resources on the node and hence update it, as status of resources changes )Now OHASD starts CRSD with access to the OCR in an ASM Diskgroup and thus Clusterware completes initialization and brings up other services under its control.
The ASM instance uses special code to locate the contents of the ASM SPFILE , which is stored in a Diskgroup.
Next. Since OCR is also on ASM, location of ASM spfile should be known. The order of searching the ASM SPfile is
- GPnP profile
- ORACLE_HOME/dbs/spfile
- ORACLE_HOME/dbs/init
ASM spfile is stored in ASM. But to start ASM, we’ll need spfile. Oracle know spfile location from GPnP profile & it reads spfile flag from underlying disk(s) and then starts the ASM.
Thus with the use of GPnP profile stores several information. GPnP profile information along with the information in the OLR have enough information , that have sufficient to automate several tasks or eased for the administrators and also the dependency on OCR is gradually reduced but not eliminated.
Who and When GPNP PROFILE UPDATES? :
GPnP daemon replicates changes to the profile during
- installation
- system boot
- when system updated using standard cluster tools
Profile is automatically updated Whenever changes are made to a cluster during installation and with configuration tools like
- oifcfg (Change network),
- crsctl (change location of voting disk),
- asmcmd (change ASM_DISKSTRING, spfile location) etc.
What Information GPnP Profile Contains:
GPnP profile defines a node’s metadata about:
- Cluster Name
- Network interfaces for public and private interconnect
- ASM server parameter file Location and ASM Diskstring etc.
- CSS voting disks Discovery String
- Digital Signature Information
it contains digital signature information of the provisioning authority because the profile is security sensitive. It might identify the storage to be used as the root partition of a machine. This profile is protected by a wallet against modification. As in my case the WALLET information can be found in : /u01/app/11.2.0/grid/gpnp/paw-racnode1/wallets/peer “OR” /u01/app/11.2.0/grid/gpnp/wallets/peer .
If you have to manually modify the profile, it must first be unsigned with $GRID_HOME/bin/gpnptool, modified, and then signed again with the same utility, however there is a very slight chance you would ever be required to do so.
Now we can use the gpnptool with get option to dump this xml file into standard output. Below is the formatted output .
[grid@paw-racnode1 peer]$ pwd
/u01/app/11.2.0/grid/gpnp/paw-racnode1/profiles/peer
=================
gpnptool edit -p=/u01/app/12.1.0.2/grid/gpnp/<hostname>profiles/peer/profile.xml -o=/u01/app/12.1.0.2/grid/gpnp/<hostname>profiles/peer/profile.xml -ovr -prf_sq=2 -net1:net_use=public -net1:net_ip=10.232.71.0 -net1:net_ada=ipmp0
gpnptool sign -p=/u01/app/12.1.0.2/grid/gpnp/<hostname>profiles/peer/profile.xml -o=/u01/app/12.1.0.2/grid/gpnp/<hostname>profiles/peer/profile.xml -ovr -w= -net1:net_ada=ipmp0
[grid@paw-racnode1 peer]$ gpnptool get
Warning: some command line parameters were defaulted. Resulting command line:
/u01/app/11.2.0/grid/bin/gpnptool.bin get -o-
<?xml version=”1.0″ encoding=”UTF-8″?><gpnp:GPnP-Profile Version=”1.0″ xmlns=”http://www.grid-pnp.org/2005/11/gpnp-profile” xmlns:gpnp=”http://www.grid-pnp.org/2005/11/gpnp-profile” xmlns:orcl=”http://www.oracle.com/gpnp/2005/11/gpnp-profile” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.grid-pnp.org/2005/11/gpnp-profile gpnp-profile.xsd” ProfileSequence=”5″ ClusterUId=”1c12005940a3efa8bf244ccd47060927″ ClusterName=”paw-rac-cluster“ PALocation=””><gpnp:Network-Profile><gpnp:HostNetwork id=”gen” HostName=”*”><gpnp:Network id=”net1″ IP=”192.168.75.0″ Adapter=”eth0″ Use=”public”/><gpnp:Network id=”net2″ IP=”10.0.0.0″ Adapter=”eth1″ Use=”cluster_interconnect”/></gpnp:HostNetwork></gpnp:Network-Profile><orcl:CSS-Profile id=”css” DiscoveryString=”+asm” LeaseDuration=”400″/><orcl:ASM-Profile id=”asm” DiscoveryString=”/dev/oracleasm/disks” SPFile=”+DATA/paw-rac-cluster/asmparameterfile/registry.253.919259819″/><ds:Signature xmlns:ds=”http://www.w3.org/2000/09/xmldsig#”><ds:SignedInfo><ds:CanonicalizationMethod Algorithm=”http://www.w3.org/2001/10/xml-exc-c14n#”/><ds:SignatureMethod Algorithm=”http://www.w3.org/2000/09/xmldsig#rsa-sha1″/><ds:Reference URI=””><ds:Transforms><ds:Transform Algorithm=”http://www.w3.org/2000/09/xmldsig#enveloped-signature”/><ds:Transform Algorithm=”http://www.w3.org/2001/10/xml-exc-c14n#”> <InclusiveNamespaces xmlns=”http://www.w3.org/2001/10/xml-exc-c14n#” PrefixList=”gpnp orcl xsi”/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm=”http://www.w3.org/2000/09/xmldsig#sha1″/><ds:DigestValue>HIz8dOjUIFB32YPkmXW2HMVazoY=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>L6GOD0rB03Hp+NoKVcIHb9/Rp3xznBKpUJGfixN/27Qo6IL8/4HkjSnzsbHf1IuK1SQfqV5624tygB0x9HJfVcW+k6E6cQWwAgZOzpPR3ltctD7XeikkXtt5TOWQ6boMvCKJ5mOwzGzuj4S/qDu7lWPBHM9EPzHAEn/8NOlDcDo=</ds:SignatureValue></ds:Signature></gpnp:GPnP-Profile>
Success.
[grid@paw-racnode1 peer]$ gpnptool show Mode="remote"
[grid@paw-racnode1 peer]$ gpnptool getpval -asm_spf
Warning: some command line parameters were defaulted. Resulting command line:
/u01/app/11.2.0/grid/bin/gpnptool.bin getpval -asm_spf -p=profile.xml -o-
+DATA/paw-rac-cluster/asmparameterfile/registry.253.919259819
[grid@paw-racnode1 peer]$ gpnptool getpval -asm_dis
Warning: some command line parameters were defaulted. Resulting command line:
/u01/app/11.2.0/grid/bin/gpnptool.bin getpval -asm_dis -p=profile.xml -o-
/dev/oracleasm/disks
[grid@paw-racnode1 peer]$ gpnptool find
Found 2 instances of service ‘gpnp’.
mdns:service:gpnp._tcp.local.://paw-racnode2:64098/agent=gpnpd,cname=paw-rac-cluster,host=paw-racnode2,pid=6444/gpnpd h:paw-racnode2 c:paw-rac-cluster
mdns:service:gpnp._tcp.local.://paw-racnode1:55790/agent=gpnpd,cname=paw-rac-cluster,host=paw-racnode1,pid=6677/gpnpd h:paw-racnode1 c:paw-rac-cluster
[grid@racp1vm1 ~]$ gpnptool get -o- | xmllint --format - | grep SPFile
Success.
<orcl:ASM-Profile id="asm" DiscoveryString="" SPFile="+CRS_DG/ws-dbi-scan1/ASMPARAMETERFILE/registry.253.905527691" Mode="remote"/>
Fix a wrong entry profile.xml and redistribute the fixed profile with gpnptool put
When gpnpd tries to come up, it looks for the “best profile” from these 3 locations (olr,ocr,profile.xml). And my understanding of the “best profile” is the profile with the highest ProfileSequence). And this “best profile” then overwrites the other cached lower versions.
Assume we have a wrong ASM SPFILE entry in our current profile.xml
Current status:
profile.xml
ProfileSequence="10"
SPFile="$GRID_HOME/dbs/spfileCopyASM_nogo" <--- wrong
Copy the profile to profile.bak and remove the oracle signature
[grid@grac41 peer]$ gpnptool unsign -p=profile.bak
Warning: some command line parameters were defaulted. Resulting command line:
/u01/app/11204/grid/bin/gpnptool.bin unsign -p=profile.bak -o-
<?xml version="1.0" encoding="UTF-8"?><gpnp:GPnP-Profile Version="1.0" xmlns="http://www.grid-pnp.org/2005/11/gpnp-profile"
xmlns:gpnp="http://www.grid-pnp.org/2005/11/gpnp-profile" xmlns:orcl="http://www.oracle.com/gpnp/2005/11/gpnp-profile"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.grid-pnp.org/2005/11/gpnp-profile gpnp-profile.xsd"
ProfileSequence="10" ClusterUId="09a8e930abf56f66bfbdb0b7c915cfa8" ClusterName="grac4" PALocation=""><gpnp:Network-Profile>
<gpnp:HostNetwork id="gen" HostName="*"><gpnp:Network id="net1" IP="192.168.1.0" Adapter="eth1" Use="public"/>
<gpnp:Network id="net2" IP="192.168.2.0" Adapter="eth2" Use="cluster_interconnect"/></gpnp:HostNetwork></gpnp:Network-Profile>
<orcl:CSS-Profile id="css" DiscoveryString="+asm" LeaseDuration="400"/><orcl:ASM-Profile id="asm" DiscoveryString="/dev/asm*,/dev/oracleasm/disks/*"
SPFile="$GRID_HOME/dbs/spfileCopyASM_nogo"/></gpnp:GPnP-Profile>
Success.
--> Current ProfileSequence="10"
Update SPFILE in profile.bak and increase ProfileSequence to 11
[grid@grac41 peer]$ gpnptool edit -asm:asm_spf='+OCR/grac4/asmparameterfile/spfileCopyASM.ora' -p=profile.bak -o=profile.bak -ovr -prf_sq=11
Resulting profile written to "profile.bak".
Success.
Verify profile.bak and check whether ASM SPFILE location is valid
ProfileSequence="11"
SPFile="+OCR/grac4/asmparameterfile/spfileCopyASM.ora"
[grid@grac41 peer]$ asmcmd ls -l +OCR/grac4/asmparameterfile/spfileCopyASM.ora
Type Redund Striped Time Sys Name
N spfileCopyASM.ora => +OCR/grac4/asmparameterfile/REGISTRY.253.842605053
$ gpnptool sign -p=profile.bak -w=file:/u01/app/11204/grid/gpnp/grac41/wallets/peer -o=profile.new
Resulting profile written to "profile.new".
Success.
Redistribute profile.xml
[grid@grac41 peer]$ gpnptool put -p=$GRID_HOME/gpnp/grac41/profiles/peer/profile.new
Success.
Verfy GPND profile on all Nodes ( check for ProfileSequence and SPFile )
$ gpnptool rget
Warning: some command line parameters were defaulted. Resulting command line:
/u01/app/11204/grid/bin/gpnptool.bin rget -o-
Found 3 gpnp service instance(s) to rget profile from.
RGET from tcp://grac41:47588 (mdns:service:gpnp._tcp.local.://grac41:47588/agent=gpnpd,cname=grac4,host=grac41,pid=27693/gpnpd h:grac41 c:grac4):
<?xml version="1.0" encoding="UTF-8"?><gpnp:GPnP-Profile Version="1.0" xmlns="http://www.grid-pnp.org/2005/11/gpnp-profile"
xmlns:gpnp="http://www.grid-pnp.org/2005/11/gpnp-profile" xmlns:orcl="http://www.oracle.com/gpnp/2005/11/gpnp-profile"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.grid-pnp.org/2005/11/gpnp-profile gpnp-profile.xsd"
ProfileSequence="11" ClusterUId="09a8e930abf56f66bfbdb0b7c915cfa8" ClusterName="grac4" PALocation="">
<gpnp:Network-Profile><gpnp:HostNetwork id="gen" HostName="*"><gpnp:Network id="net1" IP="192.168.1.0" Adapter="eth1" Use="public"/>
<gpnp:Network id="net2" IP="192.168.2.0" Adapter="eth2" Use="cluster_interconnect"/></gpnp:HostNetwork></gpnp:Network-Profile>
<orcl:CSS-Profile id="css" DiscoveryString="+asm" LeaseDuration="400"/><orcl:ASM-Profile id="asm" DiscoveryString="/dev/asm*,/dev/oracleasm/disks/*"
SPFile="+OCR/grac4/asmparameterfile/spfileCopyASM.ora"/><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI=""><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="gpnp orcl xsi"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>ALIJdwPKQGRB8BKcoiUsxzXw1xw=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>aV1ueSkHquo2P0MN1HnOLKRXTyQljz8MMlAo+WhRVMlrDQev2DketkJ+H00aTFUXyX9A05VVyNWD9ZsglDQqk/13joh1Qz5LjtvQ3Ei5V9FhGnUUofY4MKduT89Cbic5kql0xvUlvsapez7utaq+5ecYJDLBCrH15c/WBnsOtm8=</ds:SignatureValue></ds:Signature></gpnp:GPnP-Profile>
Success.
RGET from tcp://grac43:55100 (mdns:service:gpnp._tcp.local.://grac43:55100/agent=gpnpd,cname=grac4,host=grac43,pid=5193/gpnpd h:grac43 c:grac4):
<?xml version="1.0" encoding="UTF-8"?><gpnp:GPnP-Profile Version="1.0" ...
ProfileSequence="11"
..
SPFile="+OCR/grac4/asmparameterfile/spfileCopyASM.ora"/>
...
RGET from tcp://grac42:37261 (mdns:service:gpnp._tcp.local.://grac42:37261/agent=gpnpd,cname=grac4,host=grac42,pid=4974/gpnpd h:grac42 c:grac4):
<?xml version="1.0" encoding="UTF-8"?><gpnp:GPnP-Profile Version="1.0" ...
ProfileSequence="11"
..
SPFile="+OCR/grac4/asmparameterfile/spfileCopyASM.ora"/> ...