无法在 Debian Stretch 上挂载 gfs2 文件系统,可能是 dlm 配置错误?

无法在 Debian Stretch 上挂载 gfs2 文件系统,可能是 dlm 配置错误?

我正在 Debian Stretch 上尝试 gfs2,但遇到了一些困难。我是一位相当有经验的 Linux 管理员,但对共享磁盘和并行文件系统还不熟悉。

我当前的项目是在多个客户端上安装 gfs2 格式的 iscsi 导出设备作为共享文件系统。目前,我对 HA 或击剑不感兴趣,尽管这在以后可能很重要。

iscsi 部分很好,我能够登录到目标,将其格式化为 xfs 文件系统,并将其安装在多个客户端上并验证它是否显示相同的 blkid。

为了开展 gfs2 业务,我遵循 Debianstretch“gfs2”手册页上的方案,针对我的配置进行了修改,并通过各种搜索等进行了稍微修饰。

手册页在这里: https://manpages.debian.org/stretch/gfs2-utils/gfs2.5.en.html

实际的错误是,当我尝试挂载 gfs2 文件系统时,挂载命令返回

mount: mount(2) failed: /mnt: No such file or directory

...其中 /mnt 是所需的安装点,它确实存在。 (如果您尝试安装到不存在的安装点,则错误为“安装:安装点/错误不存在”)。

相关的是,在每次安装尝试时,dmesg 都会报告:

gfs2: can't find protocol lock_dlm

我简单地假设问题是 Debian 软件包不提供“/sbin/mount.gfs2”,并寻找它,但我认为这是一个错误的猜测。

我有一个五台机器的集群(Raspberry Pi,如果重要的话),命名有点特殊,pio、pi、pj、pk 和 pl。它们都有固定的静态IP地址,并且没有域。

我已经安装了 Debian gfs2、corosync 和 dlm-controld 软件包。

对于corosync步骤,我的corosync配置是(例如对于pio,旨在成为集群的主设备):

totem {
      version: 2
      cluster_name: rpitest
      token: 3000
      token_retransmits_before_loss_const: 10
      clear_node_high_bit: yes
      crypto_cipher: none
      crypto_hash: none
      nodeid: 17
      interface {
              ringnumber: 0
              bindnetaddr: 192.168.0.17
              mcastport: 5405
              ttl: 1
      }
}
nodelist { 
      node {
              ring0_addr: 192.168.0.17
              nodeid: 17
      }
      node {
              ring0_addr: 192.168.0.11
              nodeid: 1
      }
      node {
              ring0_addr: 192.168.0.12
              nodeid: 2
      }
      node {
              ring0_addr: 192.168.0.13
              nodeid: 3
      }
      node {
              ring0_addr: 192.168.0.14
              nodeid: 4
      }
}
logging {
      fileline: off
      to_stderr: no
      to_logfile: no
      to_syslog: yes
      syslog_facility: daemon
      debug: off
      timestamp: on
      logger_subsys {
              subsys: QUORUM
              debug: off
      }
}
quorum {
      provider: corosync_votequorum
      expected_votes: 5
}

该文件存在于所有节点上,并对图腾部分中的nodeid 和bindnetaddr 字段进行了适当的特定于节点的更改。

corosync 工具在所有节点上启动时不会出现错误,并且所有节点也具有来自 corosync-quorumtool 的看起来正常的输出,因此:

root@pio:~# corosync-quorumtool 
Quorum information
------------------
Date:             Sun Apr 22 11:04:13 2018
Quorum provider:  corosync_votequorum
Nodes:            5
Node ID:          17
Ring ID:          1/124
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   5
Highest expected: 5
Total votes:      5
Quorum:           3  
Flags:            Quorate 

Membership information
----------------------
Nodeid      Votes Name
         1          1 192.168.0.11
         2          1 192.168.0.12
         3          1 192.168.0.13
         4          1 192.168.0.14
        17          1 192.168.0.17 (local)

dlm-controld 软件包已安装,并使用以下简单配置创建了 /etc/dlm/dlm.conf。再说一遍,我现在暂时不参加击剑比赛了。

dlm.conf 文件在所有节点上都相同。

enable_fencing=0

lockspace rpitest nodir=1
master rpitest node=17

我不清楚 DLM“lockspace”名称是否应该与 corosync 集群名称匹配。无论哪种方式,我都看到相同的行为。

dlm-controld 服务启动时没有错误,并且“dlm_tool status”的输出看起来正常:

root@pio:~# dlm_tool status
cluster nodeid 17 quorate 1 ring seq 124 124
daemon now 1367 fence_pid 0 
node 1 M add 31 rem 0 fail 0 fence 0 at 0 0
node 2 M add 31 rem 0 fail 0 fence 0 at 0 0
node 3 M add 31 rem 0 fail 0 fence 0 at 0 0
node 4 M add 31 rem 0 fail 0 fence 0 at 0 0
node 17 M add 7 rem 0 fail 0 fence 0 at 0 0

gfs2 文件系统的创建者:

mkfs -t gfs2 -p lock_dlm -j 5 -t rpitest:one /path/to/device

随后,“blkid /path/to/device”报告:

/path/to/device: LABEL="rpitest:one" UUID=<stuff> TYPE="gfs2"

它在所有 iSCSI 客户端上看起来都相同。

此时,我觉得我应该能够在任何/所有客户端上安装 gfs2 文件系统,但这是我收到上面错误的地方 - mount 命令报告“没有这样的文件或目录”,并且dmesg 和 syslog 报告“gfs2:找不到协议 lock_dlm”。

还有其他几个 gfs2 指南,但其中许多似乎是特定于 RH/CentOS 的,并且适用于除 corosync 之外的其他集群管理方案,例如 cman 或pacemaker。这些不一定会破坏交易,但在几乎现货的 Debian Stretch 上进行这项工作对我来说很有价值。

在我看来,这可能是一个非常简单的 dlm 错误配置,但我似乎无法确定它。

其他线索:当我尝试通过以下方式“加入”锁空间时

dlm_tool join <name>

...我得到 dmesg 输出:

dlm cluster name 'rpitest' is being used without an application provided cluster name

这种情况的发生与我加入的锁空间是否是“rpites”无关。这表明锁空间名称和集群名称确实是同一件事,和/但 dlm 显然不知道 corosync 配置?

答案1

来自 Kconfig 文档config GFS2_FS_LOCKING_DLM

大多数 GFS2 用户都会需要这个。它提供 GFS2 和 DLM 之间的锁定接口,这是在集群环境中使用 GFS2 所必需的。

因此,请确保您已启用它,否则使用-p lock_dlm(中的默认锁定协议gfs2_mkfs)创建的文件系统将无法使用(没有安装时覆盖)。并且lock_nolock锁定协议仅适用于单节点安装。

相关内容