GlusterFS 在 Ubuntu 14.04 启动时无法挂载

GlusterFS 在 Ubuntu 14.04 启动时无法挂载

之前我问过在 Ubuntu 12.04 服务器启动时安装 GlusterFS答案是,这在 12.04 中存在错误,但在 14.04 中可以正常工作。出于好奇,我在笔记本电脑上运行的虚拟机上尝试了一下,在 14.04 中它可以正常工作。由于这对我来说至关重要,我决定将正在运行的服务器升级到 14.04,结果发现 GlusterFS 也没有自动挂载本地主机卷。

这是一个 Linode 服务器,fstab 如下所示:

# <file system> <mount point>          <type>    <options>                 <dump>  <pass>
proc        /proc                        proc    defaults                       0       0
/dev/xvda   /                            ext4    noatime,errors=remount-ro      0       1
/dev/xvdb   none                         swap    sw                             0       0
/dev/xvdc   /var/lib/glusterfs/brick01   ext4    defaults                       1       2
koraga.int.example.com:/public_uploads /var/www/shared/public/uploads glusterfs defaults,_netdev 0 0

启动过程如下(围绕网络安装部分,这是唯一的失败):

 * Stopping Mount network filesystems                                    [ OK ]
 * Starting set sysctls from /etc/sysctl.conf                            [ OK ]
 * Stopping set sysctls from /etc/sysctl.conf                            [ OK ]
 * Starting configure virtual network devices                            [ OK ]
 * Starting Bridge socket events into upstart                            [ OK ]
 * Starting Waiting for state                                            [fail]
 * Stopping Waiting for state                                            [ OK ]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Starting Waiting for state                                            [fail]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Stopping Waiting for state                                            [ OK ]
 * Starting Signal sysvinit that remote filesystems are mounted          [ OK ]
 * Starting GNU Screen Cleanup                                           [ OK ]

我相信日志文件/var/log/glusterfs/var-www-shared-public-uploads.log包含了问题的主要线索,因为它是这台服务器(其中挂载不起作用)和我的本地虚拟服务器(其中挂载起作用)之间唯一真正不同的文件:

[2014-07-10 05:51:49.762162] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-10 05:51:49.774248] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-10 05:51:49.774278] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-10 05:51:49.775573] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-10 05:51:49.775634] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-host: koraga.int.example.com (No data available)
[2014-07-10 05:51:49.775649] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-10 05:51:49.776284] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7f6718bf3f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7f6718bf7da0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7f67192bbf13]))) 0-: received signum (1), shutting down
[2014-07-10 05:51:49.776314] I [fuse-bridge.c:5475:fini] 0-fuse: Unmounting '/var/www/shared/public/uploads'.

该卷的状态为:

Volume Name: public_uploads
Type: Distribute
Volume ID: 52aa6d85-f4ea-4c39-a2b3-d20d34ab5916
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: koraga.int.example.com:/var/lib/glusterfs/brick01/public_uploads
Options Reconfigured:
auth.allow: 127.0.0.1,192.168.134.227
client.ssl: off
server.ssl: off
nfs.disable: on

如果我mount -a在启动后运行,则卷已正确安装:

koraga.int.example.com:/public_uploads on /var/www/shared/public/uploads type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)

一些相关的日志文件显示了这一点:

/var/log/upstart/mounting-glusterfs-_var_www_shared_public_uploads.log

start: Job failed to start

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.log

status: Unknown job: static-network-up
start: Unknown job: static-network-up

但在我的测试服务器上,它显示完全相同,所以,我认为这不相关。

知道现在出了什么问题吗?

更新:我尝试将 WAIT_FOR 从 static-network-up 更改为 networking,但仍然不起作用,但启动时的所有 [fail] 消息都消失了。以下是这些条件下日志文件的内容:

/var/log/glusterfs/var-www-shared-public-uploads.log包含:

wait-for-state stop/waiting

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.log包含:

start: Job is already running: networking

/var/log/glusterfs/var-www-shared-public-uploads.log包含:

[2014-07-11 17:19:38.000207] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-11 17:19:38.029421] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-11 17:19:38.029450] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-11 17:19:38.030288] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-11 17:19:38.030331] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-host: koraga.int.example.com (No data available)
[2014-07-11 17:19:38.030345] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-11 17:19:38.030984] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7fd9495b7f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7fd9495bbda0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7fd949c7ff13]))) 0-: received signum (1), shutting down
[2014-07-11 17:19:38.031013] I [fuse-bridge.c:5475:fini] 0-fuse: Unmounting '/var/www/shared/public/uploads'.

更新 2:我也在 upstart 文件中尝试了这个:

start on (started glusterfs-server and mounting TYPE=glusterfs)

但计算机无法启动(尚不知道原因)。

答案1

我设法通过结合这个帖子和这个帖子中的答案来完成这项工作:GlusterFS 无法在启动时挂载

按照@Dan Pisarski 编辑如下/etc/init/mounting-glusterfs.conf

exec start wait-for-state WAIT_FOR=networking WAITER=mounting-glusterfs-$MOUNTPOINT

按照@dialt0ne 的修改如下/etc/fstab

[serverip]:[vol]  [mountpoint]  glusterfs  defaults,nobootwait,_netdev,backupvolfile-server=[backupserverip],direct-io-mode=disable  0       0

在 Ubuntu 14.04.2 LTS 上为我工作

答案2

我在 ubuntu 12.04 上的 AWS 上遇到了同样的问题。以下是一些对我有用的方法:

  • 在 fstab 中添加更多获取尝试

这将允许您在网络不可用时重试 volfile 服务器。

  • 在 fstab 中添加备份 volfile 服务器

如果主服务器由于某种原因关闭,这将允许您从另一个 gluster 服务器成员挂载文件系统。

  • 添加nobootwait你的 fstab

这允许实例在未安装该文件系统时继续启动。

我的当前 fstab 中的一个示例条目是:

10.20.30.40:/fs1 /example glusterfs defaults,nobootwait,_netdev,backupvolfile-server=10.20.30.41,fetch-attempts=10 0 2

我还没有在 14.04 上测试过这个,但它在我的 12.04 实例上运行良好。

答案3

这是一个错误

这确实是一个错误(static-network-up 不是一项工作,它是一个事件信号)。

此外,使用其他答案中建议的网络作业并不是最正确的解决方案。

所以我创建了这个错误报告并提交了针对该问题的补丁。

作为一种解决方法,您可以应用我提出的解决方案(在此答案的末尾)并_netdev在您的 fstab 中使用该选项。

上面也显示了更好的解释,但是如果您愿意,可以跳过此解释。

解释

这是 中的一个错误mounting-glusterfs.conf。它会在 Ubuntu 服务器的启动过程中增加不必要的 30 秒,甚至会挂起启动过程。

由于这个错误,mountall 进程认为挂载失败(您将在 中看到“挂载失败”错误/var/log/boot.log)。因此,当不使用中的nobootwait/标志时,该错误可能会挂起挂载进程(以及启动进程)。当使用/标志时,该错误将使启动时间增加约 30 秒。nofail/etc/fstabnobootwaitnofail

该错误是由以下错误引起的:

  • 无需等待网络恢复。Ubuntu 本身具有_netdev挂载标志,每次接口启动时都会重试挂载;
  • 但是,需要等待 GlusterFS Server 守护进程(使用 localhost 进行挂载);
    • 这是在一个旧提交在 GlusterFS 上游项目中。但是,此提交已被覆盖;
  • 使用wait-for-stateupstart 任务来等待信号是错误的。它用来等待作业。static-network-up是一个事件信号,而不是作业;
    • 这就是为什么记录“未知作业:静态网络启动”的原因;
  • 这是错误的,当等待一项工作开始时,没有传递WAIT_STATE=running环境变量,因为它不是默认值wait-for-state

解决方案

/etc/init/mounting-glusterfs.conf

author "Louis Zuckerman <[email protected]>"
description "Block the mounting event for glusterfs filesystems until the glusterfs-server is running"

instance $MOUNTPOINT

start on mounting TYPE=glusterfs
task
script
  if status glusterfs-server; then
    start wait-for-state WAIT_FOR=glusterfs-server WAIT_STATE=running \
        WAITER=mounting-glusterfs-$MOUNTPOINT
  fi
end script

附言:也使用_netdevfstab 中的选项。

答案4

感谢您的详细解释,我想我比以前理解得更多了。最新的解决方案几乎可以正常工作。问题(实际上只有一个,因为第一个问题意味着第二个问题):

  • 本地共享(127.0.0.1:/share)仍未安装
  • mounted TYPE=glusterfsTYPE=glusterfs永远不会满足,因此依赖于已安装状态的服务

/etc/fstab

127.0.0.1:/control-share /mnt/glu-control-share glusterfs defaults,_netdev 0 0

/etc/init/mounting-glusterfs.conf:从上面复制而来

/etc/init/salt-master.conf

description "Salt Master"

start on (mounted TYPE=glusterfs
          and runlevel [2345])
stop on runlevel [!2345]
limit nofile 100000 100000
...

本地共享必须手动安装,或者通过某种自动化方式,所有重启后都必须手动启动 salt-master。

后来注意到:mounting-glusterfs... 中的上述 WAIT 脚本阻止了整个启动过程,似乎 glusterfs-server 状态从未达到运行状态。

相关内容