一、概述
MinIO
是一個(gè)開(kāi)源的對(duì)象存儲(chǔ)服務(wù)器,它兼容Amazon S3(Simple Storage Service)API
。它被設(shè)計(jì)用于構(gòu)建分布式存儲(chǔ)架構(gòu),提供高可用性、高性能和可擴(kuò)展的對(duì)象存儲(chǔ)解決方案。
下面是MinIO的一些主要特點(diǎn)和功能:
-
對(duì)象存儲(chǔ):MinIO以對(duì)象為基本存儲(chǔ)單元,可以存儲(chǔ)和管理任意大小的文件、數(shù)據(jù)對(duì)象。它提供了標(biāo)準(zhǔn)的對(duì)象存儲(chǔ)操作,如上傳、下載、刪除和元數(shù)據(jù)管理。
-
分布式架構(gòu):MinIO采用分布式架構(gòu),可以在多個(gè)節(jié)點(diǎn)上部署,并將數(shù)據(jù)分布和復(fù)制在不同的節(jié)點(diǎn)上。這提供了高可用性和數(shù)據(jù)冗余,確保數(shù)據(jù)的持久性和可靠性。
-
高性能:MinIO通過(guò)并行處理和分布式架構(gòu)實(shí)現(xiàn)高性能的數(shù)據(jù)存取。它利用現(xiàn)代硬件和網(wǎng)絡(luò)技術(shù),充分利用多核處理器和高帶寬網(wǎng)絡(luò),以實(shí)現(xiàn)快速的數(shù)據(jù)傳輸和處理。
-
水平擴(kuò)展:MinIO可以水平擴(kuò)展,通過(guò)添加更多的節(jié)點(diǎn)來(lái)增加存儲(chǔ)容量和吞吐量。它支持自動(dòng)數(shù)據(jù)分片和負(fù)載均衡,確保數(shù)據(jù)在各個(gè)節(jié)點(diǎn)上均勻分布和訪(fǎng)問(wèn)的負(fù)載均衡。
-
數(shù)據(jù)保護(hù):MinIO提供了多種數(shù)據(jù)保護(hù)機(jī)制,包括數(shù)據(jù)冗余、故障轉(zhuǎn)移和數(shù)據(jù)校驗(yàn)。它可以在不同的節(jié)點(diǎn)之間復(fù)制數(shù)據(jù),以應(yīng)對(duì)節(jié)點(diǎn)故障和數(shù)據(jù)損壞的情況。
-
安全性:MinIO支持?jǐn)?shù)據(jù)加密和訪(fǎng)問(wèn)控制,保護(hù)存儲(chǔ)在其中的數(shù)據(jù)的安全性和隱私性。它提供了傳輸層加密(TLS/SSL)和服務(wù)器端加密選項(xiàng),以及身份驗(yàn)證和訪(fǎng)問(wèn)控制機(jī)制。
總的來(lái)說(shuō),MinIO是一個(gè)開(kāi)源的高性能對(duì)象存儲(chǔ)服務(wù)器,適用于構(gòu)建分布式存儲(chǔ)系統(tǒng)。它具有高可用性、可擴(kuò)展性和數(shù)據(jù)保護(hù)機(jī)制,兼容Amazon S3 API,使其與現(xiàn)有的S3生態(tài)系統(tǒng)和工具集成無(wú)縫。MinIO在大數(shù)據(jù)、云計(jì)算和容器化環(huán)境中廣泛應(yīng)用,為應(yīng)用程序提供了可靠、高效的對(duì)象存儲(chǔ)服務(wù)。
這里主要側(cè)重使用docker快速部署環(huán)境,想了解更多,可以參考我以下幾篇文章:
- 高性能分布式對(duì)象存儲(chǔ)——MinIO(環(huán)境部署)
- 高性能分布式對(duì)象存儲(chǔ)——MinIO實(shí)戰(zhàn)操作(MinIO擴(kuò)容)
- 【云原生】Minio on k8s 講解與實(shí)戰(zhàn)操作
- 【云原生.大數(shù)據(jù)】鏡像倉(cāng)庫(kù)Harbor對(duì)接MinIO對(duì)象存儲(chǔ)
官方文檔:https://docs.min.io/
中文文檔:http://docs.minio.org.cn/docs/
二、MinIO 與 Ceph 對(duì)比
MinIO和Ceph都是流行的開(kāi)源存儲(chǔ)解決方案,它們?cè)趯?duì)象存儲(chǔ)領(lǐng)域有不同的特點(diǎn)和適用場(chǎng)景。下面是MinIO和Ceph的對(duì)比:
1)架構(gòu)設(shè)計(jì)對(duì)比
-
MinIO
:MinIO
采用分布式架構(gòu),以水平擴(kuò)展為基礎(chǔ)。它通過(guò)多個(gè)獨(dú)立的MinIO節(jié)點(diǎn)組成集群,每個(gè)節(jié)點(diǎn)都是獨(dú)立的對(duì)象存儲(chǔ)服務(wù)器。MinIO專(zhuān)注于提供簡(jiǎn)單、輕量級(jí)的對(duì)象存儲(chǔ)服務(wù),適用于小型到中等規(guī)模的部署。 -
Ceph
:Ceph
是一個(gè)分布式存儲(chǔ)系統(tǒng),由對(duì)象存儲(chǔ)、塊存儲(chǔ)和文件系統(tǒng)組成。它使用RADOS(Reliable Autonomic Distributed Object Store)
作為底層存儲(chǔ)系統(tǒng),提供高可用性和數(shù)據(jù)冗余。Ceph適用于大規(guī)模的企業(yè)級(jí)部署,具有復(fù)雜的架構(gòu)和豐富的功能。
2)數(shù)據(jù)一致性對(duì)比
-
MinIO
:MinIO
在默認(rèn)配置下提供最終一致性,即寫(xiě)入操作返回成功后,數(shù)據(jù)可能會(huì)有一定的時(shí)間窗口內(nèi)的延遲才能完全一致。這適用于許多應(yīng)用場(chǎng)景,如數(shù)據(jù)備份、存檔等。 -
Ceph
:Ceph
提供強(qiáng)一致性,即寫(xiě)入操作在返回成功后,數(shù)據(jù)即刻就達(dá)到一致性。這對(duì)于需要強(qiáng)一致性保證的應(yīng)用場(chǎng)景非常重要,如數(shù)據(jù)庫(kù)和事務(wù)處理。
3)部署和管理對(duì)比
-
MinIO
:MinIO
的部署和管理相對(duì)簡(jiǎn)單,可以通過(guò)單個(gè)二進(jìn)制文件或容器進(jìn)行快速安裝和配置。它提供了直觀(guān)的管理界面和易于使用的API,使得管理和監(jiān)控變得簡(jiǎn)單。 -
Ceph
:Ceph
的部署和管理相對(duì)復(fù)雜,涉及多個(gè)組件和配置。它需要更多的時(shí)間和專(zhuān)業(yè)知識(shí)來(lái)設(shè)置和維護(hù),需要熟悉Ceph的架構(gòu)和配置。
4)生態(tài)系統(tǒng)和兼容性對(duì)比
-
MinIO
:MinIO與Amazon S3 API兼容,這意味著現(xiàn)有的S3工具和應(yīng)用程序可以無(wú)縫地與MinIO集成。它還有一個(gè)活躍的社區(qū),提供了各種客戶(hù)端庫(kù)和插件,擴(kuò)展了其功能和兼容性。 -
Ceph
:Ceph
具有廣泛的生態(tài)系統(tǒng)和豐富的功能集。它可以與多個(gè)協(xié)議和接口(如RADOS、RBD、CephFS)進(jìn)行集成,提供塊存儲(chǔ)、文件系統(tǒng)和對(duì)象存儲(chǔ)的全面解決方案。
綜上所述,MinIO適用于簡(jiǎn)單、輕量級(jí)的對(duì)象存儲(chǔ)需求,注重高性能和易用性。它適合中小規(guī)模部署,并且與Amazon S3兼容,易于與現(xiàn)有的S3生態(tài)系統(tǒng)集成。
-
Ceph
則適用于大規(guī)模、復(fù)雜的企業(yè)級(jí)存儲(chǔ)需求。它提供強(qiáng)一致性和豐富的功能集,適合需要高可用性、數(shù)據(jù)冗余和復(fù)雜數(shù)據(jù)操作的場(chǎng)景。Ceph的部署和管理相對(duì)復(fù)雜,需要更多的配置和管理工作。 -
選擇
MinIO
還是Ceph取決于具體的需求和場(chǎng)景。如果你需要一個(gè)簡(jiǎn)單、易用、高性能的對(duì)象存儲(chǔ)解決方案,并與S3兼容,那么MinIO是一個(gè)不錯(cuò)的選擇。如果你需要一個(gè)功能強(qiáng)大、可擴(kuò)展、支持塊存儲(chǔ)和文件系統(tǒng)的分布式存儲(chǔ)系統(tǒng),且具備強(qiáng)一致性的要求,那么Ceph是更適合的選擇。
無(wú)論選擇MinIO還是Ceph,都需要仔細(xì)評(píng)估其與特定應(yīng)用和環(huán)境的兼容性、性能需求、管理復(fù)雜性和可擴(kuò)展性,以確保選擇的解決方案能夠滿(mǎn)足實(shí)際需求并提供可靠的存儲(chǔ)服務(wù)。
三、前期準(zhǔn)備
1)部署 docker
# 安裝yum-config-manager配置工具
yum -y install yum-utils
# 建議使用阿里云yum源:(推薦)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker-ce版本
yum install -y docker-ce
# 啟動(dòng)并開(kāi)機(jī)啟動(dòng)
systemctl enable --now docker
docker --version
2)部署 docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
四、創(chuàng)建網(wǎng)絡(luò)
# 創(chuàng)建,注意不能使用hadoop_network,要不然啟動(dòng)hs2服務(wù)的時(shí)候會(huì)有問(wèn)題?。?!
docker network create hadoop-network
# 查看
docker network ls
五、MinIO 編排部署
1)下載 MinIO 安裝包
wget https://dl.min.io/server/minio/release/linux-amd64/minio
2)配置
這里部署的是偽集群,但是需要的磁盤(pán)還是那么多,下面就是掛載磁盤(pán)的步驟:
### 1、格式化
mkfs.ext4 /dev/sdb
mkfs.ext4 /dev/sdc
mkfs.ext4 /dev/sdd
mkfs.ext4 /dev/sde
mkfs.ext4 /dev/sdf
mkfs.ext4 /dev/sdg
mkfs.ext4 /dev/sdh
mkfs.ext4 /dev/sdi
mkfs.ext4 /dev/sdj
mkfs.ext4 /dev/sdk
mkfs.ext4 /dev/sdl
mkfs.ext4 /dev/sdm
### 2、創(chuàng)建掛載目錄
mkdir /opt/apache/docker-compose-minio/data/minio-node{1..3}/data{1..4}
### 3、掛載
# minio-node1
mount /dev/sdb /opt/apache/docker-compose-minio/data/minio-node1/data1
mount /dev/sdc /opt/apache/docker-compose-minio/data/minio-node1/data2
mount /dev/sdd /opt/apache/docker-compose-minio/data/minio-node1/data3
mount /dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4
# minio-node2
mount /dev/sdf /opt/apache/docker-compose-minio/data/minio-node2/data1
mount /dev/sdg /opt/apache/docker-compose-minio/data/minio-node2/data2
mount /dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3
mount /dev/sdi /opt/apache/docker-compose-minio/data/minio-node2/data4
# minio-node3
mount /dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1
mount /dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2
mount /dev/sdl /opt/apache/docker-compose-minio/data/minio-node3/data3
mount /dev/sdm /opt/apache/docker-compose-minio/data/minio-node3/data4
### 4、持久化配置
# minio-node1
echo "/dev/sdb /opt/apache/docker-compose-minio/data/minio-node1/data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdc /opt/apache/docker-compose-minio/data/minio-node1/data2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdd /opt/apache/docker-compose-minio/data/minio-node1/data3 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4 ext4 defaults 0 0" >> /etc/fstab
# minio-node2
echo "/dev/sdf /opt/apache/docker-compose-minio/data/minio-node2/data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdg /opt/apache/docker-compose-minio/data/minio-node2/data2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdi /opt/apache/docker-compose-minio/data/minio-node1/data4 ext4 defaults 0 0" >> /etc/fstab
# minio-node3
echo "/dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdl /opt/apache/docker-compose-minio/data/minio-node3/data3 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdm /opt/apache/docker-compose-minio/data/minio-node3/data4 ext4 defaults 0 0" >> /etc/fstab
3)啟動(dòng)腳本 bootstrap.sh
#!/bin/bash
source /etc/profile
# 在三臺(tái)機(jī)器上都執(zhí)行該文件,即以分布式的方式啟動(dòng)了MINIO
# --address "0.0.0.0:9000" 掛載9001端口為api端口(如Java客戶(hù)端)訪(fǎng)問(wèn)的端口
# --console-address ":9000" 掛載9000端口為web端口;
/opt/apache/minio/minio server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 --config-dir /etc/minio \
http://minio-node1/opt/apache/minio/data/export1 \
http://minio-node1/opt/apache/minio/data/export2 \
http://minio-node1/opt/apache/minio/data/export3 \
http://minio-node1/opt/apache/minio/data/export4 \
http://minio-node2/opt/apache/minio/data/export1 \
http://minio-node2/opt/apache/minio/data/export2 \
http://minio-node2/opt/apache/minio/data/export3 \
http://minio-node2/opt/apache/minio/data/export4 \
http://minio-node3/opt/apache/minio/data/export1 \
http://minio-node3/opt/apache/minio/data/export2 \
http://minio-node3/opt/apache/minio/data/export3 \
http://minio-node3/opt/apache/minio/data/export4 >/opt/apache/minio/logs/minio_server.log &
tail -f /opt/apache/minio/logs/minio_server.log
Minio默認(rèn)9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
-
MINIO_ACCESS_KEY
:用戶(hù)名,長(zhǎng)度最小是5個(gè)字符 -
MINIO_SECRET_KEY
:密碼,密碼不能設(shè)置過(guò)于簡(jiǎn)單,不然minio會(huì)啟動(dòng)失敗,長(zhǎng)度最小是8個(gè)字符 -
–config-dir
:指定集群配置文件目錄 -
–address
: api的端口,默認(rèn)是9000
-
--console-address
:web端口,默認(rèn)隨機(jī)
【溫馨提示】磁盤(pán)大小必須>
1G
,這里我添加的是4*2G的盤(pán)
4)構(gòu)建鏡像 Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos-jdk:7.7.1908
# 創(chuàng)建日志存儲(chǔ)目錄
RUN mkdir -p /opt/apache/minio/logs
# 分別在三個(gè)節(jié)點(diǎn)上創(chuàng)建存儲(chǔ)目錄
RUN mkdir -p /opt/apache/minio/data/export{1..3}
# 創(chuàng)建配置目錄
RUN mkdir -p /etc/minio
# 賬號(hào)密碼
ENV MINIO_ROOT_USER=admin
ENV MINIO_ROOT_PASSWORD=admin123456
# copy minio
COPY minio /opt/apache/minio/
# copy minio client mc
COPY mc /opt/apache/minio/
RUN ln -s /opt/apache/minio/mc /usr/local/sbin/mc
# copy bootstrap.sh
COPY bootstrap.sh /opt/apache/
RUN chmod +x /opt/apache/bootstrap.sh
WORKDIR /opt/apache
開(kāi)始構(gòu)建鏡像
docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 . --no-cache --progress=plain
# 為了方便小伙伴下載即可使用,我這里將鏡像文件推送到阿里云的鏡像倉(cāng)庫(kù)
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619
### 參數(shù)解釋
# -t:指定鏡像名稱(chēng)
# . :當(dāng)前目錄Dockerfile
# -f:指定Dockerfile路徑
# --no-cache:不緩存
5)編排 docker-compose.yaml
version: '3'
services:
minio-node1:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619
container_name: minio-node1
hostname: minio-node1
restart: always
privileged: true
env_file:
- .env
expose:
- "${MinIO_PORT}"
ports:
- "${MinIO_HTTP_PORT}"
volumes:
- /opt/apache/docker-compose-minio/data/minio-node1/data1:/opt/apache/minio/data/export1
- /opt/apache/docker-compose-minio/data/minio-node1/data2:/opt/apache/minio/data/export2
- /opt/apache/docker-compose-minio/data/minio-node1/data3:/opt/apache/minio/data/export3
- /opt/apache/docker-compose-minio/data/minio-node1/data4:/opt/apache/minio/data/export4
command: ["sh","-c","/opt/apache/bootstrap.sh"]
networks:
- hadoop-network
healthcheck:
test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]
interval: 10s
timeout: 10s
retries: 5
minio-node2:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619
container_name: minio-node2
hostname: minio-node2
restart: always
privileged: true
env_file:
- .env
expose:
- "${MinIO_PORT}"
ports:
- "${MinIO_HTTP_PORT}"
volumes:
- /opt/apache/docker-compose-minio/data/minio-node2/data1:/opt/apache/minio/data/export1
- /opt/apache/docker-compose-minio/data/minio-node2/data2:/opt/apache/minio/data/export2
- /opt/apache/docker-compose-minio/data/minio-node2/data3:/opt/apache/minio/data/export3
- /opt/apache/docker-compose-minio/data/minio-node2/data4:/opt/apache/minio/data/export4
command: ["sh","-c","/opt/apache/bootstrap.sh"]
networks:
- hadoop-network
healthcheck:
test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]
interval: 10s
timeout: 10s
retries: 5
minio-node3:
image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619
container_name: minio-node3
hostname: minio-node3
restart: always
privileged: true
env_file:
- .env
expose:
- "${MinIO_PORT}"
ports:
- "${MinIO_HTTP_PORT}"
volumes:
- /opt/apache/docker-compose-minio/data/minio-node3/data1:/opt/apache/minio/data/export1
- /opt/apache/docker-compose-minio/data/minio-node3/data2:/opt/apache/minio/data/export2
- /opt/apache/docker-compose-minio/data/minio-node3/data3:/opt/apache/minio/data/export3
- /opt/apache/docker-compose-minio/data/minio-node3/data4:/opt/apache/minio/data/export4
command: ["sh","-c","/opt/apache/bootstrap.sh"]
networks:
- hadoop-network
healthcheck:
test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]
interval: 10s
timeout: 10s
retries: 5
# 連接外部網(wǎng)絡(luò)
networks:
hadoop-network:
external: true
.env
文件內(nèi)容
MinIO_PORT=9000
MinIO_HTTP_PORT=9001
6)開(kāi)始部署
# --project-name指定項(xiàng)目名稱(chēng),默認(rèn)是當(dāng)前目錄名稱(chēng)
docker-compose -f docker-compose.yaml up -d
# 查看
docker-compose -f docker-compose.yaml ps
# 卸載
docker-compose -f docker-compose.yaml down
7)簡(jiǎn)單測(cè)試驗(yàn)證
# 登錄容器內(nèi)測(cè)試
docker exec -it minio-node1 bash
# 登錄,密文輸入(推薦)
[root@minio-node1 apache]# mc config host add minio http://localhost:9000
Enter Access Key: admin
Enter Secret Key: 輸入密碼
Added `minio` successfully.
# 查看集群信息
mc admin info minio
8)web 訪(fǎng)問(wèn)
http://ip:port
docker-compose -f docker-compose.yaml ps
賬號(hào)/密碼:admin
/admin123456
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-613326.html
到此通過(guò) docker-compose 快速部署 MinIO 保姆級(jí)教程就完結(jié)了,有任何疑問(wèn)請(qǐng)關(guān)注我公眾號(hào):大數(shù)據(jù)與云原生技術(shù)分享
,加群交流或私信溝通,,如本篇文章對(duì)您有所幫助,麻煩幫忙一鍵三連(點(diǎn)贊、轉(zhuǎn)發(fā)、收藏)~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613326.html
到了這里,關(guān)于【大數(shù)據(jù)】通過(guò) docker-compose 快速部署 MinIO 保姆級(jí)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!