客户的服务器从本地硬盘启动,服务需要访问共享存储卷,这个卷在同一时刻只能由单个节点访问,而且服务器有多个到存储的冗余路径,客户不知道如何配置RHEL访问阵列输出的卷,而且客户需要安装和设置HA集群。
配置实现该目的有多个方法,这里将使用最适用的方法,但是需要先明确以下内容:
* 这里假设客户对共享存储以及相关组件和技术已经有基本的概念。 * 阵列在启动时通过初始ramdisk会自动激活并被加载,在RHEL3U3中不支持,在以后的版本中会支持。 * 在启动时在多个节点共享的多路径存储上使用LVM有一些已经知道的问题,如果节点只有一条路径连接到存储,那不会有问题的。 * 如果在本地磁盘和共享存储上都使用LVM,可能会遇到一些问题,这个问题是和内核加载顺序有关的。最好是先加载HBA卡和多路径驱动,然后加载LVM驱动。 * 你需要手工编写服务脚本来加载和卸载共享存储磁盘,下面会有一个例子。 * 如果这里使用了多个,冗余的交换机和控制器,在控制器出现故障时,系统失效切换可能会出现问题。 * 在进行其他配置以前,建议彻底测试共享存储配置。 * 由于硬件的多样性,这里举例的配置不一定适合你的情况,所以您应该联系硬件厂商资讯。
假设你的HBA卡是X-AMPLE-1000,内核模块为xample1000,存储上的卷显示为/dev/sda, /dev/sdb, /dev/sdc, 和 /dev/sdd。
配置步骤:
1. 验证支持多路径的md和lvm没有被加载,这些模块名字为multipath, LVM-mod,使用lsmod可以列出目前内核加载的所有模块,可以使用rmmod来删除某个模块。 2. 为HBA加载驱动,假设这里在/etc/modules.conf已经做了配置,可以使用modprobe xample1000载入。 3. 使用devlabel工具来添加你的设备:devlabel add -d <device> -s /dev/exampleName --multipath ,这里<device>是设备名,例如:
# rmmod LVM-mod
# rmmod multipath
# modprobe xample1000
# devlabel add -d /dev/sda /dev/exampleName --multipath
SYMLINK: /dev/exampleName_multipath0 -> /dev/sda
Added /dev/exampleName_multipath0 to /etc/sysconfig/devlabel
# devlabel add -d /dev/sdb /dev/exampleName --multipath
SYMLINK: /dev/exampleName_multipath1 -> /dev/sdb
Added /dev/exampleName_multipath1 to /etc/sysconfig/devlabel
# devlabel add -d /dev/sdc /dev/exampleName --multipath
SYMLINK: /dev/exampleName_multipath2 -> /dev/sdc
Added /dev/exampleName_multipath2 to /etc/sysconfig/devlabel
# devlabel add -d /dev/sdc /dev/exampleName --multipath
SYMLINK: /dev/exampleName_multipath3 -> /dev/sdd
Added /dev/exampleName_multipath3 to /etc/sysconfig/devlabel
4. 创建,激活和启动md的多路径设备:
mdadm --create /dev/md0 --level=multipath --raid-devices=4
/dev/exampleName_multipath0 /dev/exampleName_multipath1
/dev/exampleName_multipath2 /dev/exampleName_multipath3
5. 加载LVM模块,并使用vgscan扫描所有设备。 6. 把md0设备转换为物理卷:pvcreate /dev/md0 7. 创建卷组:vgcreate vg0 /dev/md0 command. 8. 创建逻辑卷lvcreate -L <volume size> -n lv0 vg0 9. 创建文件系统:
mke2fs -j /dev/vg0/lv0
10. 最后,加载逻辑卷: mount /dev/vg0/lv0 /mnt/test
# mdadm --create /dev/md0 --level=multipath --raid-devices=4 \
> /dev/exampleName_multipath0 \
> /dev/exampleName_multipath1 \
> /dev/exampleName_multipath2 \
> /dev/exampleName_multipath3
mdadm: array /dev/md0 started.
# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group
# pvcreate /dev/md0
pvcreate -- physical volume "/dev/md0" successfully created
# vgcreate vg0 /dev/md0
vgcreate -- INFO: using default physical extent size 32 MB
vgcreate -- INFO: maximum logical volume size is 2 Terabyte
vgcreate -- doing automatic backup of volume group "vg0"
vgcreate -- volume group "vg0" successfully created and activated
# lvcreate -L 1G -n lv0 vg0
lvcreate -- doing automatic backup of "vg0"
lvcreate -- logical volume "/dev/vg0/lv0" successfully created
# mke2fs -j /dev/vg0/lv0
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/vg0/lv0 /mnt/test
# touch /mnt/test/test_file
# ls /mnt/test
test_file
需要注意的是:为了让系统在启动时自动加载文件系统,建议创建一个简单的sysvinit脚本,来激活和使用多路径设备,可以使用mdadm --assemble <md device> <member devices>来实现,这将创建/dev/md?设备,然后加载LVM模块,运行vgscan,然后加载文件系统:
# mdadm --assemble /dev/md0 \ > /dev/sandisk_multipath0 \ > /dev/sandisk_multipath1 \ > /dev/sandisk_multipath2 \ > /dev/sandisk_multipath3 mdadm: /dev/md0 has been started with 1 drive and 3 spares. # modprobe lvm-mod # vgscan vgscan -- reading all physical volumes (this may take a while...) vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created vgscan -- WARNING: This program does not do a VGDA backup of your volume group # mount /dev/vg0/lv0 /mnt/whereever
正如我们前面提到的,如果系统也存放在LVM中,有时候会出现问题,因为vgscan在扫描物理设备时,会在发现md之前就报错退出。如果是这种情况,用户可能不能对系统和SAN文件系统同时使用LVM,这个问题在RHEL3U3以后版本中可能会被修复。
示例sysvinit脚本:
#!/bin/bash # # chkconfig: 235 70 30 # activate in runlevels 2, 3, and 5 # start with a priority of 70 and stop with 30 # description: Start up multipath SAN device # processname: sanstart # source function library . /etc/init.d/functions RETVAL=0
start() {
echo -n $"Starting multipath SAN devices: "
mdadm --assemble /dev/md0 /dev/sandisk_multipath0 \ /dev/sandisk_multipath1 \ /dev/sandisk_multipath2 \ /dev/sandisk_multipath3 let "RETVAL += $?" modprobe lvm-mod let "RETVAL += $?" vgchange -ay let "RETVAL += $?" vgscan let "RETVAL += $?" mount /dev/vg0/lv0 /mnt/whereever let "RETVAL += $?" return $RETVAL }
stop() {
echo -n $"Shutting down multipath SAN devices: "
umount /mnt/whereever let "RETVAL += $?" vgchange -an rmmod lvm-mod let "RETVAL += $?" mdadm --stop /dev/md0 let "RETVAL += $?" return $RETVAL }
case "$1" in start)
start ;;
stop)
stop ;;
restart|reload)
stop start RETVAL=$? ;;
*)
echo $"Usage: $0 {start|stop|restart}" exit 1
esac
exit $RETVAL