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

本文介绍了Oracle 11gR2版本中新引入的gpnpd守护进程,详细阐述了其功能、启动流程及诊断方法。gpnpd守护进程能够使集群节点在本地保存配置信息,减少对OCR的依赖,提高集群灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

gpnp全称为grid plug and play,该组件的功能由gpnpd.bin守护进程实现。

 
gpnp目的主要有以下两个:
1,将集群的基本配置信息保存在本地,以便在启动集群的时候能够从本地文件中获得足够的信息,而不是需要完全依赖于OCR。
2,通过和mdnsd进行通信,能够更灵活地识别集群中的节点,使集群结构更加灵活,不再需要从OCR中获取节点列表。

我们知道,在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主要线程包括:
gpnp主线程(clsgpnpd_MainWork):该线程主要负责完成主要的工作,例如,访问gpnp prpfile,对该文件进行读取。
push线程(clsgpnpd_pushThread):当本地的gpnp prpfile发生改变或者需要向远程节点推送gpnp profile时,该线程负责传输gpnp profile。
派遣进程(clsgpnpd_dispatchThread):该线程负责接收gpnpd收到的各种消息并分派给对应的线程。
OCR进程(clsgpnpd_ocrDetectThread):该线程在发现OCR中相关的信息发生该表时通知派遣线程。
 
但集群的重要配置信息发生改变时,首先,本地gpnpd派遣线程通知所有远程节点派遣进程发生了配置改变;然后,本地gpnpd的push线程将新版本的gpnp profile发送给所有的远程节点;接着,远程节点的派遣线程在接收到该消息后开始接收新版本的gpnp profile。而当gpnpd被启动时,会发生以下的过程:
1,gpnpd的主线程访问gpnp profile,并加载到cache当中打开。如果本地节点的gpnp prpfile已经丢失,gpnpd可以通过OLR中的信息重新构建gpnp profile。
2,派遣进程向集群的所有节点发送消息,并确定最新版本的gpnp profile位置。
3,拥有最先版本gpnp profile的节点向该节点发送信息。
4,本地节点接收到最新版本的gpnp profile后,开始向外提供服务。
 

下面,我们对 gpnpd守护进程的功能进行一些介绍。


  1. 1. 这个进程是由ohasd 的oraagent 负责管理的。
  2. 2. 通过gpnp 的wallet文件进行验证并负责读取gpnp prfofile。当然,如果gpnpd发现本地的gpnp profile 无法读取,会尝试从OLR的信息中重建gpnp profile。
  3. 3. 对gpnp profile的客户(例如ocssd.bin)发布信息。
  4. 4. 发现集群中其他节点的gpnpd 守护进程,如果有需要,通过mdns 同步在节点间同步gpnp profile。
  5. 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当时的负载状况,集群网络统计信息等等。

 

转载于:https://www.cnblogs.com/liang545621/p/9418046.html

<think>我们正在处理用户关于安装和配置Oracle11g RAC并设置磁盘组的问题。根据提供的引用内容,我们可以总结出以下关键步骤:1.系统环境检查(引用[1])2.安装必要软件包(引用[1]) 3.修改系统参数(引用[1]) 4.增加组、用户和目录(引用[1])5.配置环境变量和互信(引用[1]) 6.配置裸设备(引用[1])或使用ASM(自动存储管理)磁盘组(用户需求)7.安装流程(引用[2]展示了静默安装的部分)8.集群管理(引用[1]和引用[3]有关闭集群和数据库的示例) 用户特别提到了配置磁盘组,因此我们需要重点介绍ASM磁盘组的配置。根据引用[4]和[5],我们知道在RAC环境中,ASM磁盘组是通过多路径设备来配置的,并且需要设置正确的权限(如OWNER="grid",GROUP="asmadmin",MODE="0660")。 步骤概述: 1.系统环境检查:确保所有节点满足安装要求(操作系统版本、内核参数、内存、交换空间等)。 2.安装必要的软件包:根据Oracle文档要求安装所需的软件包。3.修改系统参数:修改内核参数(/etc/sysctl.conf)和用户资源限制(/etc/security/limits.conf)。 4.创建组和用户:创建oinstall、dba、oper、asmadmin等组,以及oracle和grid用户。 5.创建目录并设置权限:创建ORACLE_BASE、GRID_HOME等目录,并设置正确的所有权。6.配置环境变量:为oracle和grid用户设置环境变量(~/.bash_profile)。7.配置SSH互信:确保节点之间可以无密码SSH登录。 8.配置共享存储:为ASM准备共享磁盘(每个节点都能访问),并配置udev规则(如引用[4]所示)确保权限正确。 9.安装GridInfrastructure(集群软件):包括ASM和集群管理。 10.安装Oracle数据库软件。 11.创建数据库和磁盘组。针对磁盘组的配置,在GridInfrastructure安装完成后,我们可以使用ASMCA(ASM配置助手)或SQL*Plus命令来创建磁盘组。 下面详细说明安装步骤:</think>### Oracle 11g RAC 安装步骤及磁盘组配置 #### **一、安装前准备** 1. **系统环境检查** - 确认所有节点操作系统版本(如CentOS 7)和内核参数符合要求[^1] - 检查内存/交换空间:内存 ≥ 4GB,交换空间 ≥ 1.5倍内存 - 禁用防火墙和SELinux: ```bash systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` 2. **安装必要软件包** ```bash yum install -y binutils compat-libstdc++ elfutils-libelf gcc glibc ksh libaio libgcc libstdc++ make sysstat unixODBC unixODBC-devel ``` 3. **修改系统参数** 编辑 `/etc/sysctl.conf`,添加: ```conf kernel.shmall = 4294967296 kernel.shmmax = 68719476736 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 ``` 执行 `sysctl -p` 生效[^1]。 4. **创建用户和组** ```bash groupadd -g 1000 oinstall groupadd -g 1001 dba groupadd -g 1002 oper groupadd -g 1003 asmadmin useradd -u 1000 -g oinstall -G dba,oper,asmadmin oracle useradd -u 1001 -g oinstall -G dba,asmadmin grid ``` 5. **配置目录及权限** ```bash mkdir -p /u01/app/{oracle,grid} chown -R grid:oinstall /u01/app/grid chown -R oracle:oinstall /u01/app/oracle ``` --- #### **二、共享存储配置** 1. **配置ASM磁盘** - 共享磁盘需通过多路径映射(如DM-Multipath) - 配置UDEV规则(示例): ```conf KERNEL=="dm-*", ENV{DM_UUID}=="mpath-36000d31000c7bb0000000000000000ce", NAME="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660" ``` 生效命令:`udevadm control --reload-rules`[^4] 2. **磁盘权限验证** ```bash ls -l /dev/asm-* # 应显示grid用户和asmadmin组权限 ``` --- #### **三、Grid Infrastructure安装** 1. **静默安装响应文件配置** 编辑 `grid_install.rsp`: ```conf oracle.install.option=CRS_CONFIG ORACLE_HOSTNAME=rac1 INVENTORY_LOCATION=/u01/app/oraInventory SELECTED_LANGUAGES=en oracle.install.asm.OSDBA=asmadmin oracle.install.asm.OSOPER=asmadmin oracle.install.crs.config.gpnp.scanName=rac-scan oracle.install.crs.config.clusterName=rac-cluster oracle.install.crs.config.gpnp.scanPort=1521 oracle.install.crs.config.clusterNodes=rac1,rac2 ``` [参考引用[2]格式] 2. **执行安装** ```bash ./gridSetup.sh -silent -responseFile /path/to/grid_install.rsp ``` --- #### **四、创建ASM磁盘组** 1. **启动ASM实例** ```sql sqlplus / as sysasm STARTUP; ``` 2. **创建磁盘组** ```sql CREATE DISKGROUP DATA_EXTERNAL EXTERNAL REDUNDANCY DISK '/dev/asm-disk1', '/dev/asm-disk2' ATTRIBUTE 'compatible.asm'='11.2'; ``` [^5] 3. **验证磁盘组** ```sql SELECT name, state FROM v$asm_diskgroup; ``` --- #### **五、安装Oracle数据库软件** 1. **响应文件配置**(`db_install.rsp`) ```conf oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=oper oracle.install.db.CLUSTER_NODES=rac1,rac2 ``` [^2] 2. **执行安装** ```bash ./runInstaller -silent -responseFile /path/to/db_install.rsp ``` --- #### **六、创建RAC数据库** 1. **使用DBCA创建数据库** ```bash dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -storageType ASM \ -diskGroupName DATA_EXTERNAL \ -nodelist rac1,rac2 ``` 2. **启动集群服务** ```bash srvctl start database -d orcl ``` --- #### **关键注意事项** 1. **互信配置** 确保所有节点间SSH互信: ```bash ssh-keygen -t rsa ssh-copy-id grid@rac2 ``` 2. **时间同步** 使用NTP或chrony保持节点时间一致。 3. **日志检查** 安装过程中监控日志: `$GRID_HOME/cfgtoollogs/crsconfig` > 提示:生产环境建议使用Oracle ASMLib简化磁盘管理,测试环境可使用UDEV规则[^4][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值