cover

當服務穩定運行之後,最大的成本通常不是 CPU,而是儲存。使用者上傳的檔案、交易報表、監控 log、服務備份——這些東西只會越來越多,永遠不會自己消失。沒有規則,檔案就是堆在機器上的灰塵。

先講結論

物件儲存的治理核心:用 Bucket 做冷熱分層(Hot / Warm / Cold)、用 Lifecycle rule 自動清理、用 Policy 控制最小權限、用 mirror 做備份。手動刪檔不是策略,自動化規則才是。

物件儲存 vs 檔案系統:為什麼要換?

檔案系統(ext4、NTFS)適合「少量 + 高頻變更」。但檔案數到幾十萬,你就會遇到 inode 耗盡、目錄操作變慢、備份時間不可控。

物件儲存把檔案變成 key-value:key 是路徑字串,value 是檔案內容。沒有目錄鎖定、沒有 inode 限制、天生適合大量小檔案。而且 S3 API 是事實標準,換掉後端實作(MinIO → AWS S3)幾乎不用改 code。

資料分層:不是所有東西都需要 SSD

  • Hot:近期上傳、頻繁讀取(SSD)
  • Warm:偶爾讀取、可接受延遲(HDD)
  • Cold:只為合規保存、幾乎不讀(Archive)

做法很單純:用不同 Bucket 對應不同層級。SSD 用在真正需要的地方,成本和效能都更容易預估。

Lifecycle Rule:清理不能靠人記

# uploads:90 天後自動刪除
mc ilm rule add myminio/uploads --expire-days 90
 
# logs:30 天後自動刪除
mc ilm rule add myminio/logs --expire-days 30
 
# temp:7 天就清掉
mc ilm rule add myminio/temp --expire-days 7

我見過 /tmp bucket 一年沒清,佔了 200GB。設定 lifecycle 只要一行指令,不設定的代價是某天半夜被叫起來清磁碟。

權限:每個服務一組 credential

所有服務共用 root credential?那任何一個服務被打穿,攻擊者就能讀寫所有資料。

# 建立使用者
mc admin user add myminio api-user ApiSecretKey123
 
# 建立 policy(只能讀寫 uploads/)
mc admin policy create myminio uploads-rw uploads-policy.json
 
# 綁定
mc admin policy attach myminio uploads-rw --user api-user

API 只能寫 uploads/、CI 只能寫 artifacts/、Backup script 可以讀全部但不能刪。最小權限不是信不信任的問題,是「出事時影響範圍有多大」的問題。

部署和基本操作

# docker-compose.yml
services:
  minio:
    image: minio/minio:latest
    command: server /data --console-address :9001
    restart: unless-stopped
    ports:
      - 9000:9000
      - 9001:9001
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: ChangeMeToStrongPassword
    volumes:
      - minio-data:/data
 
volumes:
  minio-data:
# 設定 alias 然後建 bucket
mc alias set myminio http://minio.example.com:9000 minioadmin ChangeMeToStrongPassword
mc mb myminio/uploads
mc mb myminio/artifacts
mc mb myminio/logs
mc mb myminio/backups

備份:mc mirror 是你的好朋友

mc alias set backup http://nas.internal:9000 backupuser BackupSecret
mc mirror myminio/backups backup/backups
 
# crontab 每天 04:00
# 0 4 * * * mc mirror --overwrite myminio/backups backup/backups

本地備份每日、異地備份每週、還原演練每季。是的,你要真的跑過還原流程。很多人第一次還原是在真正出事的時候,然後發現備份檔是壞的。


儲存管理就像整理房間。你可以一直把東西往裡面塞,但總有一天你會發現門打不開——而且你需要的那個東西在最裡面。