Feb
22
[原]在红旗DC Server上实现Failover
在实际的项目中,为了保证生产系统在出现故障后可以自动回复,通常会采用冗余的设置,例如使用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文件,让系统正确的识别本地磁盘和外挂阵列卡的顺序问题,改为类似如下的内容:
最后,重新接上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.运行
解压缩,这时会在当前目录下生成一个qlogic目录
3.进入qlogic目录,在里面运行
将会把源代码解压缩到当前目录
4.运行
命令, 将会从源代码中生成二进制文件, 并复制到正确的系统目录中
5.修改/etc/modules.conf文件,根据实际情况进行修改:
注意,qla2300_conf必须晚于aacraid驱动之后,但早于qla2300之前。
6.备份现在使用的核心镜像
2.4.21是GNU/LINUX内核版本, 2.4.21-9.30 是红旗DC-SERVER 4.1的发行号,smp是多内核支持
7.运行
后面的"2.4.21-9.30AXsmp "必须用uname -r显示一下, 确保正确, 表示当前运行中的内核版本.
8.修改完毕后,重启机器。重启后,用fdisk -l 来查看一下系统中原来所认到的 共享磁盘柜从2个变为1个。证明驱动已经生效。
四、测试
为了确保Failover可以起作用,一般我们都会进行故障模拟。这里我们分开三种情况:
1、断开HBA卡和光纤交换机之间的连接
使用下面的命令监控系统日志:
当拔掉主HBA卡的光纤跳线的时候,系统日志会出现类似下面的错误:
经过大概1分钟后,Failover驱动检测到错误,发生切换:
此时,访问共享盘柜会切换到从HBA卡上。当重新插上主HBA卡的光纤跳线后,链路自动恢复:
注意,若拔出的不是主HBA卡,而是从HBA卡,这只会有报错信息,但并不会发生切换:
2、直接关闭其中一台光纤交换机的电源
这是模拟当光纤交换机出现问题,系统产生Failover的动作。当关闭其中一台光纤交换机后,其实等同于断开了其中1块HBA卡的连接,所以产生的报错和切换应该类同于上面的测试:
重新打开光纤交换机的电源:
从这里可以看到,不同的地方是,报错信息一直在主HBA卡上出现,不会给出从HBA卡的出错信息。(因为从HBA卡连接的光纤交换机是正常的,链路也正常)
3、断开其中一台光纤交换机和盘柜控制器的连接
当断开的盘柜控制器是从控制器B,则只会出现报错信息,而不会发生切换的:
相反,如果断开的是盘柜的主控制器A,则应该会检测到错误,而且经过超时时间后,会产生Failover的动作:
需要注意的就是,当重新接上原来的控制器A后,IBM的盘柜是不会从控制器B切换到控制器A的,而是继续保持在控制器B上。此时,控制器B即为主控制器。这是和上面测试HBA卡结果不同的地方。
五、其他设置
1、Failover监测的时候,由编译前的文件决定,需要更改的话,需要编译重新安装驱动;
2、本文说明的只是硬件上使用HBA卡结合Failover实现的冗余,不能代替应用软件上的冗余;应用软件和网络的冗余,可以使用红旗的HA软件实现。
3、若使用RDAC驱动实现Failover,则HBA卡的驱动不能使用支持failover的驱动,这需要特别留意。
※2006-02-22 第一次编写
一、下面是连接的示意图
二、准备工作
要保证系统能正确的使用到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
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
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.
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
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
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.
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: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
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
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
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 第一次编写