2017-05-09 34 views
5

Tạo và xóa nhóm (vùng chứa) trong bản cài đặt OpenStack Swift phiên bản 2.14.0 của tôi hoạt động tốt. Nó là một cài đặt chỉ Swift. Không có dịch vụ OpenStack nào khác như Keystone đã được triển khai.Không thể tải tệp lên OpenStack Swift 2.14.0 trên Raspberry Pi 3 vì "[Errno 13] Quyền bị từ chối"

$ swift stat 
         Account: AUTH_test 
        Containers: 2 
         Objects: 0 
          Bytes: 0 
Containers in policy "policy-0": 2 
    Objects in policy "policy-0": 0 
    Bytes in policy "policy-0": 0 
        Connection: keep-alive 
... 

$ swift post s3perf 
$ swift list -A http://10.0.0.253:8080/auth/v1.0 -U test:tester -K testing 
bucket 
s3perf 

Đây là các thông điệp (tích cực) liên quan đến việc tạo nhóm bên trong tệp storage1.error.

$ tail -f /var/log/swift/storage1.error 
... 
May 9 13:58:50 raspberrypi container-server: STDERR: (1114) accepted 
('127.0.0.1', 38118) 
May 9 13:58:50 raspberrypi container-server: STDERR: 127.0.0.1 - - 
[09/May/2017 11:58:50] "POST /d1/122/AUTH_test/s3perf HTTP/1.1" 204 142 
0.021630 (txn: tx982eb25d83624b37bd290-005911aefa) 

Nhưng bất kỳ nỗ lực tải lên tệp nào cũng chỉ là thông báo lỗi [Errno 13] Permission denied.

$ swift upload s3perf s3perf-testfile1.txt 
Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf/s3perf-testfile1.txt 
503 Service Unavailable [first 60 chars of response] <html><h1>Service 
Unavailable</h1><p>The server is currently 

$ tail -f /var/log/swift/storage1.error 
... 
May 18 20:55:44 raspberrypi object-server: STDERR: (927) accepted 
('127.0.0.1', 45684) 
May 18 20:55:44 raspberrypi object-server: ERROR __call__ error with PUT 
/d1/40/AUTH_test/s3perf/testfile : #012Traceback (most recent call 
last):#012 File "/home/pi/swift/swift/obj/server.py", line 1105, in 
__call__#012 res = getattr(self, req.method)(req)#012 File 
"/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012  
resp = func(ctrl, *args, **kwargs)#012 File 
"/home/pi/swift/swift/obj/server.py", line 814, in PUT#012  
writer.put(metadata)#012 File "/home/pi/swift/swift/obj/diskfile.py", 
line 2561, in put#012 super(DiskFileWriter, self)._put(metadata, 
True)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in 
_put#012 tpool_reraise(self._finalize_put, metadata, target_path, 
cleanup)#012 File "/home/pi/swift/swift/common/utils.py", line 3536, in 
tpool_reraise#012 raise resp#012IOError: [Errno 13] Permission denied 
(txn: txfbf08bffde6d4657a72a5-00591dee30) 
May 18 20:55:44 raspberrypi object-server: STDERR: 127.0.0.1 - - 
[18/May/2017 18:55:44] "PUT /d1/40/AUTH_test/s3perf/testfile HTTP/1.1" 
500 875 0.015646 (txn: txfbf08bffde6d4657a72a5-00591dee30) 

Ngoài ra, tệp proxy.error chứa thông báo lỗi ERROR 500 Expect: 100-continue From Object Server.

May 18 20:55:44 raspberrypi proxy-server: ERROR 500 Expect: 100-continue 
From Object Server 127.0.0.1:6010/d1 (txn: txfbf08bffde6d4657a72a5- 
00591dee30) (client_ip: 10.0.0.220) 

Tôi đã bắt đầu Swift là người dùng pi và giao các thư mục này để người dùng này:

$ sudo chown pi:pi /etc/swift 
$ sudo chown -R pi:pi /mnt/sdb1/* 
$ sudo chown -R pi:pi /var/cache/swift 
$ sudo chown -R pi:pi /var/run/swift 

sdb1 là một thiết bị loopback với hệ thống tập tin XFS.

$ mount | grep sdb1 
/srv/swift-disk on /mnt/sdb1 type xfs (rw,noatime,nodiratime,attr2,nobarrier,inode64,logbufs=8,noquota) 

$ ls -ld /mnt/sdb1/1/ 
drwxr-xr-x 3 pi pi 17 May 12 13:14 /mnt/sdb1/1/ 

Tôi đã triển khai Swift this way.

Tôi tự hỏi tại sao tạo nhóm (conrainers) hoạt động nhưng việc tải lên tệp không thành công do Permission denied.

Cập nhật 1:

$ sudo swift-ring-builder /etc/swift/account.builder 
/etc/swift/account.builder, build version 2 
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion 
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) 
The overload factor is 0.00% (0.000000) 
Ring file /etc/swift/account.ring.gz is up-to-date 
Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 
      0  1 1 127.0.0.1:6012  127.0.0.1:6012 d1 1.00  256 0.00 

$ sudo swift-ring-builder /etc/swift/container.builder 
/etc/swift/container.builder, build version 2 
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion 
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) 
The overload factor is 0.00% (0.000000) 
Ring file /etc/swift/container.ring.gz is up-to-date 
Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 
      0  1 1 127.0.0.1:6011  127.0.0.1:6011 d1 1.00  256 0.00  

$ sudo swift-ring-builder /etc/swift/object.builder 
/etc/swift/object.builder, build version 2 
256 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion 
The minimum number of hours before a partition can be reassigned is 0 (0:00:00 remaining) 
The overload factor is 0.00% (0.000000) 
Ring file /etc/swift/object.ring.gz is up-to-date 
Devices: id region zone ip address:port replication ip:port name weight partitions balance flags meta 
      0  1 1 127.0.0.1:6010  127.0.0.1:6010 d1 1.00  256 0.00  

Cập nhật 2

Các cổng cần được mở.

$ nmap localhost -p 6010,6011,6012,8080,22 
... 
PORT  STATE SERVICE 
22/tcp open ssh 
6010/tcp open x11 
6011/tcp open unknown 
6012/tcp open unknown 
8080/tcp open http-proxy 

Cập nhật 3

tôi có thể viết như sử dụng pi bên trong thư mục nơi Swift nên lưu trữ các đối tượng.

$ whoami 
pi 
$ touch /srv/1/node/d1/objects/test 
$ ls -l /srv/1/node/d1/objects/test 
-rw-r--r-- 1 pi pi 0 May 13 22:59 /srv/1/node/d1/objects/test 

Cập nhật 4

quá trình Tất cả nhanh chóng thuộc về người sử dụng pi.

$ ps aux | grep swift 
pi   944 3.2 2.0 24644 20100 ?  Ss May12 65:14 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 
pi   945 3.1 2.0 25372 20228 ?  Ss May12 64:30 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf 
pi   946 3.1 1.9 24512 19416 ?  Ss May12 64:03 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf 
pi   947 3.1 1.9 23688 19320 ?  Ss May12 64:04 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf 
pi  1000 0.0 1.7 195656 17844 ?  Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf 
pi  1001 0.0 1.8 195656 18056 ?  Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf 
pi  1002 0.0 1.6 23880 16772 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf 
pi  1003 0.0 1.7 195656 17848 ?  Sl May12 0:01 /usr/bin/python /usr/local/bin/swift-object-server /etc/swift/object-server.conf 
pi  1004 0.0 1.7 24924 17504 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf 
pi  1005 0.0 1.6 24924 16912 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf 
pi  1006 0.0 1.8 24924 18368 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf 
pi  1007 0.0 1.8 24924 18208 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-account-server /etc/swift/account-server.conf 
pi  1008 0.0 1.8 25864 18824 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf 
pi  1009 0.0 1.8 25864 18652 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf 
pi  1010 0.0 1.7 25864 17340 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf 
pi  1011 0.0 1.8 25864 18772 ?  S May12 0:01 /usr/bin/python /usr/local/bin/swift-container-server /etc/swift/container-server.conf 
pi  1012 0.0 1.8 24644 18276 ?  S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 
pi  1013 0.0 1.8 24900 18588 ?  S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 
pi  1014 0.0 1.8 24900 18588 ?  S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 
pi  1015 0.0 1.8 24900 18568 ?  S May12 0:03 /usr/bin/python /usr/local/bin/swift-proxy-server /etc/swift/proxy-server.conf 

Cập nhật 5

Khi tôi tạo ra một xô, dịch vụ Swift tạo ra một thư mục như thế này:

/mnt/sdb1/1/node/d1/containers/122/9d5/7a23d9409f11da3062432c6faa75f9d5/ 

và thư mục này chứa một -file db như 7a23d9409f11da3062432c6faa75f9d5.db. Tôi nghĩ đây là hành vi đúng đắn.

Nhưng khi tôi cố tải lên tệp trong một nhóm, Swift chỉ tạo một thư mục trống như thư mục này.

/mnt/sdb1/1/node/d1/objects/139/eca/8b17958f984943fc97b6b937061d2eca 

tôi có thể tạo tập tin bên trong các thư mục rỗng qua touch hoặc echo là người dùng pi nhưng đối với một lý do không rõ, Swift không lưu trữ tập tin bên trong các thư mục này.

Cập nhật 6

Để điều tra thêm vấn đề này, tôi đã cài đặt Swift theo SAIO - Swift All In One hướng dẫn một lần bên trong một máy ảo VMware ESXi với Ubuntu 14.04 LTS và thời gian khác bên trong Raspbian trên Raspberry Pi 3 Kết quả là, bên trong máy ảo Ubuntu 14.04, Swift hoạt động hoàn hảo, nhưng khi chạy ontop của Pi Rasberry, các tệp tải lên không hoạt động.

Object PUT failed: http://10.0.0.253:8080/v1/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt 
503 Service Unavailable [first 60 chars of response] 
<html><h1>Service Unavailable</h1><p>The server is currently 

Các tập tin log storage1.error vẫn nói:

May 24 13:15:15 raspberrypi object-server: ERROR __call__ error with PUT 
/sdb1/484/AUTH_test/s3perf-testbucket/testfiles/s3perf-testfile1.txt : 
#012Traceback (most recent call last):#012 File 
"/home/pi/swift/swift/obj/server.py", line 1105, in __call__#012 res = 
getattr(self, req.method)(req)#012 File 
"/home/pi/swift/swift/common/utils.py", line 1626, in _timing_stats#012  
resp = func(ctrl, *args, **kwargs)#012 File 
"/home/pi/swift/swift/obj/server.py", line 814, in PUT#012  
writer.put(metadata)#012 File "/home/pi/swift/swift/obj/diskfile.py", 
line 2561, in put#012 super(DiskFileWriter, self)._put(metadata, 
True)#012 File "/home/pi/swift/swift/obj/diskfile.py", line 1566, in 
_put#012 tpool_reraise(self._finalize_put, metadata, target_path, 
cleanup)#012 File "/home/pi/swift/swift/common/utils.py", line 3536, in 
tpool_reraise#012 raise resp#012IOError: [Errno 13] Permission denied 
(txn: txdfe3c7f704be4af8817b3-0059256b43) 

Cập nhật 7

Vấn đề này vẫn chưa được ấn định, nhưng tôi có bây giờ là một dịch vụ Swift làm việc trên Raspberry Pi. Tôi đã cài đặt bản sửa đổi Swift (khá lỗi thời) 2.2.0, được chuyển giao với Raspbian và nó hoạt động tốt. Các bước tôi đã làm được giải thích here.

+1

Bạn có thể Pastebin đầu ra của các lệnh sau: $ sudo nhanh chóng-ring-builder /etc/swift/account.builder $ sudo nhanh chóng-ring-builder /etc/swift/container.builder $ sudo swift- nhà xây dựng vòng /etc/swift/object.builder –

Trả lời

1

Dựa trên thông tin bạn đã cung cấp, các lỗi xảy ra khi viết Siêu dữ liệu.

Thao tác ghi Siêu dữ liệu rơi vào hai loại: thao tác inode và thao tác các thuộc tính mở rộng. Vì vậy, có hai nguồn có thể cho các lỗi của bạn.

Trước tiên, đó là lỗi liên quan đến inode. Lỗi này có thể xảy ra do cài đặt thông số inode64 khi lắp thiết bị. Theo số XFS man page:

Nếu ứng dụng đang được sử dụng không xử lý số inode lớn hơn 32 bit, nên chỉ định tùy chọn inode32.

Thứ hai, đây là lỗi liên quan đến thuộc tính mở rộng. Bạn có thể sử dụng gói python xattr để viết các thuộc tính mở rộng và kiểm tra xem có ngoại lệ xảy ra hay không.

Các vấn đề liên quan