我有一个设置,其中一个由FibreChannel连接的SAN存储可以被两个主机访问(在块级)。我想在存储上创建两个lvm2物理卷:pv1和pv2,因为现在是两个卷组( vg1和vg2 )的唯一成员。我的主人应该专门使用它们,“不要碰对方”。
因为SAN对两台主机都是可见的,所以lvm结构对两者都是可见的。(我对它进行了测试:在一个主机上创建逻辑卷会使它们在/dev/mapper下对另一个主机可见)。我想确保host1只修改vg1,host2只修改vg2以防止数据损坏。
是否保证当我不显式执行任何lvm命令时,lvm守护进程和内核不会对属于另一个主机的卷组进行重新布局/优化,从而破坏它?
发布于 2016-08-25 02:38:13
不,这不会因为VGs在两个系统上都可见而破坏任何东西,但是在两台主机上都可以看到VGs是很危险的(因为可能会有某些进程、脚本或人为的错误操作磁盘)。您可以过滤掉它们,这样在执行PV扫描时,每个主机都会忽略它不应该触及的LUN。因此,每个人一次只能检测到一个VG。这在您的场景和许多其他场景中都很有用。
顺便提一下(在我深入研究这个问题之前),您可能会考虑在SAN级别处理这个问题,并将这些LUN分离成不同的目标。这样,基本块设备从一开始就不会被“错误”的发起者所接受。我会推荐这个选项,而不是其他,除非有一个很好的理由,你想让LUN在两个主机上同时可见。
接下来,我们将在LVM配置中创建过滤器。这是通过一系列正则表达式来控制的,以限制"pvscan“检测某些块设备(或块设备的类)。我们在is /etc/lvm/lvm.conf中进行此更改的文件
在这个配置中,你会发现(大约一半)有一行写着"global_filter=“。这个文件应该给出一些关于如何使用它的提示,但是让我们来讨论一下一些概念。
首先,您应该允许并限制基于不受更改的路径的块设备。不要使用/dev/sda之类的东西来选择磁盘。这会改变你的过滤器是不可靠的。相反,可以使用/dev/disk/by-id/或/dev/disk/by-path/之类的方法。这两个目录都包含符号链接,这些链接使用有关LUN的实际信息来标识它们。by-id使用SCSI ID,旁路使用物理主机路径和总线类型.在可能的情况下使用by-id,因为它是最可靠的。因为这些是上述目录中的符号链接,所以可以使用‘`ls -l’来匹配它们对应的/dev/sd*路径。
使用该id路径,您可以创建一个全局LVM过滤器,使扫描在将来的扫描中拒绝该不受欢迎的块设备。在构造这一行时,先放允许条目(用“a”表示),然后再拒绝条目(用“r”表示)。下面是该过滤器的一个示例:
global_filter=[ "a|.*|","r|/dev/disk/by-id/id-of-unwanted-disk.*|" ]
这些语句由方括号封装。语句由引号封装,并以逗号分隔。栏用于打开和关闭包含斜杠的语句(就像这些语句一样)。在每个regex标准中的拒绝语句中,在星号前面放置一个点,以定义所有通配符。这一行写着,“允许除了这个驱动器之外的所有东西,以及可能来自这个驱动器的所有分区。”这个被质疑的拒绝驱动器就是你不想让LVM去看的LUN。
保存此编辑后,使用"pvscan“进行测试。如果是那样的话,你不想要的VG就不会再出现了。在另一个主机上做同样的事情,你就有了一个安全的过滤器。
但是说真的,如果可能的话,使用iSCSI目标隔离这些LUNS。这要容易得多,并且不需要在两台主机上进行配置才能成功。
https://serverfault.com/questions/798946
复制相似问题