Feb 22

[原]在红旗DC Server上实现Failover 晴

linuxing , 18:23 , 基础知识 » 硬件处理 , 评论(0) , 引用(0) , 阅读(22060) , Via 本站原创 | |
 在实际的项目中,为了保证生产系统在出现故障后可以自动回复,通常会采用冗余的设置,例如使用HA软件和使用多HBA卡连接盘柜。下面我就以IBM DS4300(旧型号FAStT 600)盘柜和IBM FC2-133光纤通道卡(对应QLA2340)在红旗DC Server 4.1上的项目来进行说明。
一、下面是连接的示意图
点击在新窗口中浏览此图片
二、准备工作
 要保证系统能正确的使用到HBA卡的Failover功能,必须要做好前期的准备工作。
 首先,我们需要想出可以实现的方法,原理可以参考:[总]从RDAC看到SAN的一些原理,由此可以看到,其中一种方法是加载IBM提供的RDAC驱动。但由于RDAC由各种限制,所以,我们可以也可以采用另一种方法。就是使用支持Failover的HBA卡驱动
 然后,我们先把系统部署好,这里用的是红旗DC Server 4.1 for x86,硬件平台是IBM X366服务器。
 安装的时候要注意,由于Linux 2.4核心和Qla2300驱动加载的前后顺序问题;在安装系统前,应该去掉HBA卡连接磁盘柜的光纤跳线,以免系统误安装在外挂磁盘柜上。
 而且,红旗DC Server 4.1自带的aacraid驱动比较老,不适用于IBM X366使用的RAID 8i卡,需要使用新驱动。下载地址如下:点击,下载后,解压并拷贝到软盘的根目录上。再使用linux expert,手动增加新aacraid驱动。
 经过一系列的拷贝安装后,系统会安装在本地的硬盘空间中。重新启动服务器,修改/etc/modules.conf文件,让系统正确的识别本地磁盘和外挂阵列卡的顺序问题,改为类似如下的内容:
引用
alias scsi_hostadapter0 aacraid
alias scsi_hostadapter1 qla2300

 最后,重新接上HBA卡的光纤线后,重启可以发现,在使用系统自带的qla2300驱动,应该可以看到2个相同的外挂磁盘空间。(假设有两块HBA卡,而外挂磁盘空间只有1个)
※注意,在继续后续的操作前,必须保证上述的步骤的正确安装,并能看到两个以上相同内容的外挂磁盘柜空间。
实际项目中,曾经试过由于盘柜上其中一个控制模块坏掉而没有发现,而导致使用系统自带的驱动也只能发现1个共享盘柜空间。之后更换盘柜的控制模块,并不能激活Failover功能,所以,这里是安装时候需要关注的地方。

三、编译支持Failover的驱动
 IBM FC2-133使用的是Adapter QLA2340的OEM产品,支持Failover的驱动可以从这里下载:点击
官方参考地址:点击(注意核心版本和是否支持Failover)
 安装方法如下:
1.把qla2x00-v7.05.00-fo-dist.tgz复制到服务器某目录上
2.运行
tar -xvzf qla2x00-v7.05.00-fo-dist.tgz

解压缩,这时会在当前目录下生成一个qlogic目录
3.进入qlogic目录,在里面运行
./drvrinstall

将会把源代码解压缩到当前目录
4.运行
make all SMP=1 install

命令, 将会从源代码中生成二进制文件, 并复制到正确的系统目录中
5.修改/etc/modules.conf文件,根据实际情况进行修改:
引用
alias scsi_hostadapter1 qla2300_conf
alias scsi_hostadapter2 qla2300

注意,qla2300_conf必须晚于aacraid驱动之后,但早于qla2300之前。
6.备份现在使用的核心镜像
cp /boot/initrd-2.4.21-9.30AXsmp.img /boot/initrd-2.4.21-9.30AXsmp .img.old

2.4.21是GNU/LINUX内核版本, 2.4.21-9.30  是红旗DC-SERVER 4.1的发行号,smp是多内核支持
7.运行
mkinitrd -f /boot/initrd-2.4.21-9.30AXsmp.img 2.4.21-9.30AXsmp  

后面的"2.4.21-9.30AXsmp "必须用uname -r显示一下, 确保正确, 表示当前运行中的内核版本.
8.修改完毕后,重启机器。重启后,用fdisk -l 来查看一下系统中原来所认到的 共享磁盘柜从2个变为1个。证明驱动已经生效。
四、测试
 为了确保Failover可以起作用,一般我们都会进行故障模拟。这里我们分开三种情况:
1、断开HBA卡和光纤交换机之间的连接
 使用下面的命令监控系统日志:
tail -f /var/log/messages

  当拔掉主HBA卡的光纤跳线的时候,系统日志会出现类似下面的错误:
引用
Feb 21 16:25:58 GZAMC-DB2 kernel: scsi(2): LIP reset occurred.
Feb 21 16:25:58 GZAMC-DB2 kernel: scsi(2): LOOP DOWN detected.

 经过大概1分钟后,Failover驱动检测到错误,发生切换:
引用
Feb 21 16:26:58 GZAMC-DB2 kernel: qla2x00: FAILOVER device 0 from 200700a0b81f42a9 -> 200600a0b81f42a9 - LUN 00, reason=0x2
Feb 21 16:26:58 GZAMC-DB2 kernel: qla2x00: FROM HBA 0 to HBA 1

 此时,访问共享盘柜会切换到从HBA卡上。当重新插上主HBA卡的光纤跳线后,链路自动恢复:
引用
Feb 21 16:28:10 GZAMC-DB2 kernel: scsi(2): LOOP UP detected.
Feb 21 16:28:10 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:28:10 GZAMC-DB2 kernel: scsi(2): Waiting for LIP to complete...
Feb 21 16:28:10 GZAMC-DB2 kernel: scsi(2): Topology - (F_Port), Host Loop address 0xffff
Feb 21 16:28:11 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:28:11 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:28:15 GZAMC-DB2 kernel: qla2x00: FAILBACK device 0 -> 200600a0b81f42a8 LUN 00
Feb 21 16:28:15 GZAMC-DB2 kernel: qla2x00: FROM HBA 1 to HBA 0

 注意,若拔出的不是主HBA卡,而是从HBA卡,这只会有报错信息,但并不会发生切换:
引用
Feb 21 16:29:28 GZAMC-DB2 kernel: scsi(3): LIP reset occurred.
Feb 21 16:29:28 GZAMC-DB2 kernel: scsi(3): LOOP DOWN detected.
Feb 21 16:29:57 GZAMC-DB2 kernel: scsi(3): LOOP UP detected.
Feb 21 16:29:57 GZAMC-DB2 kernel: scsi(3): Port database changed.
Feb 21 16:29:57 GZAMC-DB2 kernel: scsi(3): Waiting for LIP to complete...
Feb 21 16:29:57 GZAMC-DB2 kernel: scsi(3): Topology - (F_Port), Host Loop address 0xffff
Feb 21 16:29:58 GZAMC-DB2 kernel: scsi(3): Port database changed.
Feb 21 16:29:58 GZAMC-DB2 kernel: scsi(3): Port database changed.

2、直接关闭其中一台光纤交换机的电源
 这是模拟当光纤交换机出现问题,系统产生Failover的动作。当关闭其中一台光纤交换机后,其实等同于断开了其中1块HBA卡的连接,所以产生的报错和切换应该类同于上面的测试:
引用
Feb 21 16:30:43 GZAMC-DB2 kernel: scsi(2): LOOP DOWN detected.
Feb 21 16:31:44 GZAMC-DB2 kernel: qla2x00: FAILOVER device 0 from 200700a0b81f42a9 -> 200600a0b81f42a9 - LUN 00, reason=0x2
Feb 21 16:31:44 GZAMC-DB2 kernel: qla2x00: FROM HBA 0 to HBA 1

 重新打开光纤交换机的电源:
引用
Feb 21 16:35:56 GZAMC-DB2 kernel: scsi(2): LIP reset occurred.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): LIP reset occurred.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): LOOP UP detected.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): Waiting for LIP to complete...
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): Topology - (F_Port), Host Loop address 0xffff
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): RSCN database changed -0x1,0x0.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): RSCN database changed -0x1,0x200.
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): Waiting for LIP to complete...
Feb 21 16:36:07 GZAMC-DB2 kernel: scsi(2): Topology - (F_Port), Host Loop address 0xffff
Feb 21 16:36:08 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:36:08 GZAMC-DB2 kernel: scsi(2): Port database changed.
Feb 21 16:36:12 GZAMC-DB2 kernel: qla2x00: FAILBACK device 0 -> 200600a0b81f42a8 LUN 00
Feb 21 16:36:12 GZAMC-DB2 kernel: qla2x00: FROM HBA 1 to HBA 0

 从这里可以看到,不同的地方是,报错信息一直在主HBA卡上出现,不会给出从HBA卡的出错信息。(因为从HBA卡连接的光纤交换机是正常的,链路也正常)
3、断开其中一台光纤交换机和盘柜控制器的连接
 当断开的盘柜控制器是从控制器B,则只会出现报错信息,而不会发生切换的:
引用
Feb 21 16:40:29 GZAMC-DB2 kernel: scsi(3): RSCN database changed -0x1,0x0.
Feb 21 16:40:29 GZAMC-DB2 kernel: scsi(3): Waiting for LIP to complete...
Feb 21 16:40:29 GZAMC-DB2 kernel: scsi(3): Topology - (F_Port), Host Loop address 0xffff

 相反,如果断开的是盘柜的主控制器A,则应该会检测到错误,而且经过超时时间后,会产生Failover的动作:
引用
Feb 21 16:45:24 GZAMC-DB2 kernel: scsi(2): RSCN database changed -0x1,0x0.
Feb 21 16:45:24 GZAMC-DB2 kernel: scsi(2): Waiting for LIP to complete...
Feb 21 16:45:24 GZAMC-DB2 kernel: scsi(2): Topology - (F_Port), Host Loop address 0xffff
Feb 21 16:46:24 GZAMC-DB2 kernel: qla2x00: FAILOVER device 0 from 200700a0b81f42a9 -> 200600a0b81f42a9 - LUN 00, reason=0x1
Feb 21 16:46:24 GZAMC-DB2 kernel: qla2x00: FROM HBA 0 to HBA 1

 需要注意的就是,当重新接上原来的控制器A后,IBM的盘柜是不会从控制器B切换到控制器A的,而是继续保持在控制器B上。此时,控制器B即为主控制器。这是和上面测试HBA卡结果不同的地方。
五、其他设置
1、Failover监测的时候,由编译前的文件决定,需要更改的话,需要编译重新安装驱动;
2、本文说明的只是硬件上使用HBA卡结合Failover实现的冗余,不能代替应用软件上的冗余;应用软件和网络的冗余,可以使用红旗的HA软件实现。
3、若使用RDAC驱动实现Failover,则HBA卡的驱动不能使用支持failover的驱动,这需要特别留意。

※2006-02-22 第一次编写
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]