题 使用Ubuntu 14.04无法在启动时挂载GlusterFS


以前我问过在Ubuntu 12.04服务器上启动时挂载GlusterFS 答案是,这是在12.04的错误,并在14.04工作。好奇我尝试在我的笔记本电脑上运行的虚拟机,并在14.04它工作。由于这对我来说至关重要,因此我决定将运行中的服务器升级到14.04,但却发现GlusterFS没有自动挂载localhost卷。

这是一个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从静态网络更改为网络,但仍然无法正常工作,但启动时所有[失败]消息都消失了。这些是在这些条件下包含的日志文件:

/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)

但计算机无法启动(不知道为什么)。


6
2017-07-10 06:22




我认为互联网尚未做好准备。如果拉动网络电缆(离线)并运行,是否会出现相同的错误? mount -a ? - totti
@totti,我无法在VPS上拔网线。用于挂载的IP是静态分配,主机与/ etc / hosts中的IP匹配。 - pupeno
然后以某种方式禁用互联网(不要阻止或丢弃)并尝试安装。现在发生了什么? - totti


答案:


我设法通过这个帖子中的答案和这个答案的组合来完成这项工作: 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的我(tm)


6
2018-03-08 09:54





我在ubuntu 12.04上遇到了同样的问题。以下是您可以做的一些对我有用的事情:

  • 在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实例它可以正常工作。


4
2017-07-19 16:49





这是一个错误

这确实是一个错误(静态网络不是一个工作,它是一个事件信号)。

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

所以,我创造了这个 错误报告 并提交了此问题的补丁。

作为一种解决方法,您可以应用我提出的解决方案(在本答案的最后)并使用 _netdev 你的fstab中的选项。

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

说明

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

由于此错误,mountall进程认为安装失败(您将看到“挂载失败”错误) /var/log/boot.log)。所以,什么时候不使用 nobootwait/nofail 旗帜 /etc/fstab,bug可以挂起挂载过程(以及启动过程)。使用时 nobootwait/nofail 标志,该bug将在大约30秒内增加启动时间。

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

  • 没有必要等待网络正常运行。 Ubuntu本身就有 _netdev mount标志,每次接口出现时都会重试mount;
  • 但是,必须等待GlusterFS Server守护程序(对于使用localhost的挂载);
    • 这是在实施的 旧的提交 在GlusterFS上游项目中。但是,这个提交被覆盖了;
  • 使用它是错误的 wait-for-state 新手任务等待信号。它习惯于等待工作。 static-network-up 是一个事件信号,而不是一份工作;
    • 这就是记录“Unknown job:static-network-up”的原因;
  • 这是错的,等待工作开始,而不是通过 WAIT_STATE=running env var因为它不是默认值 wait-for-state

/etc/init/mounting-glusterfs.conf

author "Louis Zuckerman <me@louiszuckerman.com>"
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

PS: 使用也 _netdev 你的fstab中的选项。


2
2018-06-15 18:52



我在Ubuntu 14.04,glusterfs server / client 3.5上尝试了你的解决方案。但是在upstart log'状态中获取此信息:未知作业:glusterfs-server' - Raja Ehtesham
现在在upstart日志中获取此信息 glusterfs-server stop/waiting wait-for-state stop/waiting。但是,当我跑 time start mountall 一切都是完美的。 - Raja Ehtesham


我也遇到了这个问题,并希望在这个答案前加上我不是这个领域的专家的声明,所以它可能有更好的解决方案!

但问题似乎就是这个问题 静态网络行动 是一个事件,而不是一个新贵工作的名称。然而, 等待状态 脚本期望作为WAIT_FOR值传递作业名称。因此,您在上面发现的“未知工作”错误。

要解决此问题,我更改了/etc/init/mounting-glusterfs.conf,更改:

exec start wait-for-state WAIT_FOR=static-network-up WAITER=mounting-glusterfs-$MOUNTPOINT

成:

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

网络是一个实际工作的名称(/etc/init/networking.conf),我相信通常会发出静态网络的工作。

这个改变在Ubuntu 14.04上对我有用。


1
2017-07-11 13:47



这不适合我。启动过程中没有FAIL,但没有安装卷。你能告诉我你的fstab,看看我做错了什么吗? - pupeno
@ j-pablo-fernández这里是那行:wedge:/ gv0 / mnt glusterfs defaults,_netdev,direct-io-mode = disable 0 0注意不需要direct-io-mode选项,我只是想要使用它。 - Dan Pisarski


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

  • 本地股票(127.0.0.1:/share)仍未安装
  • mounted TYPE=glusterfs 从不满足,所以依赖于挂载的服务 TYPE=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。

稍后注意到:mount-glusterfs中的上述WAIT脚本...阻止整个启动过程,似乎glusterfs-server状态永远不会运行。


1
2017-07-30 12:50





我用非常简单的解决方案来管理它:

  1. 将挂载点添加到/ etc / fstab

    gluster:/VOLUME_NAME/local/mount/point glusterfs defaults,_netdev 0 0
    
  2. 添加一行到您的 在/etc/rc.local,所以它看起来像:

    mount -a
    exit 0
    

现在全部 glusterfs 卷将安装在启动时。


0
2018-02-09 10:15