热门标签 | 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文件,也就没有乱码问题。




推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • zabbix中文乱码的问题
    在使用zabbix时,有时候会出现中文乱码的问题,如下:因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换:1、在windows获取字体库文件在Windows上的 ... [详细]
  • 用LGWR WORKER的例子介绍strace分析Oracle数据库行为的方法
    可观测性能力是IT运维的强有力的支撑。日志告警、指标是两种在运维中很常用的可观测性指标。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。和那些 ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
  • php课程Json格式规范需要注意的小细节
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgramming ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • rabbitmq杂谈
    rabbitmq中的consumerTag和deliveryTag分别是干啥的,有什么用?同一个会话,consumerTag是固定的可以做此会话的名字,deliveryTag每次接 ... [详细]
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社区 版权所有