赞
踩
某用户场景下使用两台存储设备为前端两台业务主机提供存储资源,用户希望各有一份数据落入到对应的存储设备中,并且当其中某一台业务主机发生故障时,可以快速在另外一台主机上继续启用业务;那么配置 LVM Mirror 创建共享卷不失为是一种解决方法。
本文将通过一台 iSCSI Server 提供多个块设备给两台业务主机使用,以此来模拟用户场景,目前两台业务主机识别到的块设备信息如下所示:
[root@iscsi-client1 ~]# for i in {a..d};do echo "/dev/sd$i `/lib/udev/scsi_id -g -d /dev/sd$i`";done
/dev/sda 36001405775772069d764482a66301992
/dev/sdb 360014058bfdc6d5e5e34b88ad4cdcd88
/dev/sdc 360014056d29955d120f4783ad95480ef
/dev/sdd 36001405795c8999ccd34cf7920d0cf91
[root@iscsi-client2 ~]# for i in {a..d};do echo "/dev/sd$i `/lib/udev/scsi_id -g -d /dev/sd$i`";done
/dev/sda 36001405775772069d764482a66301992
/dev/sdb 360014058bfdc6d5e5e34b88ad4cdcd88
/dev/sdc 360014056d29955d120f4783ad95480ef
/dev/sdd 36001405795c8999ccd34cf7920d0cf91
通过上面的信息不难发现,两台业务主机都识别到了 sda-sdd 四块磁盘,实际上就是 iSCSI Server 通过网络形式将自己的四块磁盘同时映射给两台业务主机;其中 sda 设备和 sdb 设备将模拟用户场景中两台存储设备各自映射的磁盘。
我们需要将 sda 设备和 sdb 设备做成 LVM Mirror 为应用程序提供文件系统,默认我们在业务主机1(iscsi-client1)上激活 VG 并使用,当业务主机1发生故障时,可以快速在业务主机2(iscsi-client2)上激活 VG 并使用,以确保业务迅速恢复,逻辑示意图如下所示:
[root@iscsi-client1 ~]# pvcreate /dev/sda /dev/sdb
Physical volume "/dev/sda" successfully created.
Physical volume "/dev/sdb" successfully created.
[root@iscsi-client1 ~]# vgcreate vg01_mirror /dev/sda /dev/sdb
Volume group "vg01_mirror" successfully created
[root@iscsi-client1 ~]# lvcreate -n lv01_mirror -m1 -l 100%FREE vg01_mirror /dev/sda /dev/sdb
Logical volume "lv01_mirror" created.
[root@iscsi-client1 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-a-r--- 49.99g 1.49 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- 49.99g /dev/sdb(1)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor--- 4.00m /dev/sdb(0)
[root@iscsi-client1 ~]# mkfs.xfs /dev/vg01_mirror/lv01_mirror
[root@iscsi-client1 ~]# mkdir /data
[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data
[root@iscsi-client1 ~]# for i in {1..100};do echo $i >> /data/test.txt;done
所谓计划内切换,即管理员为了验证或者演练所执行的计划内的变更,而不是在发生异常后进行的紧急变更。
既然是计划内切换,那么第一步应该是停用和当前 /data 文件系统有关的应用或业务,保证上层没有 I/O 继续写入;我们可以使用 lsof 来检查当前是否有进程在占用此文件系统。
[root@iscsi-client1 ~]# lsof /data
当确认没有 I/O 继续写入 /data 文件系统,此时可以进行卸载操作。
[root@iscsi-client1 ~]# umount /data
[root@iscsi-client1 ~]# lvchange -an /dev/vg01_mirror/lv01_mirror
[root@iscsi-client1 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi---r--- 49.99g lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi---r--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi---r--- 49.99g /dev/sdb(1)
[lv01_mirror_rmeta_0] vg01_mirror ewi---r--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi---r--- 4.00m /dev/sdb(0)
[root@iscsi-client1 ~]# vgchange -an vg01_mirror
0 logical volume(s) in volume group "vg01_mirror" now active
[root@iscsi-client1 ~]# vgexport vg01_mirror
Volume group "vg01_mirror" successfully exported
[root@iscsi-client2 ~]# vgimport vg01_mirror
Volume group "vg01_mirror" successfully imported
[root@iscsi-client2 ~]# vgchange -ay vg01_mirror
1 logical volume(s) in volume group "vg01_mirror" now active
[root@iscsi-client2 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root rhel -wi-ao---- <83.51g /dev/vda3(4096)
swap rhel -wi-ao---- 16.00g /dev/vda3(0)
lv01_mirror vg01_mirror rwi-a-r--- 49.99g 71.61 lv01_mirror_rimage_0(0),lv01_mirror_rimage_1(0)
[lv01_mirror_rimage_0] vg01_mirror Iwi-aor--- 49.99g /dev/sda(1)
[lv01_mirror_rimage_1] vg01_mirror Iwi-aor--- 49.99g /dev/sdb(1)
[lv01_mirror_rmeta_0] vg01_mirror ewi-aor--- 4.00m /dev/sda(0)
[lv01_mirror_rmeta_1] vg01_mirror ewi-aor--- 4.00m /dev/sdb(0)
[root@iscsi-client2 ~]# mkdir /data
[root@iscsi-client2 ~]# mount /dev/vg01_mirror/lv01_mirror /data
[root@iscsi-client2 ~]# ls -ltr /data/
total 4
-rw-r--r-- 1 root root 292 Sep 21 15:37 test.txt
[root@iscsi-client2 ~]# for i in {101..200};do echo $i >> /data/test.txt;done
[root@iscsi-client2 ~]# tail -n 10 /data/test.txt
191
192
193
194
195
196
197
198
199
200
直接将节点二关机,以此模拟生产业务主机宕机。
[root@iscsi-client2 ~]# shutdown -h now
[root@iscsi-client1 ~]# vgimport vg01_mirror
Volume group "vg01_mirror" is not exported
[root@iscsi-client1 ~]# vgchange -ay vg01_mirror
1 logical volume(s) in volume group "vg01_mirror" now active
[root@iscsi-client1 ~]# mount /dev/vg01_mirror/lv01_mirror /data
用户的这种场景主要是为了提高架构的可靠性和高可用性,当后端任意一台存储设备出现故障,或者前端任意一台业务主机出现故障,都可以快速恢复业务。
博主目前接触到要使用 LVM Mirror 的场景并不多,在这种高可用场景中,规划设计的时候可以考虑存储双活方案,或者应用本身可以提供双活或主备的切换方案。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。