GlusterFS在Ubuntu 14.04下无法启动

以前我问过在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 

引导过程像这样(围绕networking安装部分,这是唯一的失败):

  * 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 

但在我的testing服务器上,它显示完全一样,所以,我不认为这是相关的。

任何想法现在有什么不对?

更新 :我试图从静态networking到networkingWAIT_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 :我也在暴发户文件中试过这个:

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

但电脑无法启动(不知道为什么)。

我设法通过在这个线程和这个答案的组合来解决这个问题: 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)

我在ubuntu 12.04的AWS上遇到了同样的问题。 以下是您可以为我工作的一些事情:

  • 在你的fstab中添加更多的提取尝试

这将允许您在networking不可用时重试卷文件服务器。

  • 在你的fstab中添加一个备份volfile服务器

这将允许你从另一个gluster服务器成员挂载文件系统,如果由于某种原因导致主服务器出现故障。

  • 在你的fstab中添加nobootwait

这允许实例在该文件系统未挂载的情况下继续引导。

从我当前的fstab中input样本是:

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

我在14.04没有testing过,但是对于我的12.04个实例来说,它确实没问题。

这是一个错误

这真是一个错误(静态networking不是工作,这是一个事件信号)。

此外,使用其他答案中build议的networking作业不是最正确的解决scheme。

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

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

上面也给出了一个更好的解释,但是如果你愿意,你可以跳过这个解释。

说明

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

由于这个bug,mountall进程认为挂载失败(你会在/var/log/boot.log看到“Mount failed”错误)。 所以,当不使用/etc/fstabnobootwait / nofail标志时,该错误可能会挂起挂载进程(以及启动进程)。 使用nobootwait / nofail标志时,该错误会在大约30秒内增加启动时间。

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

  • 没有必要等待networking启动。 Ubuntu本身具有_netdev挂载标志,每次接口_netdev都会重试挂载;
  • 但是,有必要等待GlusterFS服务器守护进程(用于使用本地主机进行安装);
    • 这是在GlusterFS上游项目中的旧提交中实现的。 但是这个提交被覆盖了;
  • wait-for-state upstart任务等待一个信号是错误的。 这是用来等待工作。 static-network-up是一个事件信号,而不是一个工作;
    • 这就是为什么“Unknown job:static-network-up”被logging下来的原因。
  • 这是错误的,当等待一个工作开始时,不传递WAIT_STATE=running env var,因为它不是默认的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 

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

我也遇到了这个问题,并且希望以这样的陈述作为序言:我不是这方面的专家,所以有可能有更好的解决办法!

但是这个问题似乎是静态networking化是一个事件,而不是一个暴发户的名字。 但是, 等待状态脚本需要将作业名称作为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 

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

这个变化在Ubuntu 14.04上适用于我。

感谢详细的解释,我想我比以前更了解。 最新的解决scheme几乎可行。 问题(实际上是一个,因为第一个暗示第二个):

  • 本地股( 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状态永远无法运行。