赞
踩
clvm(The Clustered Logical Volume Manager),是lvm的一些列集群扩展,这些扩展使得集群中的节点能够通过lvm来管理共享存储,例如SAN.
那么我们什么时候使用clvm呢?
当我们的集群系统中多个活跃节点都需要访问同一个存储时,我们就必须使用clvm。clvm的原理是在存储上建立lvm,然后通过锁控制使得用户进行配置和管理存储。
例如当我们集群使用gfs挂在的共享存储出问题,需要将其挂在到另一台服务器上来备份数据,由于这台服务器是一台独立的机器,没有集群中的环境,就会出现一些问题。
1.我们先将存储挂载到新服务器上
[root@test ~]#iscsiadm -m discovery -t sendtargets -p 10.20.3.10
[root@test ~]#iscsiadm -m node -T iqn.2001-05.com.equallogic:0-8a0906-20ed24b07-fa4000047ac56fcb-pic-new-01 -p 10.20.3.10:3260 -l
[root@test ~]#fdisk -l
Disk /dev/sdb: 1438.7 GB, 1438679826432 bytes
255 heads, 63 sectors/track, 174909 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd3997559
Device Boot Start End Blocks Id System
/dev/sdb1 1 174910 1404959744 8e Linux LVM
Disk /dev/mapper/vg_test-test: 590.6 GB, 590633500672 bytes
255 heads, 63 sectors/track, 71807 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 1073.7 GB, 1073747066880 bytes
255 heads, 63 sectors/track, 130542 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
从上面看能够正常挂在。
2.查看存储上的pv是否存在
[root@test ~]# pvs
Skipping clustered volume group cluster_vg_test
Skipping volume group cluster_vg_test
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_test lvm2 a-- 7.81g 0
/dev/sda3 vg_test lvm2 a-- 550.07g 0
上面提示“skipping clustered volume group cluster_vg_test”,其中cluster_vg_test正是我们在集群环境中基于存储创建lvm的vg名称,但是它被跳过了。这是由于cluster_vg_test是基于clustered创建的,而现在的这台服务器上是没有clustered扩展的,因此会被忽略,我们可以通过设置lvm的locking_type=0来解决。
[root@test ~]# vgchange -cn cluster_vg_test --config 'global {locking_type = 0}'
WARNING: Locking disabled. Be careful! This could corrupt your metadata.
Unable to determine exclusivity of nasdb
Volume group "cluster_vg_test" successfully changed
更改后,我们就可以看到lvm的相关信息了
[root@test ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_test lvm2 a-- 7.81g 0
/dev/sdc cluster_vg_test lvm2 a-- 500.00g 0
[root@test ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
gfs_test cluster_vg_test -wi-ao---- 500.00g
LogVol00 vg_test -wi-ao---- 7.81g
[root@test ~]# lvscan
inactive '/dev/cluster_vg_test/gfs_test' [500.00 GiB] inherit
ACTIVE '/dev/vg_test/test' [7.81 GiB] inherit
从以上看出,虽然lvm能够正常显示,但是lv让处于inactive状态,我们仍需要将lv的状态设置成active
[root@test ~]# lvchange -ay /dev/cluster_vg_test/gfs_test
[root@test ~]# lvscan
ACTIVE '/dev/cluster_vg_test/gfs_test' [500.00 GiB] inherit
ACTIVE '/dev/vg_test/test' [7.81 GiB] inherit
现在我们的lvm正常了,挂载后能够正常读取了。
3.将lvm以gfs2文件系统进行挂载
[root@test ~]# mount -t gfs /dev/cluster_vg_test/gfs_test /data
mount: Transport endpoint is not connected
由于lvm使用的是gfs文件系统,而这台机器没有gfs工具,因此我们需要安装
yum install gfs2-utils
由于gfs2通过锁机制来阻止冲突,因此需要解除锁机制。
[root@test ~]# gfs2_tool sb /dev/cluster_vg_test/gfs_test proto lock_none
You shouldn't change any of these values if the filesystem is mounted.
Are you sure? [y/n] y
current lock protocol name = "lock_dlm"
new lock protocol name = "lock_none"
Done
#重新挂载
[root@test ~]# mount -t gfs /dev/cluster_vg_test/gfs_test /data
error mounting /dev/dm-4 on /data: No such file or directory
仍然不能挂在,从/var/log/messages中得到以下信息:
kernel: GFS2: can't find protocol lock_none
提示,gfs2找不到对应lock_none的协议,我们应该将其设置成lock_nolock
[root@test ~]# gfs2_tool sb /dev/mapper/nasVG2-nasdb proto lock_nolock
You shouldn't change any of these values if the filesystem is mounted.
Are you sure? [y/n] y
current lock protocol name = "lock_none"
new lock protocol name = "lock_nolock"
Done
#重新挂载
[root@test ~]# mount -t gfs /dev/cluster_vg_test/gfs_test /data
OK,lvm已经能够成功挂载。
当存储从一台机器换到另一台机器挂载使用的时候,其lvm信息仍保存在磁盘当中,我们只需要在新机器上激活即可;但是基于cluster的lvm需要根据所使用的文件系统进行解除相关锁机制才能够挂载使用。
当我们在解除通过iscsi挂载的存储时,没有先删除逻辑卷,而是直接iscsiadm -m node …. -u,此时查看lvm时会有错误。
[root@test ~]# vgscan
Reading all physical volumes. This may take a while...
/dev/vg_test/lv_test: read failed after 0 of 4096 at 9663672156160: Input/output error
Found volume group "vg_test2" using metadata type lvm2
Found volume group "vg_test1" using metadata type lvm2
由于我们将挂载的网络盘卸载并删除,而lvm的相关配置信息没有卸载,则会报错,我可以通过以下方式解决:
[root@test ~]# dmsetup ls
vg_test-lv_test (253:4)
vg_image2-lv_image2 (253:5)
vg_image1-lv_image1 (253:3)
[root@test ~]# dmsetup remove vg_test-lv_test
再次输入vgscan则正常。
[root@picture-118-new ]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "/dev/vg_test/lv_test" using metadata type lvm2
Found volume group "vg_test2" using metadata type lvm2
Found volume group "vg_test1" using metadata type lvm2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。