首先來看下oracle11g r2進程關系:
gpnp 全稱為grid plug and play,是Oracle 11 gR2 版本集群管理軟件新增的組件。該組件的功能由即npd.bin 守護進程實現的。Oracle 設計gpnp 的目的主要有以下兩點:
目的1:將集群的基本配置信息保存在本地,以便在啟動集群時能夠從本地文件中獲得足夠的信息,而不再需要完全依賴於OCR。
目的2: 通過和mdnsd 進行通信,能夠更加靈活地識別集群中的節點,使集群結構更加靈活,而不再需要從OCR 中獲取節點列表。
gpnp 組件由兩部分構成:gpnp wallet 和gpnp profile。
gpnp wallet
gpnp wallet 的功能是保存需要訪問gpnp profile 文件的客戶簽名信息, 當客戶訪問gpnp profile 時通過wallet 中的簽名信息進行驗證,以確保只有指定的客戶能夠訪問profile 文件。
這部分內容是不需要用戶配置的,在安裝GI 時,Oracle 會自動完成簽名信息的初始化。另外,gpnp 的wallet 文件可以在路徑<GI_home>/gpnp/wallets/peer 下找到。例如:
-rwx—— 1 grid oinstall 6301 Sep 19 11:45 cwallet.sso
gpnp profile
gpnp profile 是gpnp組件的重要部分,它是一個XML 文件,用於保存啟動( bootstrap )集群節點時所需的必要信息。換句話說,當GI 在啟動時,所有必需的信息都保存在gpnp profile中,從某種意思上說 gpnp profile中的信息類似於數據庫bootstrap時所需要的信息。
文件存在 < grid_home>/gpnp/profiles/peer 下:
-rw-r–r– 1 grid oinstall 1890 Oct 12 12:56 profile.xml
接下來查看一下gpnp profile文件具體內容:
通過gpnptool 來獲取gpnp profile內容,[grid@node1.localdomain$]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"?>9oqCcRP6viy+3oPQFv67uN6XAIg=YauI3XibSmhwnekQAUvOw2T6coLFl4UerlHg0YyENFw6rUY3Jo5Q2jcbVObJBNNxn0wKtCSgMUVFgZR9bNhAK/MOgy0x6ifztQKjaTdPdwIueKUQNtM2a8XfNQ+VxjWS98htWgTKL/YpqEHpgEetWv9EF60kc+WrBUpVwSa8pzc=
Success.
1 . ProfileSequence 表示該gpnp profile 的序列號, 該文件每做一次修改, 序列號就會增加1 , 也就是說, 序列號最大的gpnp profile 包含的信息是最新的。
2 . ClusterUid 表示集群的Global ID。從版本12C 開始GI 通過ClusterUid 來唯一標識一個集群。這個Global ID 是在安裝時隨機產生的, 而且不能修改。
3 . ClusterName 表示集群名稱。在版本12C 之前, GI 通過集群名稱來標識集群, 也就是說在同一個子網中不能存在同名的集群。
4 . 即np:Network id=”net1” IP=”* .* . * .* ” Adapter=”eth0” Use=”public” 表示集群的公網信息。選項Use用於區分網絡的用途, 這個選項只能為public 或者cluster_interconnect。
5 . gpnp:Network id=”net2” IP=’* * * *’ Adapter=”eth1 ” Use=”cluster_ interconnect” 表示集群的私網信息。選項id 表示網絡資源的名稱;選項IP指定子網信息;選項Adapter為網卡信息。
6 . orcl:CSS-Profile id=”css ” DiscoveryString=”+asm” LeaseDuation=”40。” , 其中id=”css ”表示這部分信息是css需要使用的。DiscoveryString=”+asm ” 表示表決盤( VF)保存的路徑, cssd 在啟動時會到這個路徑下去掃描表決盤, 在這個例子中+asm 表示讀者使用了asm, cssd 會掃描ASM 的disk_string來發現表決盤。LeaseDuration 定義了節點號的租借有效期。
7.orcl:ASM-Profile id=”asm” DiscoveryString=”/dev/asm-*” SPFile=”+DATA/node- cluster/asmparameterfile/registry.253.957185753” , 其中id=”asm ” 表示這部分信息是ASM需要使用的。SPFile指定了ASM實例啟動時需要訪問的SPFile位置。
那么當這些信息發生變化時, Oracle是如何實現信息的同步的呢?
gpnpd是一個多線程的進程, 主要的線程包括:
1 . gpnp主線程( clsgpnpd Main Work):該線程負責完成主要的工作, 例如, 訪問gpnp profile , 對該文件進行讀取。
2 . push 線程( clsgpnpd_pushThread):當本地的gpnp profile發生改變或者需要向遠程節點推送gpnp profile 時, 該線程負責傳輸gpnp profile 。
3 . 派遣線程( clsgpnpd dispatch Thread):該線程負責接收gpnpd收到的各種消息並分派給對應的線程。
4 . OCR線程( clsgpnp ocrDetectThread):該線程在發現OCR中相關的信息發生改變時通知派遣線程。
首先, 本地gpnpd 的派遣線程通知所有遠程節點的派遣線程發生了配置改變;然后, 本地gpnpd 的push 線程將新版本的gpnp profile發送給所有的遠程節點;接着, 遠程節點的派遣線程在收到該消息之后開始接收新版本的gpnp profile 。而當gpnpd被啟動時, 會發生以下的過程。
過程1 : gpnpd 的主線程訪問gpnp profile , 並加載到cache 當中打開。如果本地節點的gpnp profile 已經丟失, gpnpd 可以通過OLR 中的信息重新構建gpnp profile 。
過程2 :派遣線程向集群的所有節點發送消息, 並確認最新版本的gpnp profile 位置。
過程3 :擁有最新版本gpnp profile 的節點向該節點發送信息。
過程4 :本地節點接收到最新版本的gpnp profile 后, 開始向外提供服務。
1 . 啟動集群2014-10-22 21:31:44.208: [default) [4143449792)gpnpd START pid= Oracle Grid
Plug-and-Play Daemon
gpnp 守護進程被啟動。2014-10-22 21:31:45.234: [GPNP) [4143449792)clsgpnpkwf_initwfloc: [at clsgpnpkwf.
c:399) Using FS Wallet Location : /uOl/app/11.2.0.4/grid/gpnp/test/wallets/
peer/
訪問gpnp wallet 文件。2014-10-22 21:31:45.349: [default) [4143449792)GPNPD started on node testl.
2014-10-22 21:31:45.350: [GPNP) [4143449792Jclsgpnpd MainWork: [at clsgpnpd.
c:4836] --- Local best profile:
2014-10-22 21:31:45.350: [GPNP) [4143449792)clsgpnpd MainWork: <?xrnl version=
”1.。”
encoding=
”UTF-8” ?><gpnp:GPnP-Profile Version[cont)
2014-10-22 21: 31: 45. 350: [GPNP) (4143449792) clsgpnpd_MainWork: usterNarne=
”xxxxxx”
PALocation=
””><gpnp:Network-Profile>
2014-10-22 21: 31: 45. 351: [GPNP) [4143449792)clsgpnpd_MainWork: gpnp:HostNetwork
id=
” gen” HostNarne=
” *”><gpnp:Network id=”net l” !(cont)
2014-10-22 21: 31: 45. 351: [GPNP) [4143449792) clsgpnpd_MainWork: P="XXX.XXX.XXX.XXX”
Adapter=
”ethl” Use=
”cluster interconnect”/><gpn[cont)
2014-10-22 21:31:45.351 [GPNP) [4143449792Jclsgpnpd MainWork: p:Network id=
”net2”
IP=”xxx.xxx.xxx.xxx ” Adapter=
”eth。” Use=
”public[cont)
讀取gpnp pofile2014-10-22 21:31:46.162: [GPNP) [4143449792JclsgpnpdRCB: [at clsgpnpd.c:3933)
GPnPD endpoint url ”rndns:gpnp._tcp://XXXXX:27230/agent=gpnpd,cnarne=xxxxx,hos
t=xxxxx,pid=xxxx/gpnpd h:xxxxx c:xxxxxxxx” successfully advertised with RD
gpnpd 通過mdnsd 發布了本地節點的endpoint。2014-10-22 21: 31: 51. 375: [GPNP) (120384416) clsgpnp_profileCallUrlint: [at clsgpnp.
c:2104) put-profile call to url ”tcp://xxxxx:56182” disc。”rndns:service:gpnp._
t c p. l o c a 1.://xxxxxx: 56182/a g e n t=g p n p d, c n a rn e=xxxxxxxxx, g u id=6d e9b87c2e
dadf6fb f 4bblf c f61e2f aO, hos t=xxxxxxx, pi d=xxxxxx/gpnpd h:x xxxx c:x xxxxxu:6de9b87c2edadf6fbf4bblfcf61"[f=O claimed- host:xxxxx cname:xxxxxx seq:4 auth:CN=GPnP_peer]
gpnpd 也通過mdnsd 在網絡中搜索其他的節點。2014-10-22 21: 32: 00. 954: [GPNP] (120384416] clsgpnp_profileCallUrlint: [at clsgpnp.
c:2104] put-profile call to url ” tcp://xxxxx:32774” disc。” mdns:serv1.ce:gpnp.
tcp.local.://xxxxxx:32774/agent=gpnpd,cname=xxxxxxxxx,host=xxxxxx,pid=8023/
gpnpd h: XXXXXXX C: XXXXXX
” [f=O claimed- host:xxxxxxx cname:xxxxxxx seq:4
auth:CN=GPnP peer]
集群的另外一個節點被發現, gpnpd 確認是否有必要在兩個節點之間同步gpnp profile。2014-10-22 21:32:06.625: [GPNP] [120384416]clsgpnpd_pushThread: [at clsgpnpd.
c:4770] START gpnpd start serving cl工ents after profile updates
push 線程被啟動, 這個線程負責把本地的gpnp profile 發送給其他節點。2014-10-22 21:32:55.562: [GPNP] [79473568]clsgpnp_ocrDetectThread: [at clsgpnpO.
c:4508] OCR client init SUCCEEDED. OCR shared cache is now available
gpnpd 開始監控OCR cache, 以便在集群的配置信息發生改變且有必要更新gpnp profile時進行修改。
2 . 集群配置信息發生改變
使用下面的命令添加新的集群公網信息
[root@t e s t 2 ~ ]# /u01/app/11.2.0.4/grid/bin/oifcfg setif -global
eth4/. *.0:public
查看本地節點的gpnpd.log
[root@test2~]# /u01/app/11.2.0.4/grid/bin/oifcfg getifethO *.*.*.O global public
ethl *.*.*.0 global cluster interconnect
eth4 *.*.*.0 global public
本地節點的gpnpd 發現了有新版本的gpnp profile 需要共享。2014-10-29 13:24:58 363: [GPNP] [3025607568]clsgpnpd_reconcile: [at clsgpnpd.
c: 254 7] --- New Local best profile in effect from shared:
profile 的sequence 被增加了12014-10-29 13:24:58.363: [GPNP] [3025607568]clsgpnpd reconcile: p://www.grid-pnp.org/2005/ 11/gpnp-profile gpnp-profile. xsd” Prof[cont]2014-10-29 13:24:58.363: [GPNP] [3025607568]clsgpnpd reconcile: ileSequence=” 10”ClusterUid=” 7d414c4a930cdfc4ff23e150c9acd5e。” C[cont]
新增的網絡資源net3 被加入到了gpnp profile 中。2014-10-29 13: 24: 58. 363:[GPNP] (3025607568] clsgpnpd_reconcile: t” /><gpnp:Network
id=” net3” Adapter=” eth4” I P=”*.* . *.0” Use[cont]
2014-10-29 13:24:58.363:[GPNP] [3025607568]clsgpnpd_reconcile: =” publi c” /〉〈/gpnp:HostNetwork>