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




推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
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社区 版权所有