Oracle
Allen 2020-07-20 11:10:04 33972 0 0 0 0

  oracle11g rac 体系结构

  

  由于工作需要,需要了解详细的oracle rac体系架构,下面分几个方面阐述

  1. oracle rac的几大组件

  1.OHAS ---OHAS是oracle11gr2推出的一个重要组件,是集群启动的唯一起始点,其他的守护进程和集群管理的资源同一定义为资源,同时,集群管理软件使用代理进程(agent)来同一实现对对所有资源的管理

  1.ocr和olr

  OCR是保存CRSD所有管理资源的注册表,但是在crsd启动之前,还有很多初始化资源没有启动,所以11g版本中推出了OLR

  OLR是保存在本地的集群注册表 ,作用是为ohasd提供集群的配置信息和初始化资源的信息--(当OHAS启动的时候,从/etc/oracle/olr.loc文件中读取olr文件)

  OLR 可以通过ocrconfig -local -manualbackup进行备份

  ./ocrconfig -local -restore进行恢复

  ./ocrcheck -local进行一致性检查

  2.ohasd启动的代理进程

  1. oraagent-------这个进程以Oracle或者grid用户启动,负责管理oralce或者grid用户的资源

  其中ohasd只会启动oraagent_grid  --包括资源为  ora.gipcd   ora.gpnpd  ora.mdnsd  ora.evmd  ora.asm

  mdns  -- 和dns的功能类似,提供主机名到ip的映射(基本特性:小型私有网络提供民称解析服务,使用多播发送信息,UDP协议,主机名以.local结尾),在rac中主要为gpnpd和Ohasd提供resource discovery(资源发现服务)

  gpnpd -- grid plug and play ,将集群的基本信息保存在本地,并通过和mdnsd通讯,灵活识别集群中的其他节点。gpnp分为gpnp wallet(访问profile的客户签名)  gpnp profile(保存启动集群节点的必须信息)   gpnp守护进程 (gpnp主线程,push线程,派遣线程,ocr线程),当集群重要配置信息发生变化时:本地派遣线程通知远程节点派遣进程--> 本地push进程推送gpnp profile给远程进程--> 远程派遣进程接收新版本gpnp pfofile   当集群启动时:gpnp主线程访问gpnp profile,并加载到cache中打开,如丢失,则从olr中恢复---> 派遣线程向所有远程节点发送信息确认最新版本gpnp profile位置 --> 拥有最新版本的节点向该节点发送gpnp profile --->本地节点收到gpnp profile后开始提供服务

  gipcd --确保集群网卡的一致性,不负责传递的信息--HAIP负责传递信息(1.当集群启动时,发现私网网卡 2. 通过集群私网发现其他节点并建立联系 3. 如果有多块网卡,当其中一块有问题,离线他并通知其他几点,反之恢复亦然)

  启动过程--》 gipcd守护进程启动--》尝试访问gpnpd 获取远程节点信息并与其通讯 --》发现本地私网信息--》发现远程节点 -->连接建立

  2. orarootagent-------以root用户启动,管理root用户的资源

  ohasd启动的资源为 ora.diskmon  ora.ctssd  ora.crsd  ora.driver.acfs  ora.cluster_interconnect.haip  ora.crf

  ctssd  --> cluster time synchronize service 同步节点之间时间 (老版本使用ntp后者wts容易出现问题),工作方式(选择一个参考节点,其他节点参考这个节点的时间)(如果有其他时间同步工具如ntp(注意如果有配置文件也会认为存在同步工具),则使用观察模式工作,观察模式下不会修改系统时间,如果没有其他时间同步工具,则以active模式工作,会缓慢自动同步节点之间时间信息)

  3. cssdagent----负责启动ocssd.bin进程,之后负责监控ocssd.bin守护进程

  ocssd守护进程每秒钟都向 cssdagent和cssdmonitor注册自己的状态信息同时如果有异常会进行异常处理

  4. cssdmonitor------只负责监控Ocssd.bin守护进程

  ocssd守护进程每秒钟都向 cssdagent和cssdmonitor注册自己的状态信息同时如果有异常会进行异常处理

  3.HAIP和CHM

  1. HAIP

  对于Oracle数据库集群,私网之间的通讯是十分十分重要的,私网之前的通讯主要分为集群之前和数据库实例之前的通讯,集群之间的通讯十分简单,使用简单的tcp/ip协议即可,但是数据库实例之间的通讯十分庞大,而且数据实时性要求也很高,单纯的tcp/ip不能满足,需要UDP或者RDS,同时需要配置高可用和负载均衡。

  HAIP出现是因为原先的数据库对私网的高可用和负载均衡处理大多数依赖于操作系统层面配置的linux bonding等,oracle数据库为了解决这个问题,于是提出了HAIP

  什么是HAIP,HAIP是数据库自动在每一个私网网卡上绑定一个169.254.*.*的IP地址,这个IP地址被称为HAIP,而Oracle数据库实例之间的通讯则会通过这个Ip地址进行通讯,,当某一个私有网卡出现问题时,则会将这个私网的ip地址自动漂移到正常的私网网卡上,这样,实现了私网的高可用

  2. CHM

  chm是oracle提供的一个工具,用来收集操作系统资源(cpu mem swap proc i/o network)的统计信息,chm会以ora.crf进程存在于每一个节点上。chm主要用来收集和预防一些由于系统异常导致的rac节点问题

  chm和oswatcher的对比----实时性更强,但是保留时间没有oswatcher强,同时功能也比不上oswatcher。

  chm组成

  1.chm repository----一个berkeley数据库,存储各个节点收集到的操作系统统计信息,存放在/gi_home/crf/db/节点名下,默认大小为1G,最大保留时间为3天

  2.system monitor service -- 以osysmond.bin形式存在于每个节点,负责收集每个节点信息并将信息发送到主节点服务器上

  3.cluster logger service ----以守护进程 ologgerd的形式存在于主节点和副节点上,主节点负责接收所有节点的信息,并记录到主节点的chm repository 中,副节点的ologgerd则接收来自于主节点的信息,记录到副节点的chm repostiory中

  2.css 部分

  负责构建集群和维护集群的一致性

  CSS启动过程--构建集群

  1.ohasd守护进程启动,并启动对应的代理进程(包括css的oracssdagent_root)--> 2. oracssdagent_root启动 ocssd.bin进程  --> 3. ocssd.bin访问gpnpd.bin,获取构建集群的基本信息,访问gipcd.bin获取远程节点的信息 --> 4. 和远程节点通讯,并通过访问VF和租借快获取本地节点的编号,加入集群

  集群心跳机制---维护集群一致性

  1. 如何维护集群的一致性-->1.确认节点间的联通性 2.共享位置保存节点连通信息 3.本地节点自我监控

  2.维护集群的三种心跳

  3.常用术语

  VD/VF 保存每个节点的磁盘心跳信息,以及每个节点能看到的节点列表,在脑裂时判断节点的状态以及判断节点应该离开集群还是alive,同时VF中还保留了下面的信息 1.租借块 lease block  2.kill block

  OCR oracle cluster register 记录crsd相关的信息

  misscount  网络心跳超时时间,默认是30s,也是本地心跳的超时时间

  LIOT long i/o timeout 磁盘心跳的超时时间,默认是200s,

  SIOT short i/o timeout 节点在重新配置时对VF的i/o超时时间,默认是misscount-reboottime=30-3=27s

  重新配置主节点 当集群中的节点数量发生变化时,会有一个节点用于完成这次的重新配置,通常最小的节点号会作为主节点

  reboot time 集群要求OS完成的重启时间,默认为3S

  diagwait  指定oprocd进程的margin时间,

  incarnation 集群的最新状态,集群每一次重新配置,这个值增加1

  1.网络心跳(miscount )--> 发送线程  分析线程(根据接收的线程信息进行处理,如进行集群重新配置)  集群重新配置线程  派遣线程(接收远程节点的信息,根据信息发送给其他线程)

  用来确认集群之前的连通性     ocssd进程每秒钟通过私网会向集群的其他节点发送网络心跳

  丢失网络心跳进行重新配置过程  1.当某个节点连续一段时间丢失网络心跳后,超过集群的miscount值后,分析线程发起集群重新配置  2. 重新配置线程管理节点向集群中所有节点发送重新配置消息,所有收到此消息的节点回复自己的状态

  3.重新配置线程管理节点根据状态确认是否会有脑裂发生----如果网络心跳异常但是磁盘心跳正常,则判断会发生脑裂,会向VD写入kill block信息,当网络心跳异常的节点读取到后会对本节点进行重启

  2.磁盘心跳 (short I/O timeout)  --> 磁盘心跳线程--发送磁盘心跳,读取block kill  磁盘心跳监控线程--检测磁盘心跳,读取block  kill block线程 --监控kill block

  当集群脑裂时确认脑裂的解决方案 ,oracle建议设置奇数个VF磁盘,当节点无法访问某个VD,只要能访问的磁盘总数为n/2 + 1 即可

  3.本地心跳  -->监控cssd.bin进程以及本地节点的状态

  oracle发送网络心跳的时候还会向cssdagent和cssdmonitor发送本地心跳,如果本地心跳没有问题,则认为cssd.bin正常--oprocd中记录hang信息

  集群的组管理

  NM和GM 指得是node management 和 group management ,上面的内容都是NM,接下来是GM的主要内容

  GM的概念  -- >  1.组 group 一组成员和他们的资源组成的整体   2. 成员  member 能够独立运行的一个实体(主成员和共享成员-->主成员负责监控集群并在变化时进行相应的操作,共享成员是他的扩展) 3. GM master 当组成员发生变化时,由master完成重新配置

  1.共享   每个组有若干个成员祖册,每个组或者组成员还需要向外面共享一些信息----1.集群中的数据库作为一个组注册到css上,主要成员是LMON进程,当LMON进程启动时,需要注册到css上,css才知道这个数据库的具体信息,这个是组内共享  2.ASM进程启动也会注册到css上,并把信息共享出去供数据库实例发现,这就是组间共享

  2.隔离  当组中的某一个成员离开时,gm需要保证这个组的成员在OS级别的离开,既所有进程和io都清理

  11G CSS新特性

  1. member kill escalation 成员终止升级

  当rac中需要终止某个成员时,例如二节点的LMON进程(二节点的数据库实例),步骤如下

  rac通过GM去尝试终止LMON,如果终止完成,则返回终止完成的信息,如果终止失败,则升级为NM层面,通过NM来重启节点保证集群的一致性

  2.rebootless restart

  当出现下面情况时,集群不会直接重启节点,而是重启集群管理软件

  1.当节点丢失网络心跳超过misscount   2.当节点不能访问大多数的VD 3.MEMBER KILL 升级为NODE KILL 既发生上面无法通过GM终止进程

  目前先更新到这,后面将会更新crs部分,asm部分及剩余的

原创 Oracle 作者:shadow_young 时间:2020-07-07 16:09:33  534  0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69978503/viewspace-2702840/,如需转载,请注明出处,否则将追究法律责任。



Tag: Oracle Oracle体系 Oracle11g
我也要发一个   ·   返回首页   ·   返回[Oracle]   ·   前一个   ·   下一个
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Oracle]   ·   返回顶部