本文收錄于【#云計算入門與實踐 - AWS】專欄中,收錄 AWS 入門與實踐相關(guān)博文。
本文同步于個人公眾號:【云計算洞察】
更多關(guān)于云計算技術(shù)內(nèi)容敬請關(guān)注:CSDN【#云計算入門與實踐 - AWS】專欄。
本系列已更新博文:
- [ 云計算 | AWS 實踐 ] Java 應(yīng)用中使用 Amazon S3 進(jìn)行存儲桶和對象操作完全指南
- [ 云計算 | AWS 實踐 ] Java 如何重命名 Amazon S3 中的文件和文件夾
- [ 云計算 | AWS 實踐 ] 使用 Java 列出存儲桶中的所有 AWS S3 對象
- [ 云計算 | AWS 實踐 ] 使用 Java 更新現(xiàn)有 Amazon S3 對象
- [ 云計算 | AWS 實踐 ] 基于 Amazon S3 協(xié)議搭建個人云存儲服務(wù)
- [ 云計算 | AWS 實踐 ] 使用 Java 檢查指定的密鑰是否存在于給定的 Amazon S3 存儲桶中
一、前言
MinIO 是一個高性能的對象存儲系統(tǒng)。它被設(shè)計為云原生存儲系統(tǒng)的替代方案。事實上,其 API 與 Amazon S3 完全兼容;MinIO 也提供兼容阿里云等國內(nèi)云廠商的 API,由于本文篇幅問題,在本博文中,只介紹亞馬遜 AWS 與其關(guān)聯(lián)的案例以及如何快速使用 MinIO。
二、關(guān)于 MinIO
2.1 什么是 MinIO
Minio 是 GlusterFS 創(chuàng)始人之一 Anand Babu Periasamy 發(fā)布新的開源項目。MinIO 從一開始就被設(shè)計為完全兼容 Amazon S3 存儲 API 的替代方案。
傳說是最兼容的 S3 替代方案,同時還提供可比的性能和可擴(kuò)展性。
MinIO 還提供多種部署選項。它可以作為本機(jī)應(yīng)用程序在大多數(shù)流行的架構(gòu)上運(yùn)行,也可以使用 Docker 或 Kubernetes 部署為容器化應(yīng)用程序。
此外,MinIO 是開源軟件。 組織可以根據(jù) AGPLv3 許可證(許可協(xié)議點擊這里)的條款免費(fèi)使用它。請注意,除了在線文檔和 MinIO 用戶社區(qū)之外,此選項不提供任何支持。對于大型企業(yè),還可以提供帶有專門支持的付費(fèi)訂閱。
MinIO 的 GitHub 地址:https://github.com/minio/minio
由于其 S3 API 兼容性、在各種部署中運(yùn)行的能力以及開源特性,MinIO 是一款出色的開發(fā)和測試以及 DevOps 工具場景。
2.2 對象存儲的工作原理
對象存儲的概念與標(biāo)準(zhǔn) Linux 文件系統(tǒng)類似,但我們使用存儲桶和對象來代替目錄和文件.
存儲桶可以像目錄一樣嵌套到層次結(jié)構(gòu)中,而對象可以被認(rèn)為只是字節(jié)的集合。這些集合可以是任意字節(jié)數(shù)組或普通文件,例如圖像、PDF 等。
一個示例對象存儲系統(tǒng)可能如下所示:
/
/images/
imge1.png
image2.jpg
/videos/
video1.mp4
/users/
/bluetata/
status-report.docx
就像目錄和文件一樣,存儲桶和對象也可以擁有權(quán)限。 這允許對數(shù)據(jù)進(jìn)行細(xì)粒度的訪問控制,特別是在擁有許多用戶的大型組織中。
三、安裝 MinIO
3.1 使用 Docker 安裝 MinIO
如前所述,MinIO 幾乎適用于所有平臺。有適用于 Windows、Linux 和 MacOS 的獨立安裝程序。然而,出于開發(fā)和測試目的,最簡單的入門方法是使用容器化發(fā)行版。
MinIO 需要一個持久卷來存儲配置和應(yīng)用程序數(shù)據(jù)。但是,出于測試目的,可以通過簡單地傳遞一個目錄(/data在下面的示例中)來啟動 MinIO 。該目錄是在容器啟動時在容器文件系統(tǒng)中創(chuàng)建的。但是容器退出后所有的數(shù)據(jù)都丟失了。如果打算持久化,進(jìn)行掛載即可。
docker run \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=MINIO_ROOT_USER" \
-e "MINIO_ROOT_PASSWORD=MINIO_ROOT_PASSWORD" \
minio/minio server /data --console-address ":9001"
執(zhí)行狀態(tài)截圖如下
雖然容器化部署非常適合評估 MinIO,但需要注意一些限制。
具體來說,一些高級功能(例如版本控制、對象鎖定和存儲桶復(fù)制)將不起作用。這些功能需要MinIO
的分布式部署,這在單服務(wù)器部署中是不可用的。
另外注意上述的命令已經(jīng)設(shè)置了 MinIO 的用戶名和密碼。如果此處沒有設(shè)置也可以按照后文客戶端在設(shè)置一次。
3.2 測試訪問 MinIO
可以直接訪問:http://你的ip地址:9001/login
來訪問你的 MinIO
四、使用 MinIO 相關(guān)配置及操作
可以通過多種不同的方式與 MinIO 服務(wù)器交互以及管理存儲桶和對象。下面,我們就來一一講解。
4.1. MinIO 客戶端相關(guān)配置操作
4.1.1 部署安裝MinIO Client可執(zhí)行程序
首先要在自己的系統(tǒng)中部署 MinIO Client 可執(zhí)行程序,不然所有的 mc 命令都會不識別,會出現(xiàn)如下錯誤:
-bash: mc: command not found
解決辦法是:
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin
4.1.2 MinIO 客戶端相關(guān)配置操作
MinIO 客戶端 提供與 Linux 文件管理命令相同的命令,例如cp
和ls
等,但專為本地和遠(yuǎn)程存儲系統(tǒng)而設(shè)計。它與 AWS S3 完全兼容,其語法模仿 AWS 客戶端工具的語法。
使用 MinIO 客戶端的第一步是將其配置為與云存儲系統(tǒng)通信。讓我們將其指向上面的容器化部署:
mc alias set docker_minio http://127.0.0.1:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD
這個命令是使用 MinIO Client(mc)設(shè)置一個別名(alias)。具體來說,它創(chuàng)建了一個名為 docker_minio 的別名,連接到地址為 http://127.0.0.1:9000 的 MinIO 實例,并使用用戶名 MINIO_ROOT_USER 和密碼 MINIO_ROOT_PASSWORD 進(jìn)行身份驗證。
這里是單獨的為客戶端配置,如果已經(jīng)按照上述的在安裝過程中設(shè)置了用戶名與密碼,可以直接訪問即可。
我們可以使用admin子命令驗證連接:
[root@aliyun-bluetata-hub-01 user1]# mc admin info docker_minio
● 127.0.0.1:9000
Uptime: 1 hour
Version: 2023-11-20T22:40:07Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 1
25 KiB Used, 1 Bucket, 1 Object
1 drive online, 0 drives offline
執(zhí)行的截圖如下:
現(xiàn)在,我們可以開始執(zhí)行創(chuàng)建存儲桶和對象等基本操作。許多 MinIO 客戶端子命令模仿熟悉的 Linux 命令:
- cp:在文件系統(tǒng)之間復(fù)制文件或?qū)ο蟆?/li>
- ls:列出存儲桶中的文件或?qū)ο蟆?/li>
- mb:創(chuàng)建存儲桶(類似于 Linux 上的 mkdir)。
- mv:將文件或?qū)ο髲囊粋€文件系統(tǒng)移動/重新定位到另一個文件系統(tǒng)。
- rb:刪除存儲桶(類似于 Linux 上的 rmdir)。
- rm:刪除文件或?qū)ο蟆?/li>
大多數(shù)子命令都適用于本地文件系統(tǒng)和云存儲。例如,我們可以使用以下命令序列創(chuàng)建新的存儲桶,將文件復(fù)制到該存儲桶中,在存儲桶之間移動對象,然后刪除存儲桶:
mc mb user1
mc cp ~/test.pdf prattm
mc mb user2
mc cp user1/test.pdf user2
mc rb user1
mc ls user2
[2023-11-22 21:39:10 MDT] 491K test.pdf
4.2 MiniIO 控制臺相關(guān)配置操作
在 MinIO 部署中管理數(shù)據(jù)的另一種方法是使用基于 Web 的管理控制臺。通過容器化部署,我們首先在 Web 瀏覽器中打開地址 http://127.0.0.1:9001
。我們使用默認(rèn)憑據(jù)登錄MINIO_ROOT_USER/ MINIO_ROOT_PASSWORD
。
如果你是遠(yuǎn)程服務(wù)器,那么 ip 就換成你的遠(yuǎn)程服務(wù)器公網(wǎng) ip 即可。
我們可以創(chuàng)建我們的第一個存儲桶:
進(jìn)入到創(chuàng)建存儲桶頁面后,直接輸入所要創(chuàng)建的名稱后,點擊創(chuàng)建存儲桶。
在這之前我們有講過:并非所有選項(例如版本控制)都適用于我們的容器化部署。
現(xiàn)在,我們可以導(dǎo)航到對象瀏覽器并單擊我們的新存儲桶。首先,我們可以使用創(chuàng)建新路徑按鈕創(chuàng)建子存儲桶:
另外我們還可以將文件作為新對象上傳到存儲桶中:
上傳成功后,后臺服務(wù)器存儲文件的位置:
一般來說,MinIO 管理控制臺的功能與命令行客戶端的功能相同。然而,它確實有一些細(xì)微的差別。
首先,客戶端不可能像命令行客戶端那樣在存儲桶之間移動對象。
另外,命令行客戶端還有許多子命令在管理控制臺中并不存在。例如,diff、du 和 pipe 子命令都模仿了標(biāo)準(zhǔn)的 Linux 命令,在管理控制臺中沒有相應(yīng)的命令。
五、使用 Java 操作 MinIO 對象(原生操作與亞馬遜 Java SDK操作)
5.1 原生操作 MinIO
我們將介紹的使用 MinIO 的最后一種方法是使用 Java SDK。首先,我們在應(yīng)用程序中包含所需的依賴項:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
</dependency>
使用 Java SDK 的第一步是創(chuàng)建客戶端實例:
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://127.0.0.1:9000")
.credentials("minioadmin", "minioadmin")
.build();
此客戶端可以使用命令行工具和管理控制臺執(zhí)行我們之前看到的所有相同操作。例如我們可以創(chuàng)建一個Bucket:
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
}
5.2 使用亞馬遜 Java API 操作 MinIO
同樣的在使用之前先要引入依賴包
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.21.0</version>
</dependency>
下面直接貼出使用 Amazon JDK 操作對象的相關(guān)代碼:
public class S3Test {
public static void main(String[] args) throws Exception{
AmazonS3 s3Client= S3Utils.getS3Client("MINIO_ROOT_USER","MINIO_ROOT_PASSWORD","http://172.0.0.1:9000");
List<Bucket> bucketList=s3Client.listBuckets();
List<Bucket> myBuckets=bucketList.stream().filter(bucket -> bucket.getName().equals("bucket01")).collect(Collectors.toList());
if(myBuckets.size() < 1){
s3Client.createBucket("bucket01");
}
putObject(s3Client);
S3Object s3Object = s3Client.getObject(
"bucket01",
"test2.jpg"
);
downLoadObject(s3Object);
System.out.println(bucketList);
ListObjectsV2Result result = s3Client.listObjectsV2("bucket01");
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
System.out.println("含有的文件:" + os.getKey());
}
// 共享文件
generatePresignedUrl(s3Client,"bucket01", "test2.jpg");
}
public static void putObject(AmazonS3 s3Client) throws Exception{
File localFile=new File("D:\\bluetata\\test1.txt");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
//metadata.setContentLength(5);
String s3FileFullPath = UUID.randomUUID()+"a.txt";
PutObjectResult putResult = s3Client.putObject("bucket01", s3FileFullPath, new FileInputStream(localFile), metadata);
System.out.println(putResult);
}
public static void downLoadObject(S3Object s3Object) throws Exception{
File targetFile=new File("D:\\bluetata\\test2.jpg");
OutputStream out=new FileOutputStream(targetFile);
try(BufferedInputStream bufferedInputStream = new BufferedInputStream(
s3Object.getObjectContent()
)){
int len ;
byte[] buffer = new byte[1024];
while((len=bufferedInputStream.read(buffer))!=-1){
out.write(buffer, 0, len);
}
out.flush();
}catch (IOException e){
GlobalException.throwException(e.getMessage());
}
out.close();
}
public static String generatePresignedUrl(AmazonS3 s3Client,String bucketName, String key){
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
bucketName, key);
Date expirationDate = null;
try {
expirationDate = new SimpleDateFormat("yyyy-MM-dd").parse("2021-09-19");
} catch (Exception e) {
e.printStackTrace();
}
//設(shè)置過期時間
urlRequest.setExpiration(expirationDate);
URL url =s3Client.generatePresignedUrl(urlRequest);
System.out.println(url);
return url.getPath();
}
}
六、文末總結(jié)
文章探討了 MinIO 這一高性能對象存儲系統(tǒng)的重要性和功能。它具備兼容 Amazon S3 API、多種部署選項以及開源特性等優(yōu)勢,適用于各種場景,從開發(fā)測試到 DevOps 工具應(yīng)用。文章來源:http://www.zghlxwxcb.cn/news/detail-751735.html
文中詳細(xì)介紹了 MinIO 的安裝、配置和操作方式,涵蓋了使用 Docker 安裝、命令行客戶端操作、控制臺管理、以及使用 Java 原生操作和亞馬遜 Java SDK 操作 MinIO 對象的方法。這些方法不僅幫助用戶理解 MinIO 的基本操作,還展示了其與其他系統(tǒng)的兼容性和靈活性,使其成為一個強(qiáng)大而多功能的存儲解決方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-751735.html
[ 本文作者 ] bluetata
[ 原文鏈接 ] https://bluetata.blog.csdn.net/article/details/134566027
[ 最后更新 ] 11/23/2023 2:15
[ 版權(quán)聲明 ] 如果您在非 CSDN 網(wǎng)站內(nèi)看到這一行,
說明網(wǎng)絡(luò)爬蟲可能在本人還沒有完整發(fā)布的時候就抓走了我的文章,
可能導(dǎo)致內(nèi)容不完整,請去上述的原文鏈接查看原文。
到了這里,關(guān)于[ 云計算 | AWS 實踐 ] 基于 Amazon S3 協(xié)議搭建個人云存儲服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!