11gR2新特性---Gpnp守护进程

在这篇文章中,我们会对11gR2 新的守护进程(资源名称ora.gpnpd)进行介绍,其中包含的gpnp的功能,启动顺序和基本的诊断方法。

我们知道,在10gR2和11gR1的版本中,当启动集群的时候,所有的配置信息都要从OCR进行读取,而OCR有存放在共享内存中,这样做实际上并不是很好,因为我们相当于把集群所有的配置信息都存放到了共享存储上,而一旦某个节点对共享存储的访问出现了问题,这个节点就不能加入集群,对集群的影响是很大的,所以,从11gR2开始,GI(Grid Infrastructure) 开始把集群的配置信息进行本地化,例如:
OLR,gpnp profile 被引入。随着我们将集群中重要的信息分别存放到了各个节点,我们也会发现,从11gR2开始,如果OCR出现了问题,仅仅是某些集群的资源(由CRSD管理的资源)会出现问题,而集群(cssd层面)仍然可以正常运行。

接下来,我们对gpnp profile和 gpnpd守护进程进行一些介绍。首先,gpnp profile(这是个xml文件,而对于gpnp的 wallet文件,我们并不做过多的介绍)用于存放构建集群的bootstrap 信息,或者可以称为构建集群的最基本的信息,其中包括,集群名称,集群GUID, ASM discovery string, 公网和私网信息等等。所以,当我们在启动集群的某一个节点时,需要读取这个文件(默认文件名为<gi_home>/gpnp/<node_name>/profiles/peer/profile.xml),从而获得构建集群的基本信息。另外,由于这个文件中保存的是整个集群的基本信息,所以这个文件在所有节点之间都应该是相同的。同时,我们还需要一个守护进程,也就是gpnpd.bin(资源名为 ora.gpnpd) 来对gpnp profile 进行维护。举个例子,一个3节点的集群,其中节点3由于一些问题暂时没有启动,而在此期间,集群的私网配置发生了改变,之后,节点3启动,在启动的过程中,节点3的gpnpd进程需要和其他节点的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 守护进程被启动。

扫描二维码关注公众号,回复: 924004 查看本文章

……

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当时的负载状况,集群网络统计信息等等。

希望通过以上的介绍能够让大家了解11gR2 GI 中新的守护进程gpnpd的一些认识,并在工作中遇到相关的问题时,有所帮助。

来源:https://blogs.oracle.com/database4cn/11gr2-gpnp  By: Allen Gao

猜你喜欢

转载自blog.csdn.net/qq_31943653/article/details/77504537