MinIO簡介
一、簡介
MinIO是一個高性能的對象存儲系統。它旨在替代云原生存儲系統。事實上,它的 API 與 Amazon S3 完全兼容。
在本教程中,我們將快速介紹如何使用 MinIO。
2. 關於MinIO
MinIO 從一開始就被設計為完全兼容亞馬遜 S3 存儲 API 的替代方案。他們聲稱是最兼容的 S3 替代品,同時還提供可比的性能和可擴展性。
MinIO 還提供了多種部署選項。它可以在大多數流行的架構上作為本地應用程序運行,也可以使用 Docker 或 Kubernetes 部署為容器化應用程序。
此外,MinIO 是開源軟件。組織可以根據AGPLv3 許可條款免費使用它。請注意,除了在線文檔和 MinIO 用戶社區之外,此選項沒有任何支持。對於大型企業,還提供具有專門支持的付費訂閱。
由於其 S3 API 兼容性、在各種部署中運行的能力以及開源性質, MinIO 是開發和測試以及 DevOps 場景的絕佳工具。
2.1.對象存儲的工作原理
對象存儲的概念類似於標準的 Unix 文件系統,但我們使用的不是目錄和文件,而是桶和對象。
桶可以像目錄一樣嵌套在層次結構中,對象可以被認為只是字節的集合。這些集合可以是任意字節數組或普通文件,如圖像、PDF 等。
一個示例對象存儲系統可能如下所示:
/
/images/
imge1.png
image2.jpg
/videos/
video1.mp4
/users/
/john.doe/
3rd quarter revenue report.docx
就像目錄和文件一樣,存儲桶和對像也可以擁有權限。這允許對數據進行細粒度的訪問控制,尤其是在擁有許多用戶的大型組織中。
3. 安裝MinIO
如前所述,MinIO 幾乎適用於所有平台。有適用於 Windows、Linux 和 MacOS 的獨立安裝程序。然而,出於開發和測試目的,最簡單的入門方法是使用容器化分發。
讓我們運行一個獨立的 MinIO 服務器作為容器:
$ docker run -p 9000:9000 -p 9001:9001 \
quay.io/minio/minio server /data --console-address ":9001"
雖然容器化部署非常適合評估 MinIO,但需要注意一些限制。
具體來說,版本控制、對象鎖定和存儲桶複製等一些高級功能將無法使用。這些特性需要MinIO分佈式部署,單機部署是不具備的。
4. 使用 MinIO
有許多不同的方法可以與 MinIO 服務器交互並管理桶和對象。下面,我們將一一一覽。
4.1. MinIO 客戶端
MinIO 客戶端提供與 Unix 文件管理命令相同的命令,例如cp and
ls
,但它是為本地和遠程存儲系統設計的。它與 AWS S3 完全兼容,其語法模仿 AWS 客戶端工具的語法。
使用 MinIO 客戶端的第一步是將其配置為與雲存儲系統通信。讓我們將其指向上面的容器化部署:
$ mc alias set docker_minio http://127.0.0.1:9000 minioadmin minioadmin
此命令為 MinIO 的容器化部署創建別名,該別名可在本地主機端口 9000 上使用。默認訪問密鑰和秘密密鑰在此部署中均為minioadmin
。
我們可以使用admin
子命令驗證連接:
$ mc admin info docker_minio
127.0.0.1:9000
Uptime: 3 minutes
Version: 2023-05-04T21:44:30Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 1
1 drive online, 0 drives offline
現在,我們可以開始進行創建桶和對像等基本操作。許多 MinIO 客戶端子命令模仿熟悉的 Unix 命令:
-
cp
:在文件系統之間複製文件或對象。 -
ls
:列出存儲桶中的文件或對象。 -
mb
:創建一個桶(類似於 Linux 上的mkdir
)。 -
mv
:將文件或對像從一個文件系統移動/重新定位到另一個文件系統。 -
rb
:刪除一個桶(類似於 Linux 上的rmdir
)。 -
rm
:刪除文件或對象。
大多數這些子命令都適用於本地文件系統和雲存儲。例如,我們可以使用以下命令序列創建新的新桶,將文件複製到該桶中,在桶之間移動對象,然後刪除桶:
$ mc mb user1
$ mc cp ~/Resume.pdf prattm
$ mc mb user2
$ mc cp user1/Resume.pdf user2
$ mc rb user1
$ mc ls user2
[2023-05-15 21:39:10 MDT] 491K Resume.pdf
4.2. MinIO 控制台
在 MinIO 部署中管理數據的另一種方法是使用基於 Web 的管理控制台。通過容器化部署,我們首先在網絡瀏覽器中打開地址 http://127.0.0.1:9001。我們使用默認憑據`minioadmin` / minioadmin
登錄。
從那裡,我們可以創建我們的第一個桶:
回想一下,並非所有選項(例如版本控制)都適用於我們的容器化部署。
現在,我們可以導航到Object Browser
並單擊我們的新存儲桶。在這個屏幕上,我們有幾個選項。首先,我們可以使用Create new path
按鈕創建子存儲桶:
我們還可以將文件作為新對像上傳到存儲桶中:
一般來說,MinIO 管理控制台的功能等同於命令行客戶端的功能。但是,它確實有一些細微差別。
首先,客戶端無法像命令行客戶端那樣在存儲桶之間移動對象。
此外,命令行客戶端還有許多管理控制台中不存在的子命令。例如, diff
、 du
和pipe
子命令都模仿標準的 Unix 命令,並且在管理控制台中沒有等效命令。
4.3. MinIO Java SDK
我們將看到的使用 MinIO 的最後一種方法是使用Java SDK 。首先,我們在應用程序中包含所需的依賴項:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
</dependency>
使用 Java SDK 的第一步是創建一個客戶端實例:
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("minioadmin", "minioadmin")
.build();
該客戶端可以執行我們之前使用命令行工具和管理控制台看到的所有相同操作。例如,我們可以創建一個桶:
minioClient.makeBucket(
MakeBucketArgs
.builder()
.bucket("user1")
.build());
然後,我們可以將文件作為對像上傳到該存儲桶中:
minioClient.putObject(PutObjectArgs
.builder()
.bucket("user1")
.object("Resume.pdf")
.stream(new FileInputStream("/tmp/Resume.pdf")
.build());
最後,讓我們看看如何從桶中獲取對象:
try (InputStream stream =
minioClient.getObject(GetObjectArgs
.builder()
.bucket("user2)
.object("Resume.pdf)
.build())) {
// Read the stream
}
這只是 Java SDK 的一小部分示例。請記住,因為 MinIO 完全符合 S3,所以相同的代碼可以用於 Amazon S3 。
5.結論
在本文中,我們簡要介紹了 MinIO,這是一種完全兼容 S3 的對象存儲引擎。雖然它是一個生產級對象存儲系統,但它也適用於其他用例。因為它是開源的,可以部署在任何地方,並且完全符合 S3,所以它是開發和測試環境的絕佳替代品。