MongoDB "Невозможно установить блокировку" ошибка на смонтированном диске, используя Docker и 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 в каталоге хоста, а также просто запустил экземпляр mongod от имени root, и у меня возникла та же проблема.

Определенно нет другого экземпляра mongod, работающего и указывающего на тот же каталог данных.

Наконец, кое-что стоит отметить: похоже, единственным общим знаменателем является файловая система. Mongod постоянно дает сбой на дисках Luster, но не на любой другой файловой системе. Если исходный каталог находится на диске NFS или где-либо еще, он работает отлично.

1 ответ

Решение

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

По умолчанию у блеска нет функции flock [1], вы должны добавить опцию "flock" при монтировании [2] файловой системы, чтобы она работала [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]

Вы должны размонтировать и смонтировать файловую систему, так как блеск не поддерживает -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 +++
Другие вопросы по тегам