Можно ли смонтировать NFS на одном из узлов быстрого хранения openstack?
В настоящее время я получил один CentOS в виртуальной коробке с запущенным openstack swift, который установлен SAIO.
Вопрос: Данные не будут храниться в узле, который я монтирую nfs.
Например, я создаю контейнер по curl, вывод возвращает 201. Но в смонтированном каталоге нет данных. Я ссылаюсь на файл /var/log/swift/proxy.error, и он показывает
Ошибка Недостаточно памяти балабала...
Кто-нибудь поможет понять, почему это происходит и как это исправить?
Заранее спасибо!
Конечно, есть некоторые журналы о смонтированном узле. Следуя руководству SAIO, конфигурации остаются почти такими же, за исключением ${USER}. Я использую 'osddev' для имени пользователя и имени группы.
/ dev / sdb1 on / mnt / sdb1 type xfs (rw, noatime, nodiratime, seclabel, attr2, nobarrier, inode64, logbufs = 8, noquota)
И я получил 4 директории в / mnt / sdb1 с именами 1, 2, 3 и 4 соответственно. Я смонтировал NFS в каталоге "2",
Я монтирую так:
mount.nfs 192.168.0.1:/mnt/path/to/mount / mnt / sdb1 / 2
и вывод команды 'mount' похож на
192.168.0.1:/mnt/path/to/mount on /mnt/sdb1/2 type nfs4(rw,relaytime, vers = 4.0, rsize = 1048576, wsize = 1048576, namlen =..., hard, proto = tcp, порт = 0, Timeo = 600, Retrans = 2, втор = SYS,clientaddr=192.168.0.2,local_lock= нет, адр =192.168.0.1)
Структура папки "mnt" выглядит следующим образом:
/ mnt / sdb1 / 1 / узел / sdb1 / счета / контейнеры / объекты / tmp / 2 / узел / sdb2 / контейнеры /tmp /3 / узел /sdb3 / счета / контейнеры / объекты / tmp / 4 / узел / sdb4 / account / контейнеры / объекты / тмп
Когда монтирование было завершено, я попытался создать новый контейнер, и он возвратил 201 созданный файл, и в каталоге / mnt / sd1 было указано имя файла базы данных "48ce59400b16f806fe2fee7e40e236as.db" и другой файл с именем "48ce59400b16f806fe2fee7e40e236as.db.pending". / 2 / node / sdb2 / Containers/291/6ab/48ce59400b16f806fe2fee7e40e236as, который был таким же, как и другие директории в / mnt / sdb1.
Когда я пытался создать новый объект, в каталоге / mnt / sdb1 / 2 / node / sdb1 находился каталог 'objects'. Но в других каталогах, таких как / mnt / sdb1 / 1 или /mnt/sdb1/3, каталог 'objects' существовал.
Поэтому я проверил журнал ошибок в /var/log/swift. И я обнаружил, что в журналах "proxy.error" и "storage2.error" были некоторые ошибки, я перечислю их ниже:
proxy.error:
Июн 8 17:26:33 прокси-сервер localhost: Запущенный ребенок 4024 8 июня, 17:27:04 прокси-сервер localhost: STDERR: (4024) wsgi запускается на http://127.0.0.1:8080/ 8 июня 17: 28:22 прокси-сервер localhost: STDERR: (4024) принято ('127.0.0.1', 57718) 8 июня 17:28:22 прокси-сервер localhost: STDERR: 127.0.0.1 - - [08/Jun/2017 09:28:22] "GET /auth/v1.0 HTTP/1.1" 200 356 0,004022 (txn: tx016fa30128e74197af806-00593918b6) 8 июня 17:29:39 прокси-сервер localhost: STDERR: (4024) принят ("127.0.0.1"), 57721) 8 июня 17:29:41 прокси-сервер localhost: ОШИБКА Недостаточно памяти 127.0.0.1:6020/sdb2 (txn: tx45826ac5bc284bd8b15a6-0059391903) 8 июня 17:29:41 прокси-сервер localhost: STDERR: 127.0.0.1 - - [08 / Jun / 2017 09:29:41] "PUT / v1 / AUTH_test / annecontainer / annefile3 HTTP / 1.1" 201 254 1.474424 (txn: tx45826ac5bc284bd8b15a6-0059391903)
storage2.error
Июн 8 17:26:31 localhost account-server: Запущенный дочерний элемент 4004 8 июня, 17:26:31 localhost контейнер-сервер: Запущенный дочерний элемент 4007 8 июня, 17:26:32 Объект local-server localhost: Запущенный дочерний элемент 4016 8 июня, 17:27:03 localhost объект-сервер: STDERR: (4016) wsgi запускается на 127.0.0.1:6020/ 8 июня 17:27:03 localhost account-server: STDERR: (4004) wsgi запускается на 127.0.0.1:6022/ июнь 8 17:27:03 localhost контейнер-сервер: STDERR: (4007) wsgi запускается на 127.0.0.1:6021/ 8 июня 17:29:39 локальный объект-сервер: STDERR: (4016) принят ('127.0.0.1'), 43279) 8 июня 17:29:40 объект-сервер localhost: STDERR: ОШИБКА: root: Файловая система на 9 не поддерживает xattr#012Traceback (последний вызов был последним):#012 файл "/home/osddev/swift/swift/obj/diskfile.py", строка 150, в write_metadata#012 metastr[:xattr_size])#012 Файл" /usr/lib64/python2.7/site-packages/xattr-0.9.1-py2.7-linux-x86_64.egg / xattr /init.py ", строка 185, в setxattr#012, возвращает xattr(f).set(attr, value, options=options)#012 Файл" /usr/lib64/python2.7/site-pack ages / xattr-0.9.1-py2.7-linux-x86_64.egg / xattr /init.py ", строка 78, в наборе # 012, возвращает self._call(_setxattr, _fsetxattr, имя, значение, 0, параметры | self.options)#012 Файл "/usr/lib64/python2.7/site-packages/xattr-0.9.1-py2.7-linux-x86_64.egg/xattr/init.py", строка 58, в _call#012 return fd_func(self.value, *args)#012 Файл "/usr/lib64/python2.7/site-packages/xattr-0.9.1-py2.7-linux-x86_64.egg/xattr/lib.py", строка 106, в _fsetxattr#012, ошибка error()#012 File "/usr/lib64/python2.7/site-packages/xattr-0.9.1-py2.7-linux-x86_64.egg/xattr/lib.py", строка 48, в ошибке # 012 повысить IOError(errno, strerror)#012IOError: [Errno 95] Операция не поддерживается 8 июня, 17:29:41 локальный контейнер-сервер: STDERR: (4007) принято ('127.0.0.1', 45775) 8 июня 17:29:41 объект-сервер localhost: STDERR: 127.0.0.1 - - [08/Jun/2017 09:29:41] "PUT /sdb2/957/AUTH_test/annecontainer/annefile3 HTTP/1.1" 507 263 1.300362 (txn: tx45826ac5bc284bd8b15a6-0059391903) 8 июня 17:29:41 контейнер-сервер localhost: STDERR: 127.0.0.1 - - [08/Jun/2017 09:29:41] "PUT /sdb2/291/AUTH_test/annecontainer/annefile3 HTTP/1.1" 201 120 0.044787 (txn: tx45826ac5bc284bd8b15a6-0059391903)
До сих пор я понял, что nfs не поддерживает xattr. Будет ли это причиной проблемы?
Я хочу использовать swift-on-file для хранения данных в смонтированном каталоге (по nfs), например / mnt / sdb1 / 2.
1 ответ
Объекты хранятся в виде двоичных файлов в файловой системе, а метаданные хранятся в расширенных атрибутах файла (xattrs). Это требует, чтобы базовый выбор файловой системы для объектных серверов поддерживал xattrs для файлов. Некоторые файловые системы, такие как ext3, по умолчанию отключили xattrs.
Источник: https://docs.openstack.org/developer/swift/overview_architecture.html