在Oracle RAC的环境中,如果我们发现OSW监控数据显示包重组失败率过高,就需要引起足够的重视,因为这很可能会引发member kill/Node kill等重大故障,甚至在有些场景会连带影响到所有RAC节点不可用。

一般我们会选择调整ipfrag相关参数。除此之外,还有一种解决方案就是选择调整私网网卡的MTU值,通常Oracle使用8k标准块大小时,会选择设置MTU=9000,从而减缓包重组失败次数的增长速率,期望的理想状态下是完全没有包重组失败的发生。

需要注意的是,修改MTU需要心跳交换机配合做相应的修改和适配,确保使用的交换机能够支持巨帧,所以通常给客户的建议会优先给出方案一,实施方案一效果不理想的情况下才会考虑方案二。

方案一:修改ipfrag相关参数

官方建议一般是修改:

net.ipv4.ipfrag_high_thresh=16M
net.ipv4.ipfrag_low_thresh=15M

这个修改的官方主要依据是 RHEL 6.6: IPC Send timeout/node eviction etc with high packet reassembles failure (Doc ID 2008933.1) ,虽然文档给出的是RHEL6.6,但实际经验是在6.6以后的版本也建议修改,在很多真实案例中,不止局限于6.6这个版本。

另外,如果实际业务量比较大,可以考虑进一步增大这两个值,比如修改为32M/31M甚至64M/63M,一般high和low相差1M即可。

结合公司专家们的实战经验,对ipfrag系列参数给了一个参考,我这里结合网上的资料和RHEL7系统的默认值进行对比:

net.ipv4.ipfrag_high_thresh = 41943040		#分片占用内存的高阈值,默认值4194304
net.ipv4.ipfrag_low_thresh = 40894464 #分片占用内存的低阈值,默认值3145728
net.ipv4.ipfrag_time = 120 #分片超时时间,默认值30
net.ipv4.ipfrag_secret_interval = 600 #默认值600
net.ipv4.ipfrag_max_dist = 1024 #分片有效的最长间隔距离,默认值64

这里除了修改ipfrag_high/low_thresh由默认的4M/3M改为40M/39M之外,还将ipfrag_time由默认值的30修改为120,ipfrag_max_dist由默认的64修改为1024。但是这个并没有找到Oracle官方的说明,只是从参数含义的角度来看应该会有所改善。这里先不作为优先修改项。

方案二:使用巨帧,调整MTU值

这个修改的官方主要依据:Recommendation for the Real Application Cluster Interconnect and Jumbo Frames (Doc ID 341788.1)

当方案一实施后效果不明显时,则考虑调整MTU值,这里选择设置MTU=9000:

修改私有网卡MTU为9000:
ifconfig <网卡名称> mtu 9000
查看MTU是否更改成功:
ifconfig <网卡名称> 修改私有网卡配置文件,添加MTU=9000的配置,以确保主机重启后MTU=9000不变:
vi /etc/sysconfig/network-scripts/ifcfg-<网卡名称>
配置文件末尾新添加一行MTU=9000的配置:
MTU=9000

在实际测试验证中发现,节点1主机重启后无法启动ASM实例,alert明确报错MTU远端是1500,即使远端ifconfig临时修改MTU=9000也不行,这个结果还是很意外的,之前没想到这个mtu的修改居然不能实现完全滚动,也就是说停机是不可避免的(ifconfig可以动态修改mtu,但是如果rac想用上mtu=9000的话需要重启)。

--节点1主机重启后无法启动ASM实例,alert明确报错MTU远端是1500,即使远端已经临时修改过MTU=9000:
2020-07-03T17:15:52.602414+08:00
Errors in file /oracle/app/grid/diag/asm/+asm/+ASM1/trace/+ASM1_lmon_12878.trc:
ORA-27300: OS system dependent operation:config_check failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: skgxpvalpid
ORA-27303: additional information: Remote port MTU does not match local MTU. [local: 9000, remote: 1500] (169.254.1.60)

在MOS 947223.1文档中也有说明:After correct MTU issue, a node reboot is required to bring up CRS stack and ASM instance for 11.2 release.

如何判定包重组失败的现象是否存在风险?

上面讲了半天的包重组失败,那该如何判定当前系统包重组失败是否存在风险?当然理想环境下,不应该出现包重组失败的现象,但如果环境不够理想,那有没有一个参考值,多长时间内包重组失败超过多少次就会有问题?或者有其他的判定标准?

目前了解到的是对于Oracle RAC,对包重组失败速率并没有一个统一的标准来定义正常/不正常的临界值:

为此客户也开过SR求证,O原厂回复也是说没有一定的标准,只是基于数据库性能和稳定性方面建议是减少内网包重组现象。

我也咨询了专家罗海雄老师,认为一般30s内包重组失败超过5个就需要给予一定的关注,持续观察是否存在风险,并给出下面的awk命令来辅助观察osw的netstat数据:

awk '/zzz/{d=$4"-"$5}/packet reassembles failed/{curr=$1;diff=curr-prev;if(diff>5)print d,diff,prev,curr;prev=curr}' *.dat

根据上述语句分析了10余套系统,唯有出现过问题的这套环境依然存在风险,下一步计划修改MTU值后再观察。

此外,O原厂建议增加OSW私网的监控,但需要注意增加这个监控后,不止多了oswprvtnet等监控数据,之前netstat监控数据的格式也会发生变化,会详细列出每个网卡的监控信息,但格式变化后的连带影响就是上面awk脚本不再可用了,观察新的数据格式,改写脚本如下:

awk '/zzz/{d=$4"-"$5}/IpReasmFails/{curr=$2;diff=curr-prev;if(diff>5)print d,diff,prev,curr;prev=curr}' *.dat

最后要提一下的是,当出现这类问题时,还要配合检查私网本身是否存在问题,比如:网卡、网线、交换机等,都要确保状态正常,排除硬件本身的问题。

关于Oracle RAC调整网卡MTU值的问题的更多相关文章

  1. oracle RAC调整数据文件大小并移动表到指定的表空间

    一.Oracle RAC 调整表空间数据文件大小 1.先查找出表空间对应的数据文件路径: select file_name,tablespace_name from dba_data_files ; ...

  2. 又一例网卡mtu值引发的问题

    通过php上传文件到云存储,很小的文件都无法上传,在别的服务器上测试可以,本机环境是ESXI虚机安装的centos 7版本 解决思路过程 1.让开发写一个单独测试上传的文件,不调php nginx配置 ...

  3. Oracle 11gR2 RAC 单网卡 转 双网卡绑定 配置步骤

    之前写过一篇双网卡绑定的文章,如下: Oracle RAC 与 网卡绑定 http://blog.csdn.net/tianlesoftware/article/details/6189639 Ora ...

  4. Win10调整MTU值

    VPN连接后出现可以ping通google.com但是网页打不开的情况,需要修改MTU值,方法如下:用管理员身份运行cmd列出当前各网络的mtu值C:\Windows\system32>nets ...

  5. 【ORACLE】调整序列的当前种子值

    [ORACLE]调整序列的当前种子值 --必须用SYS用户执行脚本:或具有SYSDBA角色登录: CREATE OR replace ); v_step ):;--步进 tsql ); BEGIN E ...

  6. Linux上合理设置网卡的MTU值

    MTU:是网络的最大传输单元,通信术语:最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位).最大传输单元这个 ...

  7. oracle rac理解和用途扩展

    Oracle RAC的优势在于利用多个节点(数据库实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展.实现Oracle RAC需要 ...

  8. Oracle RAC 常用维护工具和命令

    Oracle RAC 常用维护工具和命令 分类: Oracle Basic Knowledge Oracle RAC2010-03-09 01:02 13987人阅读 评论(6) 收藏 举报 orac ...

  9. oracle rac常用的命令

    oracle rac常用的命令 节点层:olsnodes 网络层: oifcfg 集群层:crsctl,ocrcheck,ocrdump,ocrconfig 应用层:srvctl,onsctl,crs ...

  10. Vmware Workstation实现CentOS6.10_x64 下ORACLE RAC 11.2.0.4的搭建

    想必大家在学习ORACLE 11g时,都想搭建一个RAC的实验环境.在搭建RAC实验环境时,会碰到诸如IP怎么规划.虚拟机环境下怎么共享磁盘.ASM磁盘创建,以及安装过程中会遇到这样那样的问题.搭建一 ...

随机推荐

  1. 玩转AIGC,5分钟 Serverless 部署 Stable Diffustion 服务

    有没有一种可能,其实你早就在AIGC了?阿里云将提供免费Serverless函数计算产品资源,邀请你,体验一把AIGC级的毕加索.达芬奇.梵高等大师作画的快感.下面请尽情发挥你的想象空间!!双重奖品设 ...

  2. uni-app 预览pdf文件

    安卓uni-app实现pdf文件预览功能: 1.https://mozilla.github.io/pdf.js/getting_started/#download下载 放在根目录下, 2.新建一个w ...

  3. C#设计模式17——责任链模式的写法

    是什么: 责任链模式是一种行为型设计模式,它允许对象组成一个链并依次检查另一个对象是否可以处理请求.如果一个对象可以处理请求,它处理请求,并且负责将请求传递给下一个对象,直到请求被处理为止. 为什么: ...

  4. 01_设计一个有getMin功能的栈

    01_设计一个有getMin功能的栈 [题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] pop.push.getMin操作的时间复杂度都是O(1) 设计 ...

  5. idea导入maven项目结构不全

    本文为博主原创,转载请注明出处 将本地的项目导入idea中,其操作第一步为: File->open->选中导入maven项目的pom文件,正常情况通过该步骤项目就会导入到idea中. 通过 ...

  6. Java开发者的Python进修指南:JSON利器之官方json库、demjson和orjson的实用指南

    JSON JSON作为目前最流行的传输格式,在Python中也有相应的实现方式.由于JSON格式的文本可以跨平台并且简单易用,因此被广泛传播.因此,我们今天的主要讨论内容是如何熟练地应用Python的 ...

  7. [转帖]TiDB 6.1 单机环境 On openEular 2003 SP3

    https://tidb.net/book/book-rush/best-practice/other-practice/tidb61-on-openEular2003 背景​ 最近对国产操作系统很感 ...

  8. [转帖]针对容器的nginx优化

    针对容器的nginx优化 本篇文章介绍了 Nginx 在容器内使用遇到的CPU核数获取问题以及对应的解决方法. 回顾上篇文章:TCP 半连接队列和全连接队列 背景 容器技术越来越普遍,很多公司已经将容 ...

  9. [转帖]SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes

    https://www.cnblogs.com/klb561/p/11013774.html SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击.但是在特定情况下,严格的 SSH 公钥 ...

  10. [转帖]分析redis 大key

    http://www.lishuai.fun/2023/05/05/redis-bigkey/#/%E5%AE%89%E8%A3%85 redis-rdb-tools 是一个 python 的解析 r ...