MongoDB使用Docker和Lustre在装载的驱动器上“无法建立锁定”错误

时间:2017-06-07 16:17:16

标签: mongodb docker cluster-computing lustre

我正在尝试使用Docker使用安装在主机上的驱动器来容纳MongoDB实例。

使用mongo:latest图片:

[user@dcos-master ~]$ docker run -d --name mongo -v /local/cluster/drive:/data/db mongo:latest

但经常失败:

exception in initAndListen: 98 Unable to lock file: /data/db/mongod.lock Function not implemented. Is a mongod instance already running?, terminating

认为这是一个权限问题所以我试图在主机目录上打开777的权限,并且只是以root身份运行mongod实例,我遇到了同样的问题。

肯定没有另一个mongod实例在运行并指向同一个数据目录。

最后,值得指出的是:唯一的共同点似乎是文件系统。 Mongod在Lustre驱动器上始终失败,但在任何其他文件系统上都没有。如果我的源目录在NFS驱动器或其他任何东西上,它运行良好。

1 个答案:

答案 0 :(得分:0)

https://anilmaurya.wordpress.com/2015/05/06/abaqus-with-lustre-file-system/

默认情况下,光泽没有flock功能[1],你必须在安装[2]文件系统时添加“flock”选项才能使其工作[3]

[1]

$ touch temp
$ strace -e flock perl -e 'open(FH, "+< temp"); flock(FH, 2) or exit 1; sleep 1; close(FH);'
flock(3, LOCK_EX)                       = -1 ENOSYS (Function not implemented)
+++ exited with 1 +++

[2]

您必须卸载并挂载文件系统,因为lustre不支持-o remount选项:

$ mount | grep /data
mgs@tcp:/data on /data type lustre (rw,lazystatfs)
$ mount -o remount,flock /data
$ mount | grep /data
mgs@tcp:/data on /data type lustre (rw,lazystatfs)

# umount /data
# mount -t lustre -o rw,flock mgs@tcp:/data /data
$ mount | grep /data
mgs@tcp:/data on /data type lustre (rw,flock,lazystatfs)

[3]

$ strace -e flock perl -e 'open(FH, "+< temp"); flock(FH, 2) or exit 1; sleep 1; close(FH);'
flock(3, LOCK_EX)                       = 0
+++ exited with 0 +++