RAC启动流程,启动进程,隔离机制相关信息

RAC的启动流程
第一步:高可用性服务层 (HAS)
第二步:集群就绪服务层 (CRS)
./crsctl start has
./crsctl start crs

ohasd进程是系统INIT生成,ohasd进程是启动Clusterware的起点,高可用性服务层由GPNPD,GIPC,mDNS和GNS等服务组成,服务器的重启将使obasd进程自动重启.
ohasd是运行在respawn(重生)模式下面的,linux系统的/etc/inittab文件中只包含了ohasd的自动启动项。

CRS守护进程,crs管理存储在OCR中的每个集群资源,包括启动,停止,监控和失败切换操作。
CSS控制集群包含的节点成员,并以发出通知的方式管理集群配置。  Cssdagent进程监控集群并提供I/O防护,这个服务以前是由oprocd提供,在Windows就是OraFenceService服务,cssdagent运行失败,Clusterware将重启该节点。
ASM 提供Clusterware磁盘文件的存储,ASM实例需要在cssd进程启动之前先启动,且MOUNT相应磁盘组成功
Event Management(EVM)  一个后台进程,发布由Clusterware创建的事件,是CRS和CSS通信的桥梁。

CRS - EVENT MANAGEMENT - CSS

CRS拥有专门管理root用户所拥有资源的进程,orarootagent进程,如网络,网格虚拟IP地址资源。

 RAC中在ROOT用户下运行的进程:CRSd.bin ,oCTSSd.bin ,GNSd ,OHASD.bin ,orarootagent.

网络心跳
所谓的网络心跳是通过是有网络来检测节点的状态,由于私有网络硬件或软件的故障导致集群节点间的是有网络在一定时间内无法进行正常的通信,这种现象就成为脑裂。

  检查脑裂的超时时间(misscount)

#./crsctl get css misscount
数据库系统默认的超时时间为30秒钟,并在30秒后,在Clusterware的日志中会有相应的心跳丢失的记录。
注意:在RAC中一定不能采用节点间直连的方式来组建心跳网络,这样会导致心跳大量丢失,不利于Clusterware的稳定运行。
IPMI :智能平台的管理接口,相当于智脑来管理集群中的心跳及服务的重启。

磁盘心跳
所谓的磁盘心跳就是共享磁盘来检测节点的状态。在Clusterware磁盘文件中,表决磁盘就是用于检测Clusterware磁盘心跳的共享磁盘文件。
每个节点每一秒写一次记录到每个表决磁盘,以此来确认各节点的正常状态。如果发现某一秒中,在某一节点并未检测到表决磁盘的记录,则会引起脑裂。

网络心跳和磁盘心跳都是由OCSSD进程来检测的。
  关于磁盘心跳与网络心跳相关的两个参数
    1、disktimeout(超时时间)
     #[root@**]#./crsctl get css disktimeout
  disktimeout在Oracle数据库系统中的超时时间是200秒
     此参数会检测表决磁盘是否脱机,并在Clusterware的告警日志中生产表决磁盘脱机记录。
    2、reboottime参数
     除了misscount和disktimeout参数之外,还需要提到reboottime参数,该参数表示的含义是节点被踢出之后,节点开始重启允许的最大时间。
     [root@**]#./crsctl get css reboottime
   reboottime在数据库系统中默认的最大时间是3秒钟。

 调整心跳参数
    [root@**]#./crsctl set css -h  
           -h(帮组)
 调整网络超时时间  misscount
    [root@**]#./crsctl set css misscount 10
 调整表决磁盘的超时时间 disktimeout
    [root@**]#./crsctl set css disktimeout 50
 调整表决磁盘脱机后最大的重启时间
    [root@**]#./crsctl set css reboottime 1

IPMI(只能平台管理接口)是标准的工业管理协议,它最重要的物理部件就是BMC(Basebord Management Controller).相当于平台管理的“大脑”,IPMI可以通过BMC监控各个传感器的数据并记录各种事件的日志,因此IPMI也成为BMC。它的优势在于独立于CPU BIOS和OS,所以无论在开机还是关机的状态下,只要接通电源用户就可以实现对服务器的监控。
IPMI的配置:
      1、在安装期间可以配置IPMI
      2、可以使用CRSCTL工具进行配置

 Oracle数据库隔离的三个参数

Hangcheck-timer 的三个参数
1、hangcheck_tick:定义了hangcheck-timer检查节点是否hang的频率,单位是秒,缺省是60秒。
2、hangcheck_margin:定义了期望和真正的scheduling之间允许的误差,单位是秒,缺省值是180秒
3、hangcheck_reboot:定义了如果内核在hangcheck_tick和hangcheck-margin相加的时间内相应失败的话,hangcheck-timer是否重启节点。
如果hangcheck_reboot的值大于等于1,hangcheck-timer模块将会重启系统;如果设置为0,则即使系统hang的时候hangcheck-timer也不会重启系统。

其中misscount 网络超时时间 的值要设置大于hangcheck_tick+hangcheck_margin之和。

RAC的隔离机制
系统层隔离机制
关于hangcheck-timer.ko模块的安装
#find /lib -name “hangcheck-timer.ko”
若有输出则代表已经安转过了,是默认被安装在linux版本2.4.9-e.12中的。
Oracle 10g版本中.设置一下参数值比较合适。在11gRAC后便不用再进行设置,系统默认便好。
modprode hangcheck-timer hangcheck_tick=10 hangcheck_margin=40 hangcheck_reboot=1

集群层隔离机制
 OPROCD进程
    oprocd进程和cssd进程一样位于集群层。
   10.2.0.4开始,在linux平台加入了oprocd进程,10g和11gR1 oprocd监控集群节点系统状态,RAC使用oprocd和Hangcheck-timer提供集群的I/O隔离。
    oprocd进程的功能是在系统上创建线程监控各种各样的进程,检查是否存在进程Hang住的情况,每隔1秒钟oprocd线程被唤醒并检查进程,检查上次唤醒一来经历的时间,如果这个时间超过了某个期待值(1.5秒),OPROCD进程就会重启节点。如果检测失败会sleep 500毫秒之后再次尝试。这个进程是用来检测节点的processHang(CPU挂起)。  
    oprocd进程在11gR2版本开始,oprocd的功能被cssdagent所代替。

 数据库层隔离机制
    LMON(Global Enqueue Service Monitor)全局队列服务监控
     数据库层的LMON进程会定期检查RAC database的健康状况,如果发现节点的Database存在问题,同样会采取相应的措施保证RAC的隔离性。

 RAC被踢出的原因
    Kernel Hang/服务器负载严重(oprocd、Hangcheck-timer).
    内联网络心跳丢失。
    VoteDisk心跳丢失。
    oclsmon扫描到cssd Hang.

GPnP (网格即插即用)(是从11gR2 RAC开始的新功能)
GPnP profile文件

在Clusterware启动期间,CSS守护进程使用GPnP profile发现表决文件(参数 “DiscoveryString”).一个不正确的Discovery字符串讲阻止CSS守护进程启动,导致整个CRS无法启动。
Oracle不支持手动修改profile.xml文件。
GPnP profile文件保存的是集群的配置信息,默认的保存位置是:

G R I D H O M E / g p n p / GRID_HOME/gpnp/ GRIDHOME/gpnp/HOSTNAME/profile/peer/profile.xml
$GRID_HOME/gpnp/profile/peer/profile.xml(全局备份)

GPnP保存的是RAC的配置信息,包括集群名称,网络类型信息(public/private),ASM和CSS的存储信息,安全的数字签名,以及ASM实例的SPFILE文件位置。

关于GPnP在集群中所有节点网格即插即用的完整性的验证。

cluvfy comp gpnp [-n  node_list] {-verbose}

SET TRANSACTION IOSLATION LEVEL {READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE )

参数解释:  read committed:可以保证一致性读
            read uncommitted:可能读有dirty read(脏读)
            repeatable read:重复读
            serializable:序列化

Examples :
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ GO BEGIN TRANSACTION
select * from table_name

LOCK TABLE语句
此语句用于防止其它并发事务访问或修改表
语法
LOCK TABLE table_name
[WITH HOLD]
IN {share | exclusive} MODE
参数
table_name 表必须是基表,而不是视图,因为临时表数据时当前连接的本地数据,所有锁定全局临时表或局部临时表都无效。
[WITH HOLD]子句 ,如果指定该子句,锁一直保持到连接结束,如果没有指定该子句,则提交或回退当前事务时将释放锁。
[SHARE]模式 禁止其他事务修改表,单允许他们读取表,在改模式下,只要没有其它的事务所修改的行,就可以间接地或显式地使用LOCK TABLE更改表中的数据。
[EXCLUSIVE] 模式 禁止其它事务访问表。
如果用LOCK TABLE table_name IN EXCLUSIVE MODE排他性地锁表t,则服务器的缺省行为时不获取t的行锁定,将SUBSUME_ROW_LOCKS现象设置为OFF 可以禁用此行为。

                SQL>   LOCK  TABLE table_name  
                         IN   option   MODE

关于 select …… for update 语句的含义
对表独占锁
例如 select * from T for update 是对表T加了会话级别独占锁,只有当前会话断开,独占锁才会别去掉

对表行加一个独占锁 select …… for update of
例如 select * from T for update of T.column

对某资源进行请求时,发现该资源未被释放,则不等待,直接报错。select …… for update nowait
例如 select * from T for update nowait

对某资源进行请求时,发现该资源未被释放,则等待。这是for update的默认值
select …… for update [wait]

对某资源进行请求时,发现该资源如未被释放,有锁存在,则跳过
select …… for update skip lock
解释:在查询时,只会显示出没有被锁定的查询结果,也只能对查询出来的结果进行锁定,执行DML语句。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值