11gR2新特性---Gpnp守护进程
在这篇文章中,我们会对11gR2 新的守护进程(资源名称ora.gpnpd)进行介绍,其中包含的gpnp的功能,启动顺序和基本的诊断方法。
gpnp全称为grid plug and play,该组件的功能由gpnpd.bin守护进程实现。
我们知道,在10gR2和11gR1的版本中,当启动集群的时候,所有的配置信息都要从OCR进行读取,而OCR有存放在共享内存中,这样做实际上并不是很好,因为我们相当于把集群所有的配置信息都存放到了共享存储上,而一旦某个节点对共享存储的访问出现了问题,这个节点就不能加入集群,对集群的影响是很大的,所以,从11gR2开始,GI(Grid Infrastructure) 开始把集群的配置信息进行本地化,例如:OLR,gpnp profile 被引入。随着我们将集群中重要的信息分别存放到了各个节点,我们也会发现,从11gR2开始,如果OCR出现了问题,仅仅是某些集群的资源(由CRSD管理的资源)会出现问题,而集群(cssd层面)仍然可以正常运行。
接下来,我们对gpnp profile和 gpnpd守护进程进行一些介绍。首先,gpnp profile(这是个xml文件)用于存放构建集群的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。
gpnp wallet的功能是保存需要访问gpnp profile文件的客户签名信息,当客户访问gpnp时通过wallet中的签名信息进行验证,以确保只有指定的客户能够访问profile文件。这部分内容是不需要用户配置的,在安装GI时,Oracle会自动完成签名信息的初始化。另外wallet文件可以在路径<GI_HOME>/gpnp/wallets/peer下找到。
下面,我们对 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当时的负载状况,集群网络统计信息等等。
11gR2新特性---Gpnp守护进程的更多相关文章
- 11gR2新特性---gipc守护进程
在这篇文章中,我们会对11gR2 新的守护进程gipcd(资源名称ora.gipcd)进行介绍,其中包括gipc的功能,启动顺序和一些基本的测试. 我们知道,对于oracle集群来说,集群私网是非常重 ...
- 11gR2 新特性: Rebootless Restart
众所周知,当集群出现问题时,例如某个节点丢失网络心跳,或者不能够访问表决盘,或者节点出现了严重的性能问题等,CRS会选择将某个节点的OS 重启,以便保证集群的一致性.当然,大部分的重启都是由CRS的核 ...
- Oracle 11gR2 RAC 新特性说明
最近接触了一下Oracle 11g R2 的RAC,发现变化很大. 所以在自己动手做实验之前还是先研究下它的新特性比较好. 一. 官网介绍 先看一下Oracle 的官网文档里对RAC 新特性的一 ...
- Linux进程学习(孤儿进程和守护进程)
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...
- linux 守护进程编程
概述: Daemon运行在后台也称作"后台服务进程". 它是没有控制终端与之相连的进程.它独立于控制终端.通常周期的执行某种任务. 守护进程脱离终端是为了避免进程在执行过程中的信息 ...
- linux C守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服 ...
- Linux进程学习 - 孤儿进程和守护进程
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如 ...
- 【APUE】【转】守护进程编写
http://blog.csdn.net/zg_hover/article/details/2553321 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务 ...
- Red Hat Enterprise Linux 7.x新特性
Red Hat Enterprise Linux 7.x新特性 RHEL7新特性简介 1. RHEL7目前支持架构 64-bit AMD.64-bit Intel.IBM POWER.IBM ...
随机推荐
- g2o扩展,然后重新编译生成新库。
orb作者有g2o扩展,g2o原作者也有g2o扩展,等各项基本功扎实以后,考虑把他们整合在一起,再加上高博扩展的g2o,统一cmake,make,然后能make install 正常使用,就最好了.
- 对比<input type="text" id="">和<asp:TextBox runat="server" ID="">
首先这两个都是对应文本输入框形式: <input type="text"class="form-control"id="txt_add_pro_ ...
- UVaLive 6853 Concert Tour (DP)
题意:给定 n 个城市,m 个月,表示要在这 n 个城市连续 m 个月开演唱会,然后给定每个月在每个城市开演唱会能获得的利润,然后就是演唱会在不同城市之间调动所要的费用, 问你,怎么安排这 n 个演唱 ...
- Python 3.x 的一些注意事项
1. reload 被更改 需要 在console执行 from imp import reload 才能调用CT 同时,如果py文件是位于主文件夹深部的位置,可以这么做: import ComicT ...
- rsync 同步的艺术
rsync是类unix系统下的数据镜像备份工具,可以提供快速的增量文件传输. rsync 也可用于本机传输,如: # rsync -v mysql--linux-glibc2.-x86_64.tar. ...
- Phpstorm建立连接Wampserver的数据库
phpstorm是一款php集成开发环境软件,集成了很多功能,不但有强大的代码编辑及调试功能,还能连接数据库.本文写的就是如何用phpstorm来建立访问wampserver数据库,查询输出数据,方便 ...
- app发布证书、真机调试证书、测试证书、推送证书详细过程
原文网址: http://www.cnblogs.com/cxbblog/p/4028159.html 一:发布证书 遵旨:哪个开发者的哪台电脑要发布哪个app (这句话可以多读几遍) 通过上边的遵旨 ...
- [!] No `Podfile' found in the project directory.
1.cd ios/ 2.vim Podfile(创建Podfile)且输入内容 source'https://github.com/CocoaPods/Specs.git'platform:ios,' ...
- MongoDB 删除数据
删除mongodb集合中的数据可以使用remove()函数.remove()函数可以接受一个查询文档作为可选参数来有选择性的删除符合条件的文档.remove()函数不会删除集合本身,同时,原有的索引也 ...
- GYM 101673E(暴搜预处理)
1.不会超过500个不同的串-- 2.样例没给has到has是怎么样的,实测是true. 3.记忆化别剪错枝就好,嘤嘤嘤-- const int maxn = 505 + 5; int n, m, t ...