rac笔记

RAC(realtime Application Cluster)
CRS(Cluster Ready Service)
GI(GRID Infrastructture)
DLM(Dynamic Lock Management)
GRD(Global Resource Directory)
CGS(Cluster Group Service)
GES(Global Enqueue Service)
OCR(Oracel Cluster Register)
CSS(Cluster Synchronization Services)
EVM(Event Manager)
OHAS(Oracel High Availability Service)
OLR(Oracle Local register)
启动方式
10G
通过/etc/inittable
启动init.cssd、init.crsd、init.evmd
init.cssd负责启动ocssd.bin守护进程和其他CSS层面的守护进程,从而完成对集群的构建工作
init.crsd负责启动crsd.bin守护进程并调用相应的racg模块来启动相应的资源,从而完成集群应用程序资源的启动
init.evmd负责启动evmd.bin守护进程,从而实现集群节点的时间发布
11gR2
/etc/init.d/init.ohasd被调用之后脚本启动ohasd.bin守护进程,然后ohasd.bin启动对应的代理进程,每个代理进程负责启动自己管理的集群初始化资源
资源管理方式
10gR2
资源管理由CRS组件实现
crsd通过ocr定义资源
crsd通过调用racg模块来实现对资源的各种动作
11gR2
用代理进程agent统一对资源进行管理,ocr用于保存crsd所管理资源的注册表,但是还有很多集群初始化资源需要启动,所以只有ocr是不够的,需要另一个集群注册表OLR
1、OLR:本地集群注册表,主要是为了ohasd守护进程提供集群配置信息和初始化资源定义信息。当集群启动是ohasd会从/etc/oracle/olr.loc文件读取OLR位置,OLR默认保存在<gi_home>/cdata下,<节点名>.olr
手工备份olr   ./ocrconfig -local -manualbackup(root用户)
恢复          ./ocrconfig -local -restore <olr备份文件>
验证一致性    ./ocrcheck -local
2、代理进程
引入全新管理框架framework
oraagent:这个代理进程会以Oracle或者grid用户启动,负责管理的用户为Oralce或grid的资源
orarootagent:这个代理进程以root用户启动,负责管理的用户为root的资源
cssdagent:这个代理进程负责启动ocssd.bin守护进程,之后负责监控ocssd.bin守护进程
cssdmoniot:这个代理进程和cssdagent代理进程基本一样,但是只负责监控ocssd.bin守护进程
代理进程可以由ohasd和crsd守护进程启动,其他的集群守护进程不能启动代理进程。
ohasd.bin守护进程会启动4个代理进程,oraagent_grid(oraagent_oracle)、orarootagent、cssdagent_root、cssdmonitor
ora.gipcd、ora.gpnpd、ora.mdnsd会以守护进程的形式存在,负责完成bootstrap阶段工作
ora.ctssd会以守护进程的形式存在,负责集群的时间管理
ora.cssd和ora.cssdmonitor会以守护进程的形式存在,ocssd.bin守护进程负责集群的构建,并维护集群的一致性,cssdmonitor负责监控ocssd.bin守护进程的状态
ora.crsd会以crsd.bin守护进程的形式存在,这个守护进程负责管理集群的其他资源
ora.evmd负责管理集群事件的发布,会以evmd.bin守护进程的形式存在
ora.asm这个资源负责管理ASM实例,负责在集群启动是启动ASM实例
ora.crf负责管理CHM
新增集群守护进程
mdns
mdns主要为小型私有网络(不存在dns)提供名称解析服务
mdns使用多播发布信息
mdns使用udp协议进行数据传输
mdns对应主机名以.local结尾
mdns主要负责为集群中其他的守护进程,主要是gpnpd和ohasd进程提供资源发现服务,帮助集群中的其他守护进程发现远程节点。

mdnsd进程被启动,对应的socket地址被创建
mdnsd进程的pid文件被创建
本地网卡信息被发现
本地节点信息被发现,mdnsd启动结束

gpnpd进程被启动。                  
gpnpd使用mdnsd提供的节点信息向网络发布自己的信息,同时也开始搜索其他节点信息
gpnpd发现了远程节点发布的信息,并尝试将本地的gpnp profile推送到远程节点上

ohasd进程启动
ohasd通过mdnsd发布本节点的信息
ohasd发现了远程节点信息
集群列表信息被更新???在哪

mdnsd只负责为gpnpd和ohasd提供节点名称解析和资源发现服务,节点之间的数据传输仍是由具体守护进程实现


gpnpd
全称为grid plug and play  11gR2新增组件,功能由gpnpd.bin守护进程实现。
1:将集群的节本配置信息保存在本地,以便在启动集群时能够从本地文件中活的足够的信息,而不再需要完全依赖于OCR
2:通过和mdnsd进行通信,能够更加灵活地识别集群中的节点,使集群结构更加灵活,而不再需要从OCR中获取节点列表。
gpnp组件由两部分组成:gpnp wallet和gpnp profile

gpnp wallet的功能是保存需要访问gpnp profile文件的客户签名信息,当客户访问gpnp profile时通过wallet中的签名信息进行验证  路径<GI_HOME>/gpnp/wallets/peer

gpnp profile是gpnp组件的重要部分,是个xml文件,用于保存启动(bootstrap)集群节点时所需的必要信息。在<GI_HOME>/gpnp/profiles/peer下。

用gpnptool get 获取gpnp profile信息
(子网中不能存在同名集群)

gpnpd守护进程
gpnp主线程(clsgpnpd_MainWork):该线程负责完成主要的工作。
push线程(clsgpnpd_pushThread):当本地的gpnp profile发生改变或者需要向远程节点推送gpnp profile时,该线程负责传输gpnp profiles。
派遣线程(clsgpnp_dispatchThread):该线程负责接收gpnpd收到的各种消息并分派给对应的线程。
OCR线程(clsgpnp_ocrDetectThread):该线程在发现OCR中相关的信息发生改变时通知派遣线程。
gpnp被启动会发生
1:gpnpd的主线程访问gpnp profile,并加载到cache当中打开。如果本地节点的gpnp profile已经丢失,gpnp可以通过OLR中的信息重新构建gpnp profile。
2:派遣线程向集群的所有节点发送消息,并确认最新版本的gpnp profile位置。
3:拥有最新版本gpnp profile的节点向该节点发送信息。
4:本地节点接受到最新版本的gpnp profile后,开始向外提供服务

gipc
gipcd守护进程主要功能是
当集群启动时,发现集群的私网(私网信息从gpnp profile获得),并对发现额私网网卡进行检查。
通过集群私网发现集群中的其他节点,并和其他节点的私网建立联系。
多块私网网卡其中一个或几个出现问题,离线问题私网,通知其他节点,继续监控被离线私网,以便在其恢复后重新上线。

DiskMon Exadata才会起作用

CTSS

10G和11GR1
cssdagent 和 cssdmonitor
oclsomon:这个守护进程负责监控ocssd守护进程的状态,如果发现ocssd出现挂起的情况,或者已经被终止。该进程会终止本地节点。
oprocd:这个守护进程负责监控本地节点的状态,当发现本地节点出现挂起的情况该进程会终止本地节点。
11GR2
cssdagent和cssdmonitor被用于监控ocssd、节点的性能状态。
优先级也是实时的,更高的优先级并且会锁住自己的内存不被swap,也意味着由cssdagent和cssdmonitor性能问题导致的错误的重启节点的可能性很低。
ocssd守护进程每秒钟都向cssdagent和cssdmonitor注册自己的状态信息。
cssdagent和cssdmonitor会实现oclsomon和oprocd的功能。

CSS
负责构建集群,并且维护集群的一致性。
10G和11GR1
cssd、crsd和evmd实际上是同时启动的。但是,它们之间是存在依赖关系的,CSS需要首先完成启动,构建集群,之后crsd启动,并将所有管理的资源上线(Online),最后evmd启动。
守护进程ocssd.bin被启动。守护进程ocssd.bin的优先级为RT(实时)。
ocssd.bin访问OCR,获得构建集群的基本信息,例如:集群名称、节点列表、访问远程节点的套接字(TCP协议)、表决盘(Voting File)位置、置、集群参数配置(miscount,集群私网信息、diagwait等)。
occsd.bin向远程节点发送连接信息、和远程节点通过私网建立连接、向表决盘中写入本地节点的信息。
该节点加入集群。

11GR2
操作系统被启动,并调用/etc/inittab文件中GI相关的脚本。
ohasd.bin守护进程被启动。该进程负责启动所有的代理进程,包括oracssdagent_root代理进程。
oracssdagent_root代理进程启动ocssd.bin守护进程。
ocssd.bin守护进程访问gpnpd.bin,以获得构建集群的基本信息,例如:集群名称、集群GID、集群私网信息、VF位置等。同时,从gipcd.bin获得联系远程节点的连接信息。
在获得了前一个步骤中提到的信息后,ocssd.bin和远程节点通信,并通过访问VF的租借块(Lease Block)获得本地节点的节点编号。
该节点加入集群。

ocssd.bin的日志结构
·10g版本:[组件名]<时间>[<线程编号或者id>]><消息类型>:<线程名称>:<消息内容>。
·11g版本:<时间>:[组件][<线程编号或者id>]<线程名称>:<消息内容>。

ocssd启动顺序
10g
ocssd.bin进程被启动。
通过读取OCR获得节点列表(如果集群中存在其他集群管理软件,那么,集群节点列表是从对应的集群管理软件中获得的)。
根据OCR中的信息访问表决盘,并从表决盘中获得各个节点的状态信息。
通过集群私网连接集群中的其他节点,并开始集群的重新配置(也就是加入集群)。
集群重新配置成功,节点加入集群。
11gR2
ocssd.bin守护进程被启动。
ocssd.bin和gpnpd通信,读取gpnp profile中VF的discovery string,并在对应的路径中扫描VF。
找到VF之后,ocssd.bin就能够获得集群的一些基本配置参数,例如:misscount、reboot time、long I/O timeout、short I/O timeout。
ocssd.bin继续和gpnpd通信,获得集群的私网信息,以便和集群中的其他节点通信。
ocssd.bin通过gipcd进程获得本地节点和远程节点的具体私网连接信息。
节点间的私网连接被建立,集群重新配置开始。
集群重新配置结束,集群成员列表被更新。


集群心跳机制(可以使用pstack<ocssd.bin pid>命令获得ocssd.bin的各个线程的名称。)
Oracle集群管理软件是通过以下一些机制来实现集群一致性的:
机制1:确定节点和节点间的连通性(心跳),以便节点之间能够了解彼此的状态。
机制2:用一(几)个共享的位置来保存节点之间的连通性信息,以便在集群需要进行重新配置(节点数量发生改变)时,能够做出正确的决定并记录集群最新的状态。
机制3:本地节点自我监控机制,以便当本地节点出现问题时能够主动离开集群,避免不一致的产生。

主要是通过三种心跳来实现的
网络心跳:
通过节点间的网络心跳(Network HeartBeat,简称NHB)确定集群节点之间的连通性,以便节点之间能够了解彼此的状态。ocssd.bin守护进程每秒钟会向集群的其他节点发送网络心跳(当然是通过集群的私网)。
网络心跳主要通过以下的ocssd.bin线程实现:
发送线程(clssnmSendingThread):该线程每秒钟向集群中所有的节点发送网络心跳信息。
分析线程(clssnmPollingThread):该线程会分析收到的网络心跳信息并进行处理,如果发现集群中的某一个(些)节点持续丢失网络心跳(超过misscount设置),就会通知集群进行重新配置。
集群重新配置线程(clssnmRcfgMgrThread):当clssnmPollingThread发现集群需要进行重新配置时,该进程负责对集群进行重新配置。
派遣线程(clssnmClusterListener):该线程负责接收从远程节点传递过来的信息,之后,根据信息的种类发送给相关的线程进行处理。

发送线程负责每秒钟发送网络心跳到其他远程节点。派遣线程负责接收从远程节点发送过来的网络心跳信息(当然,这个线程也负责接收其他信息),并分发收到的信息给其他相关的线程。分析线程会处理由派遣线程接收到的网络心跳信息,确认节点之间的连通性,当分析线程发现某些节点的连通性出现问题时,例如:连续一段时间内没有发现某一(几)个节点的网络心跳,集群就会进行重新配置(Reconfiguration)。而重新配置的结果往往就是某一(几)个节点离开集群,也就是经常提到的节点驱逐。

注意 对于Oracle集群,脑裂是指集群的某些节点间的网络心跳丢失,但是节点的磁盘心跳是正常的情况。当脑裂出现后,集群会分裂成为若干个子集群(Corhort)。对于这种情况的出现,集群需要进行重新配置,基本原则是:节点数多的子集群存活,如果子集群包含的节点数相同,那么包含最小编号节点的子集群存活。

磁盘心跳(Disk HeartBeat,DHB)
磁盘心跳的主要目的就是当集群发生脑裂时帮助制定脑裂的解决方案。Oracle集群的每一个节点每秒钟都会向集群的所有表决盘注册本地节点的磁盘心跳信息(也就是说,所有VF中的信息是相同的),同时也会将自己能够联系到的集群中其他节点的信息,或者说本地节点认为集群中的成员列表信息写入到表决盘中。一旦发生脑裂,CSS的重新配置线程就可以通过表决盘中的信息了解集群中节点之间的连通性,从而决定集群会分裂成几个子集群,以及每个子集群包含的节点情况和每个节点的状态。
磁盘心跳主要通过以下的ocssd.bin线程实现:
磁盘心跳线程(clssnmvDiskPingThread):该线程负责向集群的表决盘中发送磁盘心跳信息。同时,该线程也负责读取表决盘中的kill block信息,以确定本地节点是否需要重新启动。
磁盘心跳监控线程(clssnmvDiskPingMonitorThread):该线程用于确定磁盘心跳线程是否能够正确地发送磁盘心跳,并且能够正确地读取kill block中的信息。
·kill block线程(clssnmvKillBlockThread):该线程负责监控VF的kill block信息。

为本地心跳(Local HeartBeat,简称LHB)
这种心跳的作用是监控ocssd.bin进程以及本地节点的状态。在版本10g中,Oracle通过oclsomon和oprocd来实现。守护进程oclsomon.bin监控ocssd.bin进程的状态,oprocd.bin进程监控本地节点是否出现了性能问题


 

发布了47 篇原创文章 · 获赞 5 · 访问量 6917

猜你喜欢

转载自blog.csdn.net/whb234174124/article/details/88387350