Как использовать Minio в качестве внешнего интерфейса для монтирования BindFS

Вступление

Я использую Ubuntu 16.04 и пытаюсь запустить экземпляр Minio с корзиной, содержимое которой открывается через монтирование BindFS. Моя внутренняя структура каталогов выглядит следующим образом:

ubuntu@ubuntu:~$ ll minio_test_dir/
total 20
drwxrwxr-x  5 ubuntu ubuntu 4096 Oct  7 14:02 ./
drwxr-xr-x 33 ubuntu ubuntu 4096 Oct  7 14:01 ../
drwxrwxr-x  2 ubuntu ubuntu 4096 Oct  7 14:02 backend/
drwx------  3 ubuntu ubuntu 4096 Oct  7 14:02 .minio-test/
drwxrwxr-x  2 ubuntu ubuntu 4096 Oct  7 14:02 minio-test-storage/

где backend представляет мое удаленное хранилище и является обычным каталогом:

ubuntu@ubuntu:~$ ll minio_test_dir/backend/
total 8
drwxrwxr-x 2 ubuntu ubuntu 4096 Oct  7 14:02 ./
drwxrwxr-x 5 ubuntu ubuntu 4096 Oct  7 14:02 ../

Я запускаю Minio с помощью следующей команды:

ubuntu@ubuntu:~/minio_test_dir$ ~/minio -C ./.minio-test server --address ":9002" minio-test-storage

Endpoint:  http://192.168.0.107:9002  http://127.0.0.1:9002  http://10.0.3.1:9002
AccessKey: 9DSOXCX63U3CGOJ3LWO3 
SecretKey: pEGNthXl5sQLz2L10dX63bBNBMB2SXSpd4CDj44A 
Region:    us-east-1
SqsARNs: 

Browser Access:
   http://192.168.0.107:9002  http://127.0.0.1:9002  http://10.0.3.1:9002

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.0.107:9002 9DSOXCX63U3CGOJ3LWO3 pEGNthXl5sQLz2L10dX63bBNBMB2SXSpd4CDj44A

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide

Теперь я вполне могу посетить браузер Minio по адресу http://192.168.0.107:9002, войти в систему, используя предоставленный учетные данные, создайте корзину и загрузите файлы:

ubuntu@ubuntu:~/minio_test_dir$ tree minio-test-storage/
minio-test-storage/
└── test.bucket
    ├── aaa.txt
    └── bbb.txt

1 directory, 2 files

если я использую BindFS для присоединения моей корзины Minio к моему внутреннему хранилищу, таким образом:

ubuntu@ubuntu:~/minio_test_dir$ bindfs backend/ minio-test-storage/test.bucket/

команда выполнена успешно, и я вижу в /proc/mounts:

bindfs /home/ubuntu/minio_test_dir/minio-test-storage/test.bucket fuse.bindfs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,default_permissions,allow_other 0 0

Обратите внимание, что в /etc/fuse.conf я раскомментировал user_allow_other.

Эта проблема

После установки BindFS я больше не могу загружать файлы через браузер Minio. Открывая консоль Javascript, я вижу следующую ошибку:

PUT http://192.168.0.107:9002/minio/upload/test.bucket/test-upload.txt 500 (Internal Server Error)

со следующим ответом, полученным на вкладке «Сеть»:

We encountered an internal error, please try again.

Я действительно в недоумении, как это диагностировать. Если я попытаюсь вручную создать файл, например. через touch или echo >, то это работает как положено. Я искал повсюду, пытаясь понять, как увидеть журналы от Minio, и ничего не нашел. Я заметил, что мой каталог .minio-test содержит файл config.json со следующим многообещающим фрагментом:

"logger": {
            "console": {
                    "enable": true,
                    "level": "fatal"
            },
            "file": {
                    "enable": false,
                    "fileName": "",
                    "level": ""
            },
            "syslog": {
                    "enable": false,
                    "address": "",
                    "level": ""
            }
    }

но, насколько я могу судить, мне не удалось получить ни одну из этих опций для фактического вывода каких-либо журналов. Я нашел отчет об ошибке, в котором утверждается, что проблема исправлена, но проблема, похоже, осталась. .

Любая помощь будет оценена по достоинству.


person Rob Gwynn-Jones    schedule 07.10.2016    source источник


Ответы (1)


minio-test-storage и test.bucket должны быть на одном и том же устройстве FS, когда вы используете bindfs, номер устройства FS test.bucket изменяется, из-за чего операции типа rename файлов с minio-test-storage FS на test.bucket FS не выполняются.

что вы можете сделать, это: ln -s backend minio-test-storage/test.bucket

Это создает test.bucket как символическую ссылку на каталог backend, что создает для вас желаемый эффект.

person Krishna Srinivas    schedule 07.10.2016
comment
Спасибо за ответ! Я смогу попробовать это в понедельник утром, тогда я отчитаюсь. - person Rob Gwynn-Jones; 08.10.2016
comment
Спасибо за ответ. К сожалению, для моих целей мне нужно иметь возможность использовать BindFS. Я попробовал настройку, в которой я связываю backend с новым каталогом backend-dummy через BindFS, а затем присоединяю backend-dummy к minio-test-storage/test.bucket через ln -s backend minio-test-storage/test.bucket, как вы предлагаете. К сожалению, я получил то же сообщение об ошибке, что и раньше. Я провел быстрый тест с использованием s3rver вместо Minio, и мой вариант использования работает нормально без необходимости использования символической ссылки. - person Rob Gwynn-Jones; 10.10.2016
comment
Хорошо, каталог экспорта и каталог корзины должны быть на одном устройстве для работы minio. Что происходит, так это то, что есть каталог с именем .minio.sys, внутри которого временно помещаются загруженные объекты, прежде чем переименовывать его в фактическое местоположение. Это переименование завершается ошибкой, если .minio.sys находится на другом устройстве, чем каталог bucket. - person Krishna Srinivas; 10.10.2016
comment
Да, я еще немного поигрался с этим и понял, что это так. Есть ли способ обойти это? Я знаю, что в Linux команда mv возвращается к копированию/удалению в случае сбоя переименования, что объясняет, почему я могу вручную перемещать объекты между .minio.sys/tmp и test.bucket. Мне тут не повезло? - person Rob Gwynn-Jones; 10.10.2016
comment
@RobGwynn-Jones, вы можете открыть задачу по адресу здесь, указав эту ссылку SO в качестве ссылки, но в основном с этим ничего не поделаешь. Но если вы можете объяснить в выпуске, чего вы пытаетесь достичь, возможно, мы сможем найти обходной путь. - person Krishna Srinivas; 18.10.2016