以前我问过在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上遇到了同样的问题。 以下是您可以为我工作的一些事情:
这将允许您在networking不可用时重试卷文件服务器。
这将允许你从另一个gluster服务器成员挂载文件系统,如果由于某种原因导致主服务器出现故障。
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/fstab的nobootwait / nofail标志时,该错误可能会挂起挂载进程(以及启动进程)。 使用nobootwait / nofail标志时,该错误会在大约30秒内增加启动时间。
该错误是由以下错误引起的:
_netdev挂载标志,每次接口_netdev都会重试挂载; wait-for-state upstart任务等待一个信号是错误的。 这是用来等待工作。 static-network-up是一个事件信号,而不是一个工作;
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状态永远无法运行。