ORACLE RAC 之I/O分离--hangcheck-timer模块配置-阿里云开发者社区

开发者社区> 技术小胖子> 正文

ORACLE RAC 之I/O分离--hangcheck-timer模块配置

简介:
+关注继续查看

ORACLE RAC 之I/O分离--hangcheck-timer模块配置

此文档摘自METALINK:726833.1,所适用的ORACLE版本为:Oracle Server - Enterprise Edition - Version: 9.2.0.8 to 11.1.0.7

从9.2.0.2版本开始,ORACLE RAC环境需要使用一个新的I/O fencing模块,叫做hangcheck-timer模块。

这个模块用来代替Watchdog模块,提供类似的fencing功能。Hangcheck-timer模块是标准的linux2.4以上的内核中的一个子功能被发布。

1. hangcheck-timer简介

Hangcheck-timer应该在系统启动的时候被加载, 并对于能够影响RAC节点稳定性的长时间的系统操作HANG进行内核监控。

它运行在内核级别并使用Time Stamp Counter(TSC)来捕捉调度的延迟和节点HANG。这是通过设置一个timer,然后检查这个timer的fires情况来判断是否延迟是否超过了误差的幅度。如果这个周期超过了允许的时间(也就是hangcheck_tick+hangcheck_margin秒),机器将会被重启,如果是CPU资源不足的时候,Hangcheck-timer将不会导致重启。

Hangcheck-timer有三个配置参数:

hangcheck_tick: 定义了hangcheck-timer检查节点是否hang的频率,单位是秒,缺省是60秒

hangcheck_margin: 定义期望的和真正的scheduling之间允许的误差,单位是秒,缺省值是180秒

hangcheck_reboot: 定义了如果内核在hangcheck-tick和hangcheck-margin相加的时间内响应失败的话,hangcheck-timer是否重启节点。

如果hangcheck_reboot的值大于等于1,hangcheck-timer模块将会重启系统;如果设置为0,则即使系统hang的时候hangcheck-timer也不会重启系统。

在linux 2.4的内核中,这个缺省值是1;在2.6的内核中,缺省值是0。

当hangcheck_reboot=1并且满足下面的公式时,hangcheck-timer将reboot系统system hang time > (hangcheck_tick + hangcheck_margin),所有的hangcheck-timer的参数的缺省值必须在加载内核模块的时候被显式的覆盖,不同的oracle版本可以按照下面来设置:

9i: 假如"oracle misscount"的缺省设置是220秒,则hangcheck_tick=30 hangcheck_margin=180 hangcheck_reboot=1

10g/11g: 假如"CSS misscount"的设置是30或者60秒,则hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1

不过对于目前大多数的环境,我问了几个朋友的rac这几个参数的设置一般为

misscount=220

hangcheck_tick=30

hangcheck_margin=180

注意:你必须设置集群的misscount值大于hangcheck_tick + hangcheck_margin之和

CSS 服务有2种心跳机制: 一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat.

这2种心跳都有最大延时,对于Disk Heartbeat, 这个延时叫作IOT (I/O Timeout);对于Network Heartbeat, 这个延时叫MC(Misscount)。 这2个参数都以秒为单位,缺省时IOT大于MC,在默认情况下,这2个参数是Oracle 自动判定的,并且不建议调整。可以通过如下命令来查看参数值:

2. hangcheck-timer.ko模块安装:

hangcheck-timer被默认安装在linux版本 2.4.9-e.12 及之上版本中,可以用如下命令核查hangcheck-timer是否安装。

[root@rac2 ~]# find /lib -name "hangcheck-timer.ko"

/lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko

有以上输出,代表已经安装了

modprobe命令将在模块路径/lib/modules/'uname -r'/中搜寻所有的模块和文件。

3. 配置hangcheck-timer:

修改配置文件/etc/modprobe.conf ,我的这个文件的内容如下:

[root@rac2 oracle]# more /etc/modprobe.conf

alias eth0 pcnet32

alias eth1 pcnet32

alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptscsi

alias scsi_hostadapter2 mptspi

alias scsi_hostadapter3 mptsas

alias scsi_hostadapter4 mptscsih

alias scsi_hostadapter5 ata_piix

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

4. 加载hangcheck-timer模块:

这个模块是在oracle需要时自动调用的,可以不需要用modprobe或insmod命令来放在启动文件加载。但是一般的条件下,我们还是把这个命令放在系统引导文件中。

为了使得在系统启动的时候就自动加载,可以把上面的命令添加到/etc/rc.d/rc.local或者/etc/init.d/boot.local或者/etc/rc.local中,这个根据不同的发行版来决定。

例如:

# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local

说明:

在oracle linux、红帽linux4/5或者SUSE linux9/10中,hangcheck-timer模块使用modprobe命令替换insmod命令(因为modprobe更灵巧些)来进行加载:

# modprobe hangcheck-timer hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1

5. 查证hangcheck-timer的参数是否正确的方法:

[root@rac2 ~]# /sbin/lsmod |grep hangcheck

hangcheck_timer 7897 0

hangcheck-timer的启动信息都会记录在系统日志里“ /var/log/messages”

重启时会记录"Hangcheck: hangcheck is restarting the machine"信息到/var/log/messages

如果你看到/var/log/messages中有"Hangcheck: hangcheck value past margin!"消息,表示系

统需要重启但是没有重启,因为hangcheck-reboot参数没有设置为1。

[root@rac2 ~]# grep hangcheck /var/log/messages |tail -2

Sep 21 11:03:20 rac2 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds).

Sep 21 11:03:20 rac2 kernel: Hangcheck: Using get_cycles().

文档参考:

http://zhang41082.itpub.net/post/7167/467614

http://www.rampant-books.com/art_hunter_rac_oracle%20linux_hangcheck_kernel_module.htm

 

后记:

ORACLE10g RAC 10.2.0.1.0版本,OS内核版本为:2.6.18-164.el5 时,设置hangcheck-timer的三个参数为如下值比较合适:

modprobe hangcheck-timer hangcheck_tick=10 hangcheck_margin=40 hangcheck_reboot=1
因为,CRS默认的misscount值为60s,一定要保证misscount>(hangcheck_tick+hangcheck_margin),且hangcheck_tick, hangcheck_margin的值不能过大。否则,两节点便会不断地重启。

$crsctl get css disktimeout

$crsctl get css misscount





    本文转自vcdog 51CTO博客,原文链接:http://blog.51cto.com/255361/837537,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
kubernetes RBAC实战 kubernetes 用户角色访问控制,dashboard访问,kubectl配置生成
kubernetes RBAC实战 环境准备 先用kubeadm安装好kubernetes集群,[包地址在此](https://market.aliyun.com/products/56014009/cmxz022571.
1758 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
7435 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
8268 0
JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
原文:JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法。
688 0
Oracle 11g 客户端的安装和配置。
原文: Oracle 11g 客户端的安装和配置。 数据库和客户端在不同的机器之上。 在安装之前,在安装Oracle数据库的服务器上导航到下面的目录。 将listener.ora和tnsnames.ora中的host中的localhost都改为机器的IP地址,我的为192.168.1.102 而后开始安装Oracle客户端 选择定制,可以自己定义安装的组件。
841 0
SMB - TimeServer 时间服务器配置与管理
     在企业网络中,时间服务可能是最不受重视却又非常重要的服务,说其不受重视一则是因为时间服务难以像OA/CRM/Mail等业务系统为企业带来直接收益,二是各类业务系统在使用系统时钟作为时间源表面上也能工作的很好;说其重要一则是因为时间的同步会直接影响业务系统数据的准确性和业务系统稳定性,二是在业务数据分析、系统运维或故障排查中一致的时钟能够极大降低工作复杂度。
2366 0
【redis序列化】配置Jedis不需要序列化存入json 序列化Joda DateTime
【redis序列化】配置Jedis不需要序列化存入json 序列化Joda DateTime
466 0
14350
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载