11gR2新特性---Gpnp守護程式

wei-xh發表於2015-08-13

在這篇文章中,我們會對11gR2 新的守護程式(資源名稱ora.gpnpd)進行介紹,其中包含的gpnp的功能,啟動順序和基本的診斷方法。 


我們知道,在10gR211gR1的版本中,當啟動叢集的時候,所有的配置資訊都要從OCR進行讀取,而OCR有存放在共享記憶體中,這樣做實際上並不是很好,因為我們相當於把叢集所有的配置資訊都存放到了共享儲存上,而一旦某個節點對共享儲存的訪問出現了問題,這個節點就不能加入叢集,對叢集的影響是很大的,所以,從11gR2開始,GI(Grid Infrastructure) 開始把叢集的配置資訊進行本地化,例如:
OLR
gpnp profile 被引入。隨著我們將叢集中重要的資訊分別存放到了各個節點,我們也會發現,從11gR2開始,如果OCR出現了問題,僅僅是某些叢集的資源(由CRSD管理的資源)會出現問題,而叢集(cssd層面)仍然可以正常執行。


接下來,我們對gpnp profile gpnpd守護程式進行一些介紹。首先,gpnp profile(這是個xml檔案,而對於gpnpwallet檔案,我們並不做過多的介紹)用於存放構建叢集的bootstrap 資訊,或者可以稱為構建叢集的最基本的資訊,其中包括,叢集名稱,叢集GUID, ASM discovery string, 公網和私網資訊等等。所以,當我們在啟動叢集的某一個節點時,需要讀取這個檔案(預設檔名為<gi_home>/gpnp/<node_name>/profiles/peer/profile.xml,從而獲得構建叢集的基本資訊。另外,由於這個檔案中儲存的是整個叢集的基本資訊,所以這個檔案在所有節點之間都應該是相同的。同時,我們還需要一個守護程式,也就是gpnpd.bin(資源名為 ora.gpnpd) 來對gpnp profile 進行維護。舉個例子,一個3節點的叢集,其中節點3由於一些問題暫時沒有啟動,而在此期間,叢集的私網配置發生了改變,之後,節點3啟動,在啟動的過程中,節點3gpnpd程式需要和其他節點的gpnpd程式通訊,獲得最新版本的gpnp profile


下面,我們對 gpnpd守護程式的功能進行一些介紹。


1. 這個程式是由ohasd oraagent 負責管理的。


2. 透過gpnp wallet檔案進行驗證並負責讀取gpnp prfofile。當然,如果gpnpd發現本地的gpnp profile 無法讀取,會嘗試從OLR的資訊中重建gpnp profile


3. gpnp profile的客戶(例如ocssd.bin)釋出資訊。


4. 發現叢集中其他節點的gpnpd 守護程式,如果有需要,透過mdns 同步在節點間同步gpnp profile


5. 如果叢集的配置發生改變,有必要的話,修改gpnp profile.


接下來,我們透過啟動叢集過程中的一段gpnpd.log來對以上的內容進行進一步的瞭解。


2013-07-26 21:31:44.208: [ default][4143449792]gpnpd
START pid=<xxxx> Oracle Grid Plug-and-Play Daemon <<<<<< gpnpd.bin 
守護程式被啟動。


……


2013-07-26 21:31:45.234: [ GPNP][4143449792]clsgpnpkwf_initwfloc: [at
clsgpnpkwf.c:399] Using FS Wallet Location : <gi_home>/gpnp/<node_name>/wallets/peer/
<<<<<<<<<< gpnp
 wallet 檔案被訪問


……


2013-07-26 21:31:45.349: [ default][4143449792]GPNPD
started on node XXXXX.


2013-07-26 21:31:45.350: [ GPNP][4143449792]clsgpnpd_MainWork: [at
clsgpnpd.c:4836] --- Local best profile:


2013-07-26 21:31:45.350: [ GPNP][4143449792]clsgpnpd_MainWork:
<?xml version="1.0"
encoding="UTF-8"?><gpnp:GPnP-Profile Version[cont]


……


2013-07-26 21:31:45.350: [ GPNP][4143449792]clsgpnpd_MainWork:
usterName="XXXXXX"
PALocation=""><gpnp:Network-Profile><[cont]


2013-07-26 21:31:45.351: [ GPNP][4143449792]clsgpnpd_MainWork:
gpnp:HostNetwork id="gen" HostName="*"><gpnp:Network
id="net1" I[cont]


2013-07-26 21:31:45.351: [ GPNP][4143449792]clsgpnpd_MainWork:
P="XXX.XXX.XXX.XXX" Adapter="eth1"
Use="cluster_interconnect"/><gpn[cont]


2013-07-26 21:31:45.351: [ GPNP][4143449792]clsgpnpd_MainWork:
p:Network id="net2" IP="XXX.XXX.XXX.XXX "
Adapter="eth0" Use="public[cont]
<<<<<<<<<< gpnp pofile 
被讀取。


……


2013-07-26 21:31:46.162: [ GPNP][4143449792]clsgpnpdRCB: [at
clsgpnpd.c:3933] GPnPD endpoint url "mdns:gpnp._tcp://XXXXX:27230/agent=gpnpd,cname=xxxxx,host=xxxxx,pid=xxxx/gpnpd
h:****** c:*******" successfully advertised with RD <<<<<< gpnpd 
透過mdns釋出了本地節點的endpoint.


2013-07-26 21:31:51.375: [ GPNP][120384416]clsgpnp_profileCallUrlInt:
[at clsgpnp.c:2104] put-profile call to url "tcp://xxxxx:56182" disco
"mdns:service:gpnp._tcp.local.://xxxxxx:56182/agent=gpnpd,cname=xxxxxxxxx,guid=6de9b87c2edadf6fbf4bb1fcf61e2fa0,host=xxxxxxx,pid=xxxxxx/gpnpd
h:****c:****u:6de9b87c2edadf6fbf4bb1fcf61" [f=0 claimed- host:****
cname:****** seq:4 auth:CN=GPnP_peer] <<<<<<<< 
同時,gpnpd也透過mdns,在網路中搜尋其他的節點。如果,網路中有多個叢集(版本為11gR2 或者12c,那麼其他叢集的節點也會被發現,但是,gpnpd會透過叢集的GUID進行區分。


……


2013-07-26 21:32:00.954: [ GPNP][120384416]clsgpnp_profileCallUrlInt:
[at clsgpnp.c:2104] put-profile call to url "tcp://xxxxx:32774" disco
"mdns:service:gpnp._tcp.local.://xxxxxx:32774/agent=gpnpd,cname=xxxxxxxxx,host=xxxxxx,pid=8023/gpnpd
h:*** c:****" [f=0 claimed- host:**** cname:***** seq:4
auth:CN=GPnP_peer] <<<<<<<<< 
叢集的另外一個節點XXXXX被發現,gpnpd 確認是否有必要在兩個節點間同步gpnp profile.


……


2013-07-26 21:32:06.625: [ GPNP][120384416]clsgpnpd_pushThread: [at
clsgpnpd.c:4770] START gpnpd start serving clients after profile updates <<<<<<<<<< push
thread
被啟動。如果需要,這個執行緒負責把本地的gpnp profile傳送給其他節點。


……


2013-07-26 21:32:55.562: [ GPNP][79473568]clsgpnp_ocrDetectThread: [at
clsgpnp0.c:4508] OCR client init SUCCEEDED. OCR shared cache is now available
<<<<< gpnpd
開始監控OCR cache以便在叢集的配置資訊發生改變,而且有必要更新gpnp profile時進行修改。 


最後,我們對和gpnpd相關的問題的診斷進行簡單的描述。


1. 如果問題是本地的gpnp無法啟動,那麼根據gpnp的啟動過程,需要察看。


1.1 Gpnpd pid 檔案是否存在而且可以被訪問


1.2 mdnsd 是否啟動


1.3 gpnp wallet 檔案是否存在,gpnp profile是否能夠被grid 使用者訪問。


1.4 兩個節點之間的網路連線是否正常。


1.5 其他節點的gpnpd.bin 是否正常。因為,在啟動本地gpnpd.bin之後,它需要和叢集其他節點的gpnpd.bin進行通訊,以便確認叢集中最新的gpnp profile


2. gpnpd的問題也會導致其他依賴於gpnpd的資源無法啟動,例如ocssd.bin,這個程式需要訪問gpnp profile獲取叢集的基本資訊,例如 VF的位置,叢集私網資訊等。


3. 如果我們發現問題是gpnp profile中的資訊出現了錯誤,可以使用工具gpnptool 進行修正。


4.對於診斷gpnpd問題所需要的資訊,一般是


4.1 gpnpd.log 這個日誌能夠告訴我們gpnpd 是否被啟動,以及,啟動過程已經到達了哪一步,問題是在哪裡出現的。


4.2 命令”crsctl stat res –t -init”的輸出,它可以告訴我們ora.gpnpd資源的狀態,以及叢集中其他init資源的狀態。


4.3 mdnsd.log, 如果我們發???問題出現在mdns無法發現叢集中的其他節點,那麼,這個檔案很有幫助。


4.4 OSW 報告,它能夠告訴我們OS當時的負載狀況,叢集網路統計資訊等等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1770473/,如需轉載,請註明出處,否則將追究法律責任。

相關文章