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 ...
随机推荐
- python数据分析笔记中panda(2)
1 将手机号码分开为运营商,地区和号码段 from pandas import read_csv; df = read_csv("H:\\pythonCode\\4.6\\data.csv& ...
- C#项目中一些文件类型说明
designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作 (在函数InitializeComponent()中)VS2003以前都把这部分代码放到窗体的cs文件中,由于这 ...
- Fitnesse 之 Script Table
在表中每一行代表一个执行脚本. 第一行中的Script关键字表明表格类型,后面紧跟着类名(Fixture)和构造函数中的参数.在一个测试页中如果没有再指定其它Fixture,将一直沿用上一个Fixtu ...
- 如何用纯js做一个大富翁游戏
下面这张是效果图: 先立个flag,一个星期内把这个坑填了
- Swift 4.0 中的 open,public,internal,fileprivate,private
1.private private访问级别所修饰的属性或者方法只能在当前类里访问. 2.fileprivate fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问. ...
- Codeforces 744C【DFS】
题意: 给你一幅图,然后有几个特殊点 和不特殊点,给你一些已经连了的边,在保证特殊点不能连的前提下,问最多还能添几条边,双向边 思路: 简单题,就是一个特殊点就是一个集合,然后搜一下,最后把还有没连的 ...
- 着色语言(Shader Language)
摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...
- 解决element 照片墙上传时回显问题
1.先看看样式: <el-upload class="imgList" action="1165165" list-type="picture- ...
- (十三)SpringBoot 发送E-mail
一:添加mail依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...
- Validation(2)
站在巨人的肩膀上 spring注解式参数校验 2016年06月15日 15:42:47 God_Ming 阅读数:57021 标签: springhibernatevalidator 更多 个人分类: ...