作者:三光937 | 来源:互联网 | 2023-08-20 15:51
OHASD
OCR是用于保存CRSD所管理资源的注册表,在启动到CRSD之前,还有很多初始化资源是需要启动的,在11gR2版本有OLR。
当集群启动时,ohasd从/etc/oracle/olr.loc文件中读取OLR的位置,默认保存在GI_HOME/cdata下面。
只有ohasd以及crsd守护进程能够启动代理进程。
HAIP
私网的高可用性和负载均衡特性。(11.2.0.2开始)
私网通信的类别:
1、 节点之间的网络心跳等,特点是持续存在,实时性要求较高但是一次数据量较小,这种可以通过TCP/IP协议传输。
2、 实例之间的传输,cache fusion等,数据量大,速度要求高,通过UDP/RDS协议传输。
Oracle自动绑定在私网网卡上169.254开头的IP地址称为HAIP。
1、 多个私网网卡可以分别自动绑定不同的169.254开头的IP地址.
2、 每一块网卡都同时承担实例之间的通信 私网通信的负载均衡.
3、 当有多个私网网卡时,down掉一个私网网卡,HAIP会自动漂移到存活私网网卡上。
4、 支持在集群创建后,添加新的私网网卡。
CSSD
CSSD大致运行流程图。
mdnsd
mdns主要负责帮助集群中的其他守护进程(gpnpd以及ohasd)提供resource discovery简称RD。mdns在进行资源发现的时候会同时使用公网和私网。
gpnpd通过mdns提供的节点信息向网络发布自己的信息,也开始搜索其他节点的信息。
如果gpnpd发现了远程节点发布的信息,会尝试将自己的gpnp profile推送到远程节点上,若节点之间属于同一集群,不出意外会推送成功。
ohasd通过mdnsd发布本节点的信息,当ohasd发现远程节点的信息的时候会尝试更新集群节点列表信息更新。
mdnsd只负责为gpnpd以及ohasd提供节点名称解析和资源发现RD,节点之间的数据传输并不是由mdnsd完成的。
gpnp
grid plug and play:由gpnpd.bin守护进程实现。
1、 将集群的基本信息保存于本地,便于启动集群时从本地就能够获取足够的信息,不再完全依赖OCR。
2、 和mdnsd进行通信,灵活识别集群中节点,使集群结构更加灵活。
gpnp profile
profilesequence表示该gpnp profile的序列号,每做一次修改,序列号增1,可以看到gpnp profile的版本号,越大说明越新。
clusterUid
表示集群的Global ID,从12c开始,GI通过此id唯一识别集群,随机生成,无法修改。
clustername
表示集群名称,12c以前,GI通过此名称唯一识别集群,也就是同一子网中不能存在同名集群。
这里的adapter=eth0表示网卡名称,use=public表示为公网用途。
这里的adapter=eth1表示网卡名称,use=cluster_interconnect表示为集群互联连接用途也就是私网。
css需要读取这部分内容,+asm表示使用了asm,css扫描asm设定的asm_diskstring获取表决盘信息。
后面的400表示节点号的租借有效期(未理解)。
asm需要读取这部分内容,获取asm实例的参数文件位置,这里发现asm实例的参数文件是存放在OCR磁盘之中的。
gpnp守护线程
gpnpd是一个多线程的进程:
① gpnp主线程 clsgpnpd_MainWork
访问gpnp profile并读取里面信息。
② push线程clsgpnpd_pushThread
当本地的gpnp profile发生改变或者需要传输给远程节点时,负责传输gpnp profile。
③ 派遣线程clsgpnpd_dispatchThread
负责接收gpnpd收到的消息,比如新的gpnp profile。
④ OCR线程clsgpnpd_ocrDetectThread
如果发现OCR中相关信息变化了,则通知派遣线程。
问:如果集群的重要配置信息变化时,本地的gpnp profile如何及时更新?
答:
1、 本地的gpnpd的派遣线程通知所有节点的派遣线程有配置改变
2、 本地的gpnpd的push Thread将新版本的gpnp profile发送给其他节点
3、 其他节点的派遣线程接收新版本的gpnp profile
问:gpnp的启动过程是什么?
答:
1、 gpnpd的主线程访问gpnp profile,读取信息加载到cache中(什么cache?OCR cache?),若本地节点的gpnp profile丢失,则通过OLR记载信息重建。
2、 派遣线程向所有节点发送信息,获取最新版本的gpnp profile位置。
3、 拥有最新版本的gpnp profile的节点向其他节点发送信息。
4、 本地节点收到最新版本的gpnp profile后,向外提供服务。
gipc
grid interprocess communication:集群管理私网网卡的进程。
以守护进程gipcd.bin存在集群。
问:gipc守护进程的主要作用是什么?
答:
1、 集群启动时,gipc通过gpnp profile中获取私网信息,发现网卡并且检查。
2、 通过私网获取集群其他节点信息,并且和其他节点的私网建立联系。
3、 在配置多块私网网卡的情况下,故障网卡暂时离线,告知其他节点,继续监控被离线网卡。
问:gipc和HAIP的区别是什么?(个人理解,可能有误)
答:
集群中私网的作用有两种:
1、 集群层次的通信,守护进程以及网络心跳;(gipc管理私网网卡但不负责具体的节点间信息传递,如果gipc出现问题,则影响整个集群)
2、 实例间的通信,比如cache fusion;(HAIP完成此类信息的传递,HAIP出问题影响实例,但不会影响集群的一致性,因为私网网卡并没有问题)
PS:以上均为个人学习之后的理解,如有错误,恳请指正。
学习来源:《Oracle RAC核心技术详解》