MongoDB "Unable to establish lock" 使用 Docker 和 Lustre 安装驱动器时出错
MongoDB "Unable to establish lock" error on mounted drive using Docker and 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 驱动器或其他任何东西上,它运行得很好。
https://anilmaurya.wordpress.com/2015/05/06/abaqus-with-lustre-file-system/
默认情况下,lustre 没有 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 +++
我正在尝试使用 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 驱动器或其他任何东西上,它运行得很好。
https://anilmaurya.wordpress.com/2015/05/06/abaqus-with-lustre-file-system/
默认情况下,lustre 没有 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 +++