本篇的标题似乎有点复杂,但能比较好的描述本篇要介绍的东西。现网一套oracle rac,使用的rhel系统,现有kernel版本有一个遇到分母为0,内核检测到会抛出异常,并致使系统宕机的bug,解决该问题需要进行kernel升级。而和Mellanox和EMC相关人员对接后,确认InfiniBand驱动和EMC POWerpath都需要相应升级。这里记录下该升级的步骤。
一、powerpath多路径信息备份
升级之前需要,检查原来的power path路径信息并保存到文件、升级之前需要export导出power path配置文件、在升级PP 之前还需要对license 和PP 的配置文件做好备份。具体操作如下:
mkdir emcbak && cd emcbak powermt display > pp.txt powermt display dev=all > pp_all.txt emcpadm export_mappings -x -f ppmap.map cp /etc/emcp_registration file . cp /etc/powermt.custom . cp /etc/powermt_custom.xml .
在备份完成后,最好再做如下的一个检查,确认当前导出的配置文件和现有配置是一致的。
emcpadm check_mappings -x -f ppmap.map
如果是一致的,所有的路径都会提示no change 。
二、升级kernel
先配置好高版本的源,使用如下命令即可,操作比较简单。
# yum -y install kernel* # yum -y update
执行yum update是顺便升级下的相应的软件。如果条件允许,建议做此操作。升级完成后,检查/boot下的grub.conf文件,确认新的kernel内核为第一引导。
三、升级ib驱动
mellanox官方对应的驱动下载链接为:http://ch.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers ,具体如下:
主机重启后,使用新的kernel ,挂载下的mellanox 镜像,挂载并进行安装,安装过程中自动会卸载原来的版本,操作命令如下:
mount -o loop MLNX_OFED_LINUX-3.4-1.0.0.0-rhel6.8-x86_64.iso /mnt/ cd /mnt ./mlnxofedinstall --all
注:如果想要先卸载,也可以直接执行命令perl /mnt/uninstall.sh 。
四、升级powerpath
升级完 ib 驱动后,需要再次重启OS ,并在系统下检查ib 网卡的可用性。确认正常后,开始emc多路径软件的升级(该升级为必须升级,不然会发现多路径启动不成功) 。下载官方给出的升级包EMCPower.LINUX.6.2.0.b051.tar.gz (EMC包无法直接下载,需联系对应的售后才能获取),解压该包后,找到对应版本的rpm包,进行升级。
rpm -Uvh EMCPower.LINUX-6.2.0.00.00-051.RHEL6.x86_64.rpm
上面选择的升级安装,不是先卸载再安装,这样会保证配置都在。升级完后会有如下提示:
在启动多路径服务之前,确认配置一致:
emcpadm check_mappings -x -f ppmap.map //检查配置确认是否一致 emcpadm import_mappings -x -f ppmap.map //如果不一致,用备份导入
以上操作完成后,再检查下开机自启动等是否有问题,没有问题,建议再做最后一次重启,以验证后续重启后不会有问题。
五、最后及相关
1、多路径优化
从上面的操作可以发现,主机层面的变动,对应用层面的影响比较大,其中多路径这部分实际上是可以在设计之初规避掉的。如果使用系统自带的多路径软件multipath,就不会存多路径需要升级的问题 。
2、内核bug分析相关
redhat官方对此bug的分析内容如下:
1. 系统由于kernel panic 宕机,kernel panic原因是"divide error: 0000 [#1] SMP ", 即系统运算过程中,遇到分母为0,内核检测到,抛出异常,致使系统宕机. 分析过程: crash> sys KERNEL: /cores/retrace/repos/kernel/x86_64/usr/lib/debug/lib/modules/2.6.32-279.el6.x86_64/vmlinux DUMPFILE: /cores/retrace/tasks/213641603/crash/vmcore [PARTIAL DUMP] CPUS: 48 DATE: Sat Nov 12 19:51:23 2016 UPTIME: 261 days, 22:52:47 LOAD AVERAGE: 6.18, 5.64, 5.11 TASKS: 3184 NODENAME: irora17 RELEASE: 2.6.32-279.el6.x86_64 VERSION: #1 SMP Wed Jun 13 18:24:36 EDT 2012 MACHINE: x86_64 (2394 Mhz) MEMORY: 128 GB PANIC: "divide error: 0000 [#1] SMP " crash> bt PID: 3398 TASK: ffff881c340a4ae0 CPU: 26 COMMAND: "oracle" #0 [ffff881909d3bb70] machine_kexec at ffffffff8103281b #1 [ffff881909d3bbd0] crash_kexec at ffffffff810ba662 #2 [ffff881909d3bca0] oops_end at ffffffff81501290 #3 [ffff881909d3bcd0] die at ffffffff8100f26b #4 [ffff881909d3bd00] do_trap at ffffffff81500b84 #5 [ffff881909d3bd60] do_divide_error at ffffffff8100cfff #6 [ffff881909d3be00] divide_error at ffffffff8100be7b [exception RIP: thread_group_times+86] RIP: ffffffff81058226 RSP: ffff881909d3beb8 RFLAGS: 00010046 RAX: 84d6dade97614932 RBX: ffff881c34c10400 RCX: 00000001064e96a3 RDX: 0000000000000000 RSI: ffff881909d3beb8 RDI: 000fa27caa0f3a70 RBP: ffff881909d3bef8 R8: 0000000081a52f26 R9: ffff881c34c10400 R10: 000000131172bd10 R11: 0000000000000202 R12: ffff881909d3bf08 R13: ffff881909d3bf10 R14: 0000000000000000 R15: 00000012f1c81168 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #7 [ffff881909d3bf00] do_sys_times at ffffffff8108979d #8 [ffff881909d3bf40] sys_times at ffffffff81089864 #9 [ffff881909d3bf80] system_call_fastpath at ffffffff8100b0f2 RIP: 00000034e1aab3fa RSP: 00007fff6fab93a0 RFLAGS: 00000202 RAX: 0000000000000064 RBX: ffffffff8100b0f2 RCX: 0000000000000001 RDX: 00007fff6fab84c0 RSI: 0000000000000005 RDI: 00007fff6fab84c0 RBP: 00007fff6fab84e0 R8: 00007fff6fab9888 R9: 0000000000000004 R10: 000000131172bd10 R11: 0000000000000202 R12: 00000012b1a4d0d0 R13: 00000012e19eb450 R14: 00007fff6faba000 R15: 00000012b1a4d0d0 ORIG_RAX: 0000000000000064 CS: 0033 SS: 002b crash> dis -r thread_group_times+86 0xffffffff810581d0 <thread_group_times>: push %rbp 0xffffffff810581d1 <thread_group_times+1>: mov %rsp,%rbp 0xffffffff810581d4 <thread_group_times+4>: sub $0x40,%rsp 0xffffffff810581d8 <thread_group_times+8>: mov %rbx,-0x20(%rbp) 0xffffffff810581dc <thread_group_times+12>: mov %r12,-0x18(%rbp) 0xffffffff810581e0 <thread_group_times+16>: mov %r13,-0x10(%rbp) 0xffffffff810581e4 <thread_group_times+20>: mov %r14,-0x8(%rbp) 0xffffffff810581e8 <thread_group_times+24>: nopl 0x0(%rax,%rax,1) 0xffffffff810581ed <thread_group_times+29>: mov 0x768(%rdi),%rbx 0xffffffff810581f4 <thread_group_times+36>: mov %rsi,%r13 0xffffffff810581f7 <thread_group_times+39>: lea -0x40(%rbp),%rsi 0xffffffff810581fb <thread_group_times+43>: mov %rdx,%r12 0xffffffff810581fe <thread_group_times+46>: callq 0xffffffff81093680 <thread_group_cputime> 0xffffffff81058203 <thread_group_times+51>: mov -0x38(%rbp),%r14 0xffffffff81058207 <thread_group_times+55>: add -0x40(%rbp),%r14 0xffffffff8105820b <thread_group_times+59>: mov -0x30(%rbp),%rdi 0xffffffff8105820f <thread_group_times+63>: callq 0xffffffff81071c80 <nsecs_to_jiffies> 0xffffffff81058214 <thread_group_times+68>: test %r14,%r14 0xffffffff81058217 <thread_group_times+71>: mov %rax,%rcx 0xffffffff8105821a <thread_group_times+74>: je 0xffffffff81058229 <thread_group_times+89> 0xffffffff8105821c <thread_group_times+76>: imul -0x40(%rbp),%rax 0xffffffff81058221 <thread_group_times+81>: mov %r14d,%r14d 0xffffffff81058224 <thread_group_times+84>: xor %edx,%edx 0xffffffff81058226 <thread_group_times+86>: div %r14 <---------- %r14值为0, 此处做除法运算,分母为0,导致的异常. 2. 相关kbase: https://access.redhat.com/solutions/185843 解决方法: 根据kbase描述,您需要升级内核版本至2.6.32-279.11.1.el6.x86_64或更高规避此问题.