Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594948
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类: LINUX

2013-04-09 04:42:37

原文地址:HA中磁盘心跳失效的原因 作者:fan3838

    今天安徽邮政的HA出现问题,发来的日志信息可以看到,磁盘心跳异常,全部都是如下一条错误:

[E] 11/17 10:24:53.889 [29453:b6311bb0] diskhb.c:2468 readthread open(/dev/raw/raw1) failed(errno:6)


    从发来的信息中可以看出,系统中存在一条raw信息:/dev/raw/raw1:  bound to major 8, minor 1,但是此raw信息是否可用呢?从HA日志中的提示可以判断,这个/dev/raw/raw1肯定是有问题的,那么到底是什么问题,就需要从major 8, minor 1设备来分析了。这个major 8, minor 1在系统中是/dev/sda1,当然从HA配置文件clp.conf中也 可以看出来,磁盘心跳用的是/dev/sda1。
    发来的系统信息中,没有fdisk和sfdisk相关信息,message中最近没有重启记录,也看不出来是否存在/dev/sda1。不过/proc/partitions中还是有迹可循的。从partitions中可以看出,sda和sdc,sdb和sdd是双链路的两个设备 和影像,也就是说存储上的一个LUN,因为双链路在系统中识别成了sda和sdc,另一个LUN在系统中识别成了sdb和sdd,这一变二之后,肯定有一个链路是无法操作的。

fan3838@fan3838:gias1$ cat proc/partitions
major minor #blocks name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq

  58 0 37748736 lvma 0 0 0 0 0 0 0 0 0 0 0
  58 1 41943040 lvmb 0 0 0 0 0 0 0 0 0 0 0
  58 2 51216384 lvmc 0 0 0 0 0 0 0 0 0 0 0
  58 3 859832320 lvmd 0 0 0 0 0 0 0 0 0 0 0
 104 0 71126640 cciss/c0d0 141192 165406 2446534 589470 5899544 10331265 130162648 1670890 474 401900 2299050
 104 1 2048144 cciss/c0d0p1 19670 8332 223994 174210 3781386 8260656 96607464 567320 471 43200 749510
 104 2 204000 cciss/c0d0p2 49 91 280 170 99 89 376 2350 0 1810 2520
 104 3 8192640 cciss/c0d0p3 36 147 456 140 4 4 64 210 0 350 350
 104 4 1 cciss/c0d0p4 1 0 2 10 0 0 0 0 0 10 10
 104 5 6144464 cciss/c0d0p5 53200 6221 474690 76220 756658 1144841 15224960 770100 1 80740 877000
 104 6 5120384 cciss/c0d0p6 28005 140855 1350370 72100 277455 154775 3458544 77960 1 43970 150080
 104 7 5120384 cciss/c0d0p7 71 99 682 330 36588 53036 749192 6670 0 2670 7000
 104 8 5120384 cciss/c0d0p8 1041 805 14090 16850 568814 307955 7014336 27610 1 8440 44460
 104 9 10240784 cciss/c0d0p9 39086 8693 381578 249340 478540 409909 7107712 218670 0 246090 468140
   8 0 430122584 sda 10 30 80 60 0 0 0 0 0 60 60
   8 16 860244920 sdb 10 30 80 140 0 0 0 0 0 140 140
   8 32 430122584 sdc 24018625 47244167 570095562 23493564 11105650 6794961 143210040 7047424 0 26104810 30545538
   8 33 104391 sdc1 25 143 336 10 0 0 0 0 0 10 10
   8 34 58605120 sdc2 453266 1068344 12170840 3971190 970877 2603092 28596904 3397564 0 734700 7376624
   8 35 68364607 sdc3 23565292 46175421 557923784 19524764 10134773 4191869 114613136 3651820 0 26073310 23173264
   8 36 1 sdc4 1 0 2 0 0 0 0 0 0 0 0
   8 37 56235501 sdc5 20 120 280 0 0 0 0 0 0 0 0
   8 48 860244920 sdd 29 343 744 1020 0 0 0 0 0 1000 1020


    从partitions中可以看出,现在sdc上是有分区表的,而sda上没有,但是当时部署HA的时候,明明写的sda1,说明当时sda上是有分区表的。那么,这只有一种解释:当时sda上有分区表是因为sda所用的链路是链接存储的主控制器的,现在存储控制器发生了切换,原来的standby的控制器成了active的了,原来sda变成不可操作了,而sdc变成了可操作的了,sdc上也有了分区表。当然上述的判断是成立的,而且从HA中也可以得到证实。HA中挂在了三个逻辑卷,因为逻辑卷跟设备名关系不大,只要存储上LUN上有当初的逻辑卷信息,即使设备名变化,逻辑卷还都是正常的。从proc/lvm/global中可以看出现在逻辑卷使用了sdc2/sdc5,sdc3,sdd,这也能简介证明sda和sdc分区表的变化是存储控制器发生切换造成的。

fan3838@fan3838:lvm$ cat global
LVM module LVM version 1.0.8(17/11/2003)

Total: 3 VGs 4 PVs 4 LVs (3 LVs open 3 times)

Global: 495670 bytes malloced IOP version: 10 20 days 3:20:24 active

VG: vgdata1 [2 PV, 2 LV/2 open] PE Size: 32768 KB
  Usage [KB/PE]: 114753536 /3502 total 79691776 /2432 used 35061760 /1070 free
  PVs: [AA] sdc2 58556416 /1787 58556416 /1787 0 /0
       [AA] sdc5 56197120 /1715 21135360 /645 35061760 /1070
    LVs: [AWDL ] lv_archivelog 37748736 /1152 1x open
         [AWDL ] lv_backup 41943040 /1280 1x open

VG: vgdata2 [1 PV, 1 LV/1 open] PE Size: 32768 KB
  Usage [KB/PE]: 68321280 /2085 total 51216384 /1563 used 17104896 /522 free
  PV: [AA] sdc3 68321280 /2085 51216384 /1563 17104896 /522
    LV: [AWDL ] lv_oradata 51216384 /1563 1x open

VG: vghist [1 PV, 1 LV/0 open] PE Size: 32768 KB
  Usage [KB/PE]: 860192768 /26251 total 859832320 /26240 used 360448 /11 free
  PV: [AA] sdd 860192768 /26251 859832320 /26240 360448 /11
    LV: [AWDL ] lvhist 859832320 /26240 close


    问题原因找到了,解决方法有二:1、更改HA配置文件,将磁盘心跳由sda1改为sdc1。不过如果存储控制器再发生切换,HA磁盘心跳还是会报错。2、彻底解决办法是做链路冗余。从发来的系统信息可以看出用的qlagic光纤卡,可以通过qlagic光纤卡模块的failover功能实现链路冗余。

阅读(903) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~