Lỗi thường gặp khi kết nối Object Storage và cách xử lý

Bài này tra theo thông báo lỗi. Quý Khách hàng tìm đúng mã lỗi hoặc đúng câu thông báo đang gặp, rồi làm theo mục đó.

Trước khi tra, kiểm nhanh ba thứ hay sai nhất:

Kiểm Giá trị đúng
Endpoint https://object.cloudzone.vn, có https://, không có dấu gạch chéo ở cuối
Khoá sao chép từ Portal Cloudzone, mục dịch vụ, nút Khoá kết nối
Đồng hồ máy chủ lệch dưới 15 phút so với giờ thật

1. Kiểm kết nối bằng một lệnh trước

Lệnh này không cần khoá, chỉ để xem máy của quý Khách hàng có ra được kho hay không:

curl -I https://object.cloudzone.vn/

Kết quả bình thường là HTTP/1.1 200 OK kèm dòng Server: Ceph Object Gateway.

  • Ra đúng như vậy: đường mạng thông, lỗi nằm ở khoá hoặc cấu hình công cụ. Tra tiếp các mục dưới.
  • Treo rồi hết thời gian chờ: máy không ra được Internet, hoặc tường lửa chặn cổng 443 ra ngoài.
  • Báo lỗi tên miền: máy không phân giải được DNS. Xem mục 8.

2. SignatureDoesNotMatch

Thông báo đầy đủ thường là The request signature we calculated does not match the signature you provided.

Nghĩa là hệ thống nhận được Access Key hợp lệ, nhưng chữ ký tính từ Secret Key không khớp. Ba nguyên nhân, xếp theo tần suất:

a. Secret Key dán thiếu hoặc dán lẫn dấu cách. Đây là nguyên nhân phổ biến nhất. Khoá dài, dán qua nhiều lớp (chat, tệp ghi chú, biến môi trường) rất dễ rụng ký tự cuối hoặc dính một dấu cách. Cách chắc chắn: vào Portal bấm nút sao chép thay vì bôi đen bằng chuột, rồi dán lại.

Kiểm độ dài khoá trong tệp cấu hình mà không in nội dung ra:

grep secret ~/.mc/config.json | tr -d ' ' | wc -c

b. Đồng hồ máy lệch giờ. Chữ ký S3 có tính thời gian. Lệch quá 15 phút là chữ ký không hợp lệ. Xem và sửa:

date
timedatectl set-ntp true     # bật đồng bộ giờ tự động

Lệch giờ nặng thì hệ thống trả mã RequestTimeTooSkewed thay vì SignatureDoesNotMatch. Cách xử lý giống nhau.

c. Khoá đã bị thay. Nếu trước đó có người bấm Cấp khoá mới trong Portal thì khoá cũ hết hiệu lực ngay. Lấy cặp khoá mới và khai lại ở mọi nơi đang dùng.

3. InvalidAccessKeyId

Thông báo: The AWS Access Key Id you provided does not exist in our records.

Access Key không tồn tại. Khác với mục 2 ở chỗ đây là sai ở khoá truy cập, không phải khoá bí mật.

  • Dán lại Access Key từ Portal.
  • Kiểm xem có nhầm sang khoá của dịch vụ khác không. Máy chủ từng kết nối nhiều kho S3 thì trong ~/.aws/credentials hoặc ~/.mc/config.json có nhiều mục, dễ gọi sai mục.
  • Với aws-cli, kiểm xem có biến môi trường đang lấn cấu hình:
env | grep -i aws_

Biến AWS_ACCESS_KEY_ID trong môi trường thắng cả tệp cấu hình. Có biến cũ sót lại thì xoá nó đi bằng unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY, hoặc sửa cho đúng.

4. AccessDenied

Khoá đúng, nhưng thao tác không được phép. Những trường hợp hay gặp:

Tình huống Xử lý
Gọi bucket không thuộc gói của mình Kiểm lại tên bucket. Tên bucket là duy nhất toàn hệ thống, trùng tên người khác thì bị từ chối
Mở địa chỉ tệp trực tiếp trên trình duyệt Đúng như thiết kế, bucket là riêng tư. Muốn chia sẻ thì tạo địa chỉ có thời hạn
Ứng dụng cố đặt quyền công khai cho tệp Bỏ tuỳ chọn ACL công khai trong ứng dụng, hoặc đặt acl = private

5. NoSuchBucket

Bucket không tồn tại. Hai nguyên nhân:

a. Sai tên bucket. Kiểm bằng cách liệt kê những bucket thật sự có:

mc ls cloudzone

b. Chưa tạo bucket. Phần lớn công cụ không tự tạo bucket khi tải lên. Tạo trước:

mc mb cloudzone/ten-bucket

Lưu ý tên bucket phân biệt chữ thường chữ hoa, và chỉ nhận chữ thường. Sao-Luu và sao-luu là hai thứ khác nhau, trong đó cái đầu còn không phải tên hợp lệ.

6. BucketAlreadyExists

Tên bucket là duy nhất trên toàn hệ thống, không chỉ trong gói của quý Khách hàng. Tên ngắn và chung như backup, data, web gần như chắc chắn đã có người lấy.

Đổi sang tên có tiền tố riêng: abc-sao-luu-web thay vì backup. Cách đặt tên xem bài Bắt đầu với Object Storage Cloudzone, mục Quy ước đặt tên bucket.

Nếu thông báo là BucketAlreadyOwnedByYou thì bucket đó chính là của quý Khách hàng, đã tạo trước đó rồi, dùng luôn không cần tạo lại.

7. Lỗi nhắc tới region

aws-cli và nhiều thư viện lập trình bắt buộc có giá trị region, nên quý Khách hàng phải điền một giá trị nào đó. Kho không kiểm giá trị này, điền us-east-1 theo thông lệ là chạy.

Vì vậy nếu gặp lỗi có chữ region, phần lớn là do chưa điền gì cả, không phải điền sai. Khai một giá trị vào rồi thử lại:

aws configure set region us-east-1

Trường hợp thông báo lỗi là AuthorizationHeaderMalformed và nói rõ the region … is wrong; expecting … thì lấy đúng giá trị trong câu thông báo đó rồi khai lại, vì lúc đó hệ thống đã nói thẳng nó chờ giá trị nào.

8. Lỗi chứng chỉ TLS

Thông báo: SSL certificate problem: unable to get local issuer certificate, hoặc certificate verify failed.

Kho dùng chứng chỉ hợp lệ, nên lỗi này nằm ở phía máy của quý Khách hàng: thiếu bộ chứng chỉ gốc, thường gặp trên máy ảo cài tối giản hoặc trong container.

# Ubuntu, Debian
sudo apt update
sudo apt install -y ca-certificates
sudo update-ca-certificates

# CentOS, AlmaLinux, Rocky
sudo yum install -y ca-certificates
sudo update-ca-trust

Đừng tắt kiểm chứng chỉ bằng những tuỳ chọn kiểu --no-verify-ssl hay --insecure. Làm vậy là bỏ luôn lớp bảo vệ của HTTPS, trong khi nguyên nhân thật chỉ là thiếu một gói phần mềm.

Nếu lỗi là certificate has expired mà máy vừa cài mới, kiểm đồng hồ hệ thống trước: đồng hồ sai năm làm mọi chứng chỉ trông như đã hết hạn.

9. Không phân giải được tên miền

nslookup object.cloudzone.vn

Kết quả bình thường trả về một địa chỉ IP. Không trả về gì thì máy không dùng được DNS. Kiểm /etc/resolv.conf có máy chủ DNS hợp lệ, thử tạm một máy chủ DNS công cộng để khoanh vùng.

Trường hợp đặc biệt: cấu hình s3cmd hoặc công cụ khác dùng kiểu địa chỉ tên miền con (ten-bucket.object.cloudzone.vn). Kho có hỗ trợ kiểu này, nhưng nếu máy nằm sau một DNS nội bộ chặn tên miền con lạ thì sẽ không phân giải được. Khi đó chuyển sang kiểu đường dẫn:

  • s3cmd: sửa host_bucket = object.cloudzone.vn/%(bucket)s
  • aws-cli: aws configure set s3.addressing_style path
  • WinSCP: ô URL style chọn Path

10. Chậm, hay ngắt giữa lúc truyền

Những chỗ nên xem, theo thứ tự:

a. Số luồng song song. Nhiều tệp nhỏ thì tăng luồng, ít tệp lớn thì giảm.

rclone copy nguon cloudzone:bucket --transfers 8 --checkers 16

b. Giới hạn băng thông đang bật. Kiểm xem câu lệnh có --bwlimit sót lại từ lần thử trước.

c. Đường truyền của chính máy chủ. Đo riêng để biết nút cổ chai nằm ở đâu, đừng kết luận sớm là do kho.

d. MTU, với máy ảo qua VPN hoặc đường hầm. Dấu hiệu nhận biết: tệp nhỏ lên bình thường, tệp lớn treo giữa đường. Hạ MTU xuống 1400 rồi thử lại.

e. Mã SlowDown hoặc HTTP 503. Hệ thống đang yêu cầu giảm nhịp gọi. Giảm số luồng, và với kịch bản tự viết thì thêm cơ chế chờ rồi gọi lại.

11. QuotaExceeded, hoặc tải lên bị từ chối vì dung lượng

Gói đã dùng hết dung lượng hoặc hết hạn mức băng thông. Xem mức đang dùng:

mc du cloudzone

Ba cách xử lý:

  • Dọn dữ liệu không còn cần. Nhớ rằng xoá là xoá thật, không có thùng rác.
  • Mua thêm addon dung lượng ngay trong Portal Cloudzone.
  • Nâng lên gói lớn hơn.

Cả hai cách sau đều giữ nguyên dữ liệu và khoá truy cập, không phải cấu hình lại công cụ.

Nhắc lại một điểm hay bị bỏ sót: băng thông tính cả chiều tải lên. Lượt sao lưu hằng đêm cũng nằm trong hạn mức, không chỉ lượt khách tải về.

12. EntityTooLarge

Tệp vượt giới hạn của một lượt tải lên đơn. Nguyên nhân là công cụ đang tải nguyên khối thay vì cắt thành nhiều phần. Các công cụ trong bài hướng dẫn (mc, aws-cli, s3cmd, rclone) đều tự cắt, nên lỗi này thường xuất hiện ở mã tự viết hoặc thư viện cấu hình chưa đúng.

Bật chế độ tải nhiều phần trong thư viện đang dùng, hoặc chuyển sang một trong các công cụ trên.

13. Lấy nhật ký để gửi cho bộ phận hỗ trợ

Mô tả “không kết nối được” rất khó tra. Gửi kèm nhật ký thì xử lý nhanh hơn nhiều.

# mc
mc --debug ls cloudzone > /tmp/nhat-ky-mc.txt 2>&1

# aws-cli
aws --debug --endpoint-url https://object.cloudzone.vn s3 ls > /tmp/nhat-ky-aws.txt 2>&1

# rclone
rclone -vv ls cloudzone: > /tmp/nhat-ky-rclone.txt 2>&1

🔴 Mở tệp nhật ký ra xoá khoá trước khi gửi. Chế độ gỡ lỗi in cả phần xác thực. Tìm và xoá mọi dòng chứa secret, Authorization, Signature.

Khi gửi yêu cầu hỗ trợ, kèm bốn thông tin sau:

  1. Mã lỗi hoặc nguyên văn thông báo.
  2. Công cụ và phiên bản (mc --version, aws --version).
  3. Tên bucket và thao tác đang làm.
  4. Kết quả lệnh curl -I https://object.cloudzone.vn/.

Không gửi Secret Key. Bộ phận hỗ trợ không cần tới nó, và không ai được yêu cầu quý Khách hàng cung cấp khoá bí mật.

Hướng dẫn này có ích cho bạn?

Cần đặt dịch vụ? Xem cấu hình và giá tại bảng giá Cloudzone - đặt gói trực tuyến, nhận dịch vụ ngay sau thanh toán. Cần tư vấn, mở khung chat ở góc phải màn hình.

Hướng dẫn liên quan