經過Minio搭建私有化對象存儲服務_開源PaaS Rainbond最佳實踐

概述

Minio是創建在雲原生的基礎上;有分佈式和共享存儲等功能;旨在多租戶環境中以可持續的方式進行擴展的對象存儲服務。它最適合存儲非結構化數據,如:照片、視頻、日誌文件、容器/虛擬機/映像等,單次存儲對象的大小最大可達5TB。html

實現架構

單節點
  • 根據存儲是否爲遠端,可直接使用FS或NFS直接操做存儲中的Object
  • 調用S3接口,經過Minio使用FS或NFS來操做Object

多節點

多節點的Minio會根據不一樣的Access_key及Secret_Key來區分不一樣租戶,每一個租戶可操做對應Server獲取Object。Minio Server間能夠經過不一樣的進程模型、容器或是虛擬機來互相隔離。linux

分佈式

分佈式Minio在無共享架構中根據需求擴展到儘量多的服務器,全部節點須要使用相同的Access_key及Secret_key來登陸。分佈式Minio使用Web負載均衡器或DNS輪循(DNS round-robin),在各服務器之間實現負載均衡。git

功能特性

  • Amazon S3兼容

Minio使用Amazon S3 v2 / v4 API。可使用Minio SDK,Minio Client,AWS SDK和AWS CLI訪問Minio服務器。github

  • 數據保護

Minio使用Minio Erasure Code來防止硬件故障。也許會損壞一半以上的driver,可是仍然能夠從中恢復。docker

  • 高度可用

Minio服務器能夠容忍分佈式設置中高達(N / 2)-1節點故障。並且,您能夠配置Minio服務器在Minio與任意Amazon S3兼容服務器之間存儲數據。數據庫

  • Lambda計算

Minio服務器經過其兼容AWS SNS / SQS的事件通知服務觸發Lambda功能。支持的目標是消息隊列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等數據庫。後端

  • 加密和防篡改

Minio爲加密數據提供了機密性,完整性和真實性保證,並且性能開銷微乎其微。使用AES-256-GCMChaCha20-Poly1305AES-CBC支持服務器端和客戶端加密。加密的對象使用AEAD服務器端加密進行防篡改。安全

  • 可對接後端存儲

除了Minio本身的文件系統,還支持DAS、 JBODs、NAS、Google雲存儲和Azure Blob存儲。服務器

  • sdk支持

基於Minio輕量的特色,它獲得相似Java、Python或Go等語言的sdk支持,微信

例如: Java類在使用Maven管理Jar的狀況下,在pom.xml中指定Minio:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.12</version>
</dependency>

使用

Minio提供:包含圖形化界面的Server端;使用命令行操做的Client端。如下爲您介紹Minio Server與Minio Client的使用。

Minio Server
  • 使用Access Key與Secret Key登陸Minio。登陸成功後進入以下界面

Access Key與Secret Key可由Minio Server隨機生成,也可經過變量來自定義。下文自助部署講述如何定義及獲取Access Key與Secret Key。

  • 點擊模塊1bucket對應部分建立一個新的bucket,可在模塊2看到所建立bucket
  • 在模塊2選擇一個bucket。點擊模塊1upload對應部分上傳文件到已選擇bucket。可在頁面白色部分看到對應bucket中所上傳文件。
  • 鼠標移動到模塊2任意bucket,對應bucket右側可點擊進行操做policydelete操做。其中policy可設置Prefix的請求權限。
  • 點擊模塊3,查看與設置該Object的基本信息:

    • 查看共享地址Shareable Link
    • 設置到期時間,最大可保存時間爲7天
    • 對話框上方彈出該Object現剩餘到期時間

Minio Client
下載二進制
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
基本操做命令
  • 配置已存在Minio Server
./mc config host add <custom_name> <Minio_Server_address> <access_key> <secret_keyt> S3v4

例:

./mc config host add test http://9000.gr8be71d.grapps.ali-hz.goodrain.net access_key secret_key S3v4
  • 建立bucket
./mc mb <custom_name>/[bucket_name]/[object_name]

例:

./mc mb test/data
  • 查看Minio Server的bucket、object
./mc ls <custom_name>/[bucket_name]/[object_name]

例:

./mc ls test/data
  • 上傳/下載Object
# cp到Minio Server(上傳)
./mc cp <object> <custom_name>/[bucket_name]
# cp到本地(下載)
./mc cp <custom_name>/[bucket_name]/[object_name] <local_path>

例:

./mc cp README.md test/data
  • 刪除Object或bucket
./mc rm <custom_name>/[bucket_name]/[object_name]

例:

# 刪除bucket,由於data下存在名爲README.md的object,故需追加--force參數來強制刪除bucket
./mc rm test/data --force

*共享訪問

mc提供share方法,經過受權生成的URL能夠臨時上傳或下載object。

  • download

指定Minio Server中的Object,生成該Object臨時下載的URL。

./mc share download [—expire [h|m|s]] <custom_name>/[bucket_name]/[object_name]

例:

# --expire 168h表明生成的URL有效時間僅168小時
./mc share download --expire 168h test/data/README.md
  • upload

指定上傳某文件到Minio Server後的路徑,生成臨時可供上傳的命令。

./mc share upload [—expire [h|m|s]] <custom_name>/[bucket_name]/[object_name]

例:

./mc share upload test/data/README.md

生成相似以下命令:

curl http://9000.gr17b6e1.grapps.ali-hz.goodrain.net/data/ \
-F x-amz-credential=access_key/20180425/us-east-1/s3/aws4_request \
-F x-amz-date=20180425T031310Z \
-F x-amz-signature=68ac9f102afd6a87526ecb9ce6025dee4f85b25cf054f5a7668a73ae0ef9f4dc \
-F bucket=data \
-F policy=eyJleHBpcmF0aW9uIjoiMjAxOC0wNS0wMlQwMzoxMzowOS45MTlaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwiZGF0YSJdLFsiZXEiLCIka2V5IiwiaW5zdGFsbC5zaCJdLFsiZXEiLCIkeC1hbXotZGF0ZSIsIjIwMTgwNDI1VDAzMTMxMFoiXSxbImVxIiwiJHgtYW16LWFsZ29yaXRobSIsIkFXUzQtSE1BQy1TSEEyNTYiXSxbImVxIiwiJHgtYW16LWNyZWRlbnRpYWwiLCJhY2Nlc3Nfa2V5LzIwMTgwNDI1L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 \
-F x-amz-algorithm=AWS4-HMAC-SHA256 \
-F key=README.md \
# <FILE> 爲須要上傳的Object
-F file=@<FILE>
  • list

查看所建立下載或上傳的全部RUL

./mc share list [download/upload]

部署

從雲市

您能夠從雲市一鍵式部署Minio應用(點擊獲取)

從雲幫

您也可使用docker run命令在雲幫自行部署:

docker run -p 9000:9000 \
    -e MINIO_ACCESS_KEY=<Custom Access Key> \
    -e MINIO_SECRET_KEY=<Custom Secret Key> \
    -v /mnt/data:/data \
    -v /mnt/config:/root/.minio \
    minio/minio:RELEASE.2018-04-19T22-54-58Z \
    server /data

訪問Minio對象存儲時,驗證所須要的Access Key 與 Secret Key,能夠根據傳入的變量MINIO_ACCESS_KEY與變量MINIO_SECRET_KEY自定義生成。

  • 咱們對雲市的Minio應用的變量MINIO_ACCESS_KEY與變量MINIO_SECRET_KEY作了初始化工做,您能夠在應用控制檯-應用依賴信息獲取變量對應值,用於登陸Minio應用。
分佈式Minio

使用分佈式的Minio可以讓您將多個驅動(即便在不一樣的計算機上)合併爲一個對象存儲服務器。因爲驅動可分佈在多個節點上,所以分佈式Minio能夠承受多點故障,而且保證數據的安全。

當前雲市 Minio應用版本暫時不支持分佈式Minio,後續將更新分佈式Minio。

官方網站:https://www.minio.io

文檔地址:https://docs.minio.io/

Minio其它支持參考: https://www.minio.io/dcos.html

進一步瞭解Rainbond v3.5.1

好雨Rainbond(雲幫)是一款以應用爲中心的開源PaaS,深度整合基於Kubernetes的容器管理、Service Mesh微服務架構最佳實踐、多類型CI/CD應用構建與交付、多數據中心資源管理等技術,爲用戶提供雲原生應用全生命週期解決方案,構建應用與基礎設施、應用與應用、基礎設施與基礎設施之間互聯互通的生態體系,知足支撐業務高速發展所需的敏捷開發、高效運維和精益管理需求。

相關文章
相關標籤/搜索