文章目錄
- 一、概述
- 二、MinIO 與 Ceph 對比
- 1)架構設計對比
- 2)數據一致性對比
- 3)部署和管理對比
- 4)生態系統和兼容性對比
- 三、前期準備
- 1)部署 docker
- 2)部署 docker-compose
- 四、創建網絡
- 五、MinIO 編排部署
- 1)下載 MinIO 安裝包
- 2)配置
- 3)啟動腳本 bootstrap.sh
- 4)構建鏡像 Dockerfile
- 5)編排 docker-compose.yaml
- 6)開始部署
- 7)簡單測試驗證
- 8)web 訪問
一、概述
MinIO
是一個開源的對象存儲服務器,它兼容Amazon S3(Simple Storage Service)API
。它被設計用于構建分布式存儲架構,提供高可用性、高性能和可擴展的對象存儲解決方案。
下面是MinIO的一些主要特點和功能:
-
對象存儲:MinIO以對象為基本存儲單元,可以存儲和管理任意大小的文件、數據對象。它提供了標準的對象存儲操作,如上傳、下載、刪除和元數據管理。
-
分布式架構:MinIO采用分布式架構,可以在多個節點上部署,并將數據分布和復制在不同的節點上。這提供了高可用性和數據冗余,確保數據的持久性和可靠性。
-
高性能:MinIO通過并行處理和分布式架構實現高性能的數據存取。它利用現代硬件和網絡技術,充分利用多核處理器和高帶寬網絡,以實現快速的數據傳輸和處理。
-
水平擴展:MinIO可以水平擴展,通過添加更多的節點來增加存儲容量和吞吐量。它支持自動數據分片和負載均衡,確保數據在各個節點上均勻分布和訪問的負載均衡。
-
數據保護:MinIO提供了多種數據保護機制,包括數據冗余、故障轉移和數據校驗。它可以在不同的節點之間復制數據,以應對節點故障和數據損壞的情況。
-
安全性:MinIO支持數據加密和訪問控制,保護存儲在其中的數據的安全性和隱私性。它提供了傳輸層加密(TLS/SSL)和服務器端加密選項,以及身份驗證和訪問控制機制。
總的來說,MinIO是一個開源的高性能對象存儲服務器,適用于構建分布式存儲系統。它具有高可用性、可擴展性和數據保護機制,兼容Amazon S3 API,使其與現有的S3生態系統和工具集成無縫。MinIO在大數據、云計算和容器化環境中廣泛應用,為應用程序提供了可靠、高效的對象存儲服務。
這里主要側重使用docker快速部署環境,想了解更多,可以參考我以下幾篇文章:
- 高性能分布式對象存儲——MinIO(環境部署)
- 高性能分布式對象存儲——MinIO實戰操作(MinIO擴容)
- 【云原生】Minio on k8s 講解與實戰操作
- 【云原生.大數據】鏡像倉庫Harbor對接MinIO對象存儲
官方文檔:https://docs.min.io/
中文文檔:http://docs.minio.org.cn/docs/
二、MinIO 與 Ceph 對比
MinIO和Ceph都是流行的開源存儲解決方案,它們在對象存儲領域有不同的特點和適用場景。下面是MinIO和Ceph的對比:
1)架構設計對比
MinIO
:MinIO
采用分布式架構,以水平擴展為基礎。它通過多個獨立的MinIO節點組成集群,每個節點都是獨立的對象存儲服務器。MinIO專注于提供簡單、輕量級的對象存儲服務,適用于小型到中等規模的部署。Ceph
:Ceph
是一個分布式存儲系統,由對象存儲、塊存儲和文件系統組成。它使用RADOS(Reliable Autonomic Distributed Object Store)
作為底層存儲系統,提供高可用性和數據冗余。Ceph適用于大規模的企業級部署,具有復雜的架構和豐富的功能。
2)數據一致性對比
MinIO
:MinIO
在默認配置下提供最終一致性,即寫入操作返回成功后,數據可能會有一定的時間窗口內的延遲才能完全一致。這適用于許多應用場景,如數據備份、存檔等。Ceph
:Ceph
提供強一致性,即寫入操作在返回成功后,數據即刻就達到一致性。這對于需要強一致性保證的應用場景非常重要,如數據庫和事務處理。
3)部署和管理對比
MinIO
:MinIO
的部署和管理相對簡單,可以通過單個二進制文件或容器進行快速安裝和配置。它提供了直觀的管理界面和易于使用的API,使得管理和監控變得簡單。Ceph
:Ceph
的部署和管理相對復雜,涉及多個組件和配置。它需要更多的時間和專業知識來設置和維護,需要熟悉Ceph的架構和配置。
4)生態系統和兼容性對比
-
MinIO
:MinIO與Amazon S3 API兼容,這意味著現有的S3工具和應用程序可以無縫地與MinIO集成。它還有一個活躍的社區,提供了各種客戶端庫和插件,擴展了其功能和兼容性。 -
Ceph
:Ceph
具有廣泛的生態系統和豐富的功能集。它可以與多個協議和接口(如RADOS、RBD、CephFS)進行集成,提供塊存儲、文件系統和對象存儲的全面解決方案。
綜上所述,MinIO適用于簡單、輕量級的對象存儲需求,注重高性能和易用性。它適合中小規模部署,并且與Amazon S3兼容,易于與現有的S3生態系統集成。
-
Ceph
則適用于大規模、復雜的企業級存儲需求。它提供強一致性和豐富的功能集,適合需要高可用性、數據冗余和復雜數據操作的場景。Ceph的部署和管理相對復雜,需要更多的配置和管理工作。 -
選擇
MinIO
還是Ceph取決于具體的需求和場景。如果你需要一個簡單、易用、高性能的對象存儲解決方案,并與S3兼容,那么MinIO是一個不錯的選擇。如果你需要一個功能強大、可擴展、支持塊存儲和文件系統的分布式存儲系統,且具備強一致性的要求,那么Ceph是更適合的選擇。
無論選擇MinIO還是Ceph,都需要仔細評估其與特定應用和環境的兼容性、性能需求、管理復雜性和可擴展性,以確保選擇的解決方案能夠滿足實際需求并提供可靠的存儲服務。
三、前期準備
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
# 啟動并開機啟動
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-composechmod +x /usr/local/bin/docker-compose
docker-compose --version
四、創建網絡
# 創建,注意不能使用hadoop_network,要不然啟動hs2服務的時候會有問題!!!
docker network create hadoop-network# 查看
docker network ls
五、MinIO 編排部署
1)下載 MinIO 安裝包
wget https://dl.min.io/server/minio/release/linux-amd64/minio
2)配置
這里部署的是偽集群,但是需要的磁盤還是那么多,下面就是掛載磁盤的步驟:
### 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、創建掛載目錄
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)啟動腳本 bootstrap.sh
#!/bin/bash
source /etc/profile# 在三臺機器上都執行該文件,即以分布式的方式啟動了MINIO
# --address "0.0.0.0:9000" 掛載9001端口為api端口(如Java客戶端)訪問的端口
# --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默認9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
MINIO_ACCESS_KEY
:用戶名,長度最小是5個字符MINIO_SECRET_KEY
:密碼,密碼不能設置過于簡單,不然minio會啟動失敗,長度最小是8個字符–config-dir
:指定集群配置文件目錄–address
: api的端口,默認是9000
--console-address
:web端口,默認隨機
【溫馨提示】磁盤大小必須>
1G
,這里我添加的是4*2G的盤
4)構建鏡像 Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos-jdk:7.7.1908# 創建日志存儲目錄
RUN mkdir -p /opt/apache/minio/logs
# 分別在三個節點上創建存儲目錄
RUN mkdir -p /opt/apache/minio/data/export{1..3}
# 創建配置目錄
RUN mkdir -p /etc/minio
# 賬號密碼
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.shWORKDIR /opt/apache
開始構建鏡像
docker build -t registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 . --no-cache --progress=plain# 為了方便小伙伴下載即可使用,我這里將鏡像文件推送到阿里云的鏡像倉庫
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619### 參數解釋
# -t:指定鏡像名稱
# . :當前目錄Dockerfile
# -f:指定Dockerfile路徑
# --no-cache:不緩存
5)編排 docker-compose.yaml
version: '3'
services:minio-node1:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619container_name: minio-node1hostname: minio-node1restart: alwaysprivileged: trueenv_file:- .envexpose:- "${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/export4command: ["sh","-c","/opt/apache/bootstrap.sh"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]interval: 10stimeout: 10sretries: 5minio-node2:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619container_name: minio-node2hostname: minio-node2restart: alwaysprivileged: trueenv_file:- .envexpose:- "${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/export4command: ["sh","-c","/opt/apache/bootstrap.sh"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]interval: 10stimeout: 10sretries: 5minio-node3:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619container_name: minio-node3hostname: minio-node3restart: alwaysprivileged: trueenv_file:- .envexpose:- "${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/export4command: ["sh","-c","/opt/apache/bootstrap.sh"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"]interval: 10stimeout: 10sretries: 5# 連接外部網絡
networks:hadoop-network:external: true
.env
文件內容
MinIO_PORT=9000
MinIO_HTTP_PORT=9001
6)開始部署
# --project-name指定項目名稱,默認是當前目錄名稱
docker-compose -f docker-compose.yaml up -d# 查看
docker-compose -f docker-compose.yaml ps# 卸載
docker-compose -f docker-compose.yaml down
7)簡單測試驗證
# 登錄容器內測試
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 訪問
http://ip:port
docker-compose -f docker-compose.yaml ps
賬號/密碼:admin
/admin123456
到此通過 docker-compose 快速部署 MinIO 保姆級教程就完結了,有任何疑問請關注我公眾號:大數據與云原生技術分享
,加群交流或私信溝通,,如本篇文章對您有所幫助,麻煩幫忙一鍵三連(點贊、轉發、收藏)~