热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

操作系统内核过高导致OracleACFS乱码

作者简介石云华,Exadata中国用户组联合创始人,ORACLEACE。毕业后一直从事

作者简介

石云华,Exadata中国用户组联合创始人,ORACLE ACE。毕业后一直从事Oracle数据库第三方运维服务工作,拥有十余年电信运营商、保险、税务、电力行业核心系统数据库运维经验。现就职于北京海天起点技术服务股份有限公司,oracle数据库专家组成员,Exadata部门负责人。个人著作有《Exadata实施运维指南》,《Oracle Exadata性能优化》

案例概要:

最近一个准备上线的数据库项目,客户要求上面运行的OGG实现高可用。我们给出的方案是:底层用ACFS实现共享存储,上层手动地向GI集群添加资源实现高可用,或者上层使用XAG工具,用XAG工具自动完成高可用配置工作。

最终,现场的同事选择用XAG工具完成高可用配置后,进行OGG高可用切换测试时,发现OGG所在的目录无法访问,同时出现乱码的现象。

 

案例分析:

(1)、让现场的同事将整个故障的现象描述一下,同事整理出来的故障过程如下所示。

这是一个6节点的RAC环境,OGG当前在节点2上运行,期间执行DML操作,OGG都能够正常同步数据,为了模拟高可用性测试,将节点2直接reboot,此时出现的故障现象如下:OGG的管理进程mgr可以正常切换到节点1,也可以正常启动,但是使用info all命令查看进程状态时,此时只能够看到mgr进程的信息,而无法看到抽取进程extya信息。

 

同时,查看OGG软件所在的目录,发现dirrpt 和 dirchk 目录存在乱码现象:

 

(2)、让现场的同事将相关的配置过程给我,我检查了整个高可用的实现过程,中间所涉及的步骤是没有问题的。

先配置了共享ACFS,所有节点都挂载这个文件系统,并注册成集群中的资源,随着GI集群一起启动。

然后利用XAG工具向GI集群中添加了资源,并且可以实现高可用切换工作。

此时,我认为这个故障与XAG应该是无没有关系的,因为XAG工具只是负责集群资源的管理工作,而现在的问题是目录不可访问,同时出现了IO错误。

 

(3)、搜索MOS文档库,找到如下这篇文章。

AfterOS kernel patching to 3.10.0-957 (RedHat) kernel files are not listing on acfsdirectory (Doc ID 2561145.1)

从这篇文章可以看出,RedHat 3.10.0-957内核版本中包含的补丁更改了ACFS驱动程序使用d_splice_alias接口的预期行为。如果ACFS目录已经存在Dentry,则d_splice_alias接口将返回IO错误。

解决办法是:安装数据库补丁(29963428),或者将Redhat的内核降低到3.10.0-862及以下版本。

(4)、此时,现场的同事反馈,进一步检查发现,当OGG在切换之前就已经出现乱码问题。也即当OGG在节点1上运行时,节点1上的ACFS目录一切正常,OGG也能正常工作,但此时去访问节点2上的OGG所在的ACFS目录,就会出现上述的IO错误和乱码问题。

检查当前环境的操作系统内核:

当前的操作系统内核正好高于3.10.0-862,这些发现也说明了这个故障与XAG工具或者OGG无关。应该就是ACFS自身的问题。

 

案例解决:

这个问题,官方给出的解决方案是,要么降低操作系统内核,要么打数据库补丁。

但是业务系统在当前这个版本环境下做了大量的测试工作,并且业务系统马上就要上线,如果这时降级操作系统内核,或者安装数据库补丁,前面做的所有测试工作都可能需要全部重头开始,整个业务系统的上线进度就需要全部延后,对于客户而言都是无法接受的,这就需要想想还有没有其他办法。

其实,搭建ACFS也只是为了实现OGG的高可用而已,这个ACFS目录不可访问的问题也仅仅在所有计算节点共享挂载这个ACFS时才会存在。那么,我们可以换一个思路,ACFS文件系统不注册到集群,也即不允许自动挂载,而这个挂载ACFS文件系统的动作由OGG资源切换时完成。也即OGG进行高可用切换时,先停止当前节点的OGG进程,然后卸载当前节点的ACFS文件系统,接着在切换后的节点上挂载ACFS文件系统,最后再启动OGG进程。这样,ACFS文件系统就只会在OGG运行的那个节点上挂载,同样,也就不会出现乱码和IO不可访问的问题了。

这个环境当前使用的XAG工具来实现高可用切换,XAG工具实现上也是需要向GI集群中添加资源,只是所有工作都被XAG工具进行了封装,部署过程变得简单了许多,要实现XAG来挂载ACFS文件系统,就需要修改这个OGG资源所对应的ACTION_SCRIPT脚本,但发现这个脚本是用Perl写的,由于对Perl不熟,所以只能放弃使用XAG工具来管理OGG高可用。

最终使用原始的手动向GI集群添加资源的方式来实现OGG高可用性,OGG资源所对应的ACTION_SCRIPT脚本改用bash,可以从MOS网站下载这个bash脚本,但必须对这个bash脚本进行改造,也即需要添加挂载和卸载文件系统的功能,部分代码如下所示。

fun_mount () {

  sudo mount -t acfs  dev/asm/acfsrzogg-466 /rzogg

}

 

fun_umount () {

  cd /

  sudo fuser -kc /rzogg

  sudo umount /rzogg

}

在脚本中的'start')部分,先调用fun_mount,在脚本中的'stop')和'clean')和'abort')部分,最后调用fun_umount。同时,记得为用户配置sudo权限。

    脚本改造完成后,再次手动测试OGG高可用,一切正常,每次切换时,只会在一个节点上挂载ACFS文件,也就没有乱码问题。




推荐阅读
author-avatar
漆黑中的萤火虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有