一、前言
MinIO 的基礎概念和環境部署可以參考:
我之前的文章:高性能分布式對象存儲——MinIO(環境部署):https://www.cnblogs.com/liugp/p/16558869.html
二、客戶端操作 MinIO Client(mc)
官方文檔:https://docs.min.io/docs/minio-admin-complete-guide.html
MinIO Client (mc) 為 UNIX 命令(如 ls、cat、cp、mirror、diff、find 等)提供了現代替代方案。它支持文件系統和兼容 Amazon S3 的云存儲服務(AWS Signature v2 和 v4)。
aliasset,removeandlistaliasesinconfigurationfile lslistbucketsandobjects mbmakeabucket rbremoveabucket cpcopyobjects mirrorsynchronizeobject(s)toaremotesite catdisplayobjectcontents headdisplayfirst'n'linesofanobject pipestreamSTDINtoanobject sharegenerateURLfortemporaryaccesstoanobject findsearchforobjects sqlrunsqlqueriesonobjects statshowobjectmetadata mvmoveobjects treelistbucketsandobjectsinatreeformat dusummarizediskusagerecursively retentionsetretentionforobject(s) legalholdsetlegalholdforobject(s) difflistdifferencesinobjectname,size,anddatebetweentwobuckets rmremoveobjects encryptmanagebucketencryptionconfig eventmanageobjectnotifications watchlistenforobjectnotificationevents undoundoPUT/DELETEoperations policymanageanonymousaccesstobucketsandobjects tagmanagetagsforbucket(s)andobject(s) ilmmanagebucketlifecycle versionmanagebucketversioning replicateconfigureserversidebucketreplication adminmanageMinIOservers updateupdatemctolatestrelease
1)mc Shell 自動補全
如果您使用的是 bash、zsh 或 fish。Shell 補全默認嵌入在 mc,安裝自動補全使用mc --autocompletion。重新啟動 shell,mc 將自動完成命令,如下所示。
#安裝 mc--autocompletion #重啟shell,即退出shell,重新連接即可

2)查看 mc 版本
mc--version

3)列出來自https://play.min.io的所有存儲桶
mclsplay #json格式 mc--jsonlsplay

4)創建桶
mb命令在對象存儲上創建一個新存儲桶。在文件系統上,它的行為類似于 mkdir -p 命令。Bucket 相當于文件系統中的驅動器或掛載點,不應被視為文件夾。MinIO 對每個用戶創建的存儲桶數量沒有任何限制。
#添加MinIO存儲服務 cd/opt/bigdata/minio ./mcconfighostaddminiohttp://local-168-182-110:19000adminadmin123456 #在自己部署的minio創建新存儲桶 mcmbminio/mybucket #查看所有桶 mclsminio
web 訪問:http://local-168-182-110:19001
5)復制文件到 MinIO
cp命令將數據從一個或多個源復制到目標。
mccpwget-logminio/mybucket #查看 mclswget-logminio/mybucket

6)日常使用
您可以添加 shell 別名來覆蓋您常用的 Unix 工具。
aliasls='mcls' aliascp='mccp' aliascat='mccat' aliasmkdir='mcmb' aliaspipe='mcpipe' aliasfind='mcfind' aliastree='mctree'
7)MinIO 管理員操作
MinIO Client (mc) 提供 admin 子命令來對 MinIO 部署執行管理任務。
servicerestartandstopallMinIOservers updateupdateallMinIOservers infodisplayMinIOserverinformation usermanageusers groupmanagegroups policymanagepoliciesdefinedintheMinIOserver replicatemanageMinIOsitereplication configmanageMinIOserverconfiguration decommission,decommanageMinIOserverpooldecommissioning healhealdisks,bucketsandobjectsonMinIOserver prometheusmanagesprometheusconfig kmsperformKMSmanagementoperations bucketmanagebucketsdefinedintheMinIOserver tiermanageremotetiertargetsforILMtransition topprovidetoplikestatisticsforMinIO traceshowhttptraceforMinIOserver consoleshowconsolelogsforMinIOserver
1)查看集群信息
mcadmininfominio #為了方便使用,可以設置別名 aliasminfo='mcadmininfo' minfominio
2)全局選項
1、選項 [--debug]
【示例】顯示 info 命令的詳細調試輸出
mcadmininfo--debugminio

2、選項 [--json]
JSON 選項啟用 JSON 行格式的可解析輸出。
【示例】MinIO 服務器信息
mcadmin--jsoninfominio

3)命令 service- 重啟和停止所有 MinIO 服務器
service 命令提供了一種重新啟動和停止所有 MinIO 服務器的方法。
【示例】
mcadminservicerestartminio
4)命令 policy- 管理預設策略
policy 添加、刪除、列出策略、獲取策略信息以及為 MinIO 服務器上的用戶設置策略的命令。
NAME: mcadminpolicy-managepolicies FLAGS: --help,-hshowhelp COMMANDS: addaddnewpolicy removeremovepolicy listlistallpolicies infoshowinfoonapolicy setsetIAMpolicyonauserorgroup
1、【示例】列出 MinIO 上的所有預設策略
mcadminpolicylistminio

2、【示例】在 MinIO 上添加新策略“listbucketsonly”
策略來自 /tmp/listbucketsonly.json。當此策略應用于用戶時,該用戶只能列出頂層存儲桶,但不能列出其他任何內容,沒有前綴,沒有對象。
首先使用以下信息創建 json 文件 /tmp/listbucketsonly.json。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets" ], "Resource":[ "arns3:::*" ] } ] }
將策略作為“listbucketsonly”添加到策略數據庫
mcadminpolicyaddminiolistbucketsonly/tmp/listbucketsonly.json #刪除MinIO上的策略“listbucketsonly” mcadminpolicyremoveminiolistbucketsonly
3、【示例】在用戶或組上設置標準策略。'writeonly'
#添加一個新用戶“newuser”,密碼"newuser123" mcadminuseraddminionewusernewuser123 #給用戶添加策略 mcadminpolicysetminiowriteonlyuser=newuser #添加組“somegroup”,把用戶“newuser”添加到組 mcadmingroupaddminiosomegroupnewuser #給組添加策略 mcadminpolicysetminiowriteonlygroup=somegroup
5)命令 user- 管理用戶
1、【示例】在 MinIO 上添加一個新用戶“newuser”
#添加一個新用戶“newuser”,密碼"newuser123" mcadminuseraddminionewusernewuser123
2、【示例】在 MinIO 上禁用用戶“newuser”
mcadminuserdisableminionewuser
3、【示例】在 MinIO 上啟用用戶“newuser”
mcadminuserenableminionewuser
4、【示例】在 MinIO 上刪除用戶“newuser”
mcadminuserremoveminionewuser
5、【示例】列出 MinIO 上的所有用戶
mcadminuserlist--jsonminio
6、【示例】顯示用戶信息
mcadminuserinfominionewuser
6)命令 group- 管理組
group 在 MinIO 服務器上添加、刪除、信息、列出、啟用、禁用組的命令。
1、【示例】將用戶添加到 MinIO 上的組“somegroup”
#如果組不存在,則創建組。 mcadmingroupaddminiosomegroupnewuser
2、【示例】從 MinIO 上的組“somegroup”中刪除用戶
mcadmingroupremoveminiosomegroupnewuser
3、【示例】在 MinIO 上刪除一個組“somegroup”
僅在給定組為空時有效,非空組無法刪除
mcadmingroupremoveminiosomegroup

4、【示例】在 MinIO 上獲取組“somegroup”的信息
#添加組 mcadmingroupaddminiosomegroupnewuser #刪除 mcadmingroupinfominiosomegroup
5、【示例】列出 MinIO 上的所有組
mcadmingrouplistminio
6、【示例】在 MinIO 上啟用組“somegroup”
mcadmingroupenableminiosomegroup
7、【示例】在 MinIO 上禁用組“somegroup”
mcadmingroupdisableminiosomegroup
7)命令 config- 管理服務器配置
config命令來管理 MinIO 服務器配置。
1、【示例】獲取“etcd”子系統配置
#通過引入第三方組件etcd,在不動原有集群的基礎上實現動態擴展方案 mcadminconfiggetminioetcd
2、【示例】在“etcd”子系統上設置特定設置
mcadminconfigsetminioetcdendpoints=http://[hostname|ip]:2379
3、【示例】獲取 MinIO 服務器/集群的整個服務器配置
mcadminconfigexportminio>/tmp/my-serverconfig
4、【示例】設置 MinIO 服務器/集群的整個服務器配置
mcadminconfigimportminio/tmp/my-serverconfig
這里列出了常用的命令,想了解更多,可以查看官方文檔:https://docs.min.io/docs/minio-admin-complete-guide.html
MinIO Client(mc)操作還是非常簡單的,但是更多的使用還是通過程序去調用 api 接口的,后續會講解~
三、MinIO 分布式集群擴容
參考:https://docs.min.io/docs/distributed-minio-quickstart-guide.html
MinIO 集群擴容方法:
常見的集群擴容方法可分為兩類:水平擴容和垂直擴容。
水平擴容,一般指通過增加節點數擴展系統性能;
而垂直擴容則指提升各節點自身的性能,例如增加節點的磁盤存儲空間。直接采用垂直擴容方式擴容 MinIO 集群的節點磁盤空間,會為集群運行帶來若干問題,官方也并不推薦。因此本文主要介紹 MinIO 的兩種水平擴容方式:對等擴容和聯邦擴容。
1)對等擴容
首先,MinIO 的極簡設計理念使得 MinIO 分布式集群并不支持向集群中添加單個節點并進行自動調節的擴容方式,這是因為加入單個節點后所引發的數據均衡以及糾刪組劃分等問題會為整個集群帶來復雜的調度和處理過程,并不利于維護。因此,MinIO 提供了一種對等擴容的方式,即要求增加的節點數和磁盤數均需與原集群保持對等。
例如原集群包含2 個節點 2 塊磁盤,則在擴容時必須同樣增加 2 個節點 2 塊磁盤(或為其倍數),以便系統維持相同的數據冗余 SLA,從而極大地降低擴容的復雜性;
如上例,在擴容后,MinIO 集群并不會對全部的 4 個節點進行完全的數據均衡,而是將原本的2 個節點視作一個區域,新加入的 2 節點視作另一區域;
當有新對象上傳時,集群將依據各區域的可用空間比例確定存放區域,在各區域內仍舊通過哈希算法確定對應的糾刪組進行最終的存放。此外,集群進行一次對等擴容后,還可依據擴容規則繼續進行對等擴容,但出于安全性考慮,集群的最大節點數一般不得超過 32 個。
對等擴容的優點在于配置操作簡單易行
通過一條命令即可完成擴容(注意:推薦使用連續的節點 IP,并參照 MinIO 官網在擴容命令中使用{})。而對等擴容的局限性在于:
擴容需重啟;
擴容存在限制,集群節點數一般不超過 32 個,這是由于 MinIO 集群通過分布式鎖保證強一致性,若集群節點數過大,維護強一致性將帶來性能問題。
【溫馨提示】這里不沿用之前的集群進行擴容,這里重新部署 2 個節點的集群。具體部署,可以參考我之前的文章:高性能分布式對象存儲——MinIO(環境部署)
1、環境準備
主機名 | IP | data | 備注 |
---|---|---|---|
local-168-182-110 | 192.168.182.110 | /opt/bigdata/minio/data/export{1,2} | 原始節點 |
local-168-182-111 | 192.168.182.111 | /opt/bigdata/minio/data/export{1,2} | 原始節點 |
local-168-182-112 | 192.168.182.112 | /opt/bigdata/minio/data/export{1,2} | 擴容節點 |
local-168-182-113 | 192.168.182.113 | /opt/bigdata/minio/data/export{1,2} | 擴容節點 |
啟動腳本
#!/bin/bash #創建日志存儲目錄 mkdir-p/opt/bigdata/minio/logs #分別在三個節點上創建存儲目錄 mkdir-p/opt/bigdata/minio/data/export{1,2,3,4} #創建配置目錄 mkdir-p/etc/minio exportMINIO_ROOT_USER=admin exportMINIO_ROOT_PASSWORD=admin123456 #所有節點都得修改重啟服務 #--address"0.0.0.0:9000"掛載9001端口為api端口(如Java客戶端)訪問的端口 #--console-address ":9000"掛載9000端口為web端口; /opt/bigdata/minio/minioserver--address0.0.0.0:9000--console-address0.0.0.0:9001--config-dir/etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{1...2}>/opt/bigdata/minio/logs/minio_server.log
minio 初始集群信息
web 訪問:http://local-168-182-110:19001
1、將配置 copy 一份到要擴容的節點
#在local-168-182-110執行 cd/opt/bigdata/minio scp-r/opt/bigdata/miniolocal-168-182-113:/opt/bigdata/ scp-r/usr/lib/systemd/system/minio.servicelocal-168-182-113:/usr/lib/systemd/system/minio.service
2、添加磁盤
這里也添加 2 塊 2G 的磁盤
#不重啟,直接刷新磁盤數據總線,獲取新加的磁盤 forhostin$(ls/sys/class/scsi_host);doecho"---">/sys/class/scsi_host/$host/scan;done lsblk #格式化 mkfs.ext4/dev/sdb mkfs.ext4/dev/sdc mkfs.ext4/dev/sdd mkfs.ext4/dev/sde #先刪再創建掛載目錄,因為這里面有其它節點的數據 rm-fr/opt/bigdata/minio/data/export{1..4} mkdir-p/opt/bigdata/minio/data/export{1..4} #掛載 mount/dev/sdb/opt/bigdata/minio/data/export1 mount/dev/sdc/opt/bigdata/minio/data/export2 mount/dev/sdd/opt/bigdata/minio/data/export3 mount/dev/sde/opt/bigdata/minio/data/export4
3、修改啟動腳本(run.sh)
#!/bin/bash #創建日志存儲目錄 mkdir-p/opt/bigdata/minio/logs #分別在三個節點上創建存儲目錄 mkdir-p/opt/bigdata/minio/data/export{1,2} #創建配置目錄 mkdir-p/etc/minio exportMINIO_ROOT_USER=admin exportMINIO_ROOT_PASSWORD=admin123456 #所有節點都得修改重啟服務 #--address"0.0.0.0:9000"掛載9001端口為api端口(如Java客戶端)訪問的端口 #--console-address ":9000"掛載9000端口為web端口; #擴容地址:http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{1...2} /opt/bigdata/minio/minioserver--address0.0.0.0:9000--console-address0.0.0.0:9001--config-dir/etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{1...2} http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{1...2}>/opt/bigdata/minio/logs/minio_server.log
可擴容的方式,使用 MINIO 糾刪碼,如果想要擴容,必須使用這種方式。注意上面是三個點。
下面的寫法多硬盤多節點部署是不可擴容的方式,下面是官方示例:
exportMINIO_ACCESS_KEY=exportMINIO_SECRET_KEY= minioserverhttp://192.168.1.11/export1http://192.168.1.11/export2 http://192.168.1.11/export3http://192.168.1.11/export4 http://192.168.1.12/export1http://192.168.1.12/export2 http://192.168.1.12/export3http://192.168.1.12/export4 http://192.168.1.13/export1http://192.168.1.13/export2 http://192.168.1.13/export3http://192.168.1.13/export4 http://192.168.1.14/export1http://192.168.1.14/export2 http://192.168.1.14/export3http://192.168.1.14/export4
4、重啟服務
systemctlrestartminio
web 訪問:http://local-168-182-110:19001
到這里就完成了對等擴容了。
2)聯邦擴容
MinIO 官方提供了另一種擴容機制——聯邦擴容,即通過引入 etcd,將多個 MinIO 分布式集群在邏輯上組成一個聯邦,對外以一個整體提供服務,并提供統一的命名空間。MinIO 聯邦集群的架構如下圖所示:
其中,etcd是一個開源的分布式鍵值存儲數據庫,在聯邦中用于記錄存儲桶 IP 地址。
聯邦內的各個集群其數據存儲以及一致性維護仍由各集群自行管理,聯邦只是對外提供一個整體邏輯視圖。
通過連接到聯邦中任一集群的任一節點,可以查詢并訪問聯邦內所有集群的全部數據,由此獲得了邏輯上的空間擴大感。
但實際上,對于一個外部應用訪問,聯邦需依賴 etcd 定位到存儲桶的實際存儲節點,再進行數據訪問,聯邦則對外屏蔽了桶 IP 查找和定位過程,從而在邏輯上對外形成了一個統一整體。因此,etcd 實際上起到了類似路由尋址的效果。
MinIO 聯邦集群的數據訪問機制具體如下:
客戶端應用向聯邦集群發送創建存儲桶請求,桶名為 bucket1;
聯邦會將 bucket1 實際所在的集群節點 IP 地址寫入 etcd 中,例如 bucket1 實際將存儲于聯邦中的集群 1 上,而集群 1 包含 2 個節點,其節點 IP 地址分別為 192.168.182.112 和 192.168.182.113,則 etcd 中將寫入如下兩條記錄:
1、部署 etcd
下載地址:https://github.com/etcd-io/etcd/releases
mkdir-p/opt/bigdata/etcd;cd/opt/bigdata/etcd wgethttps://github.com/etcd-io/etcd/releases/download/v3.4.20/etcd-v3.4.20-linux-amd64.tar.gz tar-xfetcd-v3.4.20-linux-amd64.tar.gz #創建存儲目錄 mkdir/opt/bigdata/etcd/data
創建配置文件 /usr/local/etcd/conf.yml,三個節點配置文件內容分別如下:
etcd01:local-168-182-110
name:etcd01 data-dir:/opt/bigdata/etcd/data initial-advertise-peer-urls:http://192.168.182.110:2380 listen-peer-urls:http://192.168.182.110:2380 listen-client-urls:http://192.168.182.110:2379,http://127.0.0.1:2379 advertise-client-urls:http://192.168.182.110:2379 initial-cluster-token:etcd-cluster initial-cluster:etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380 initial-cluster-state:new
etcd02:local-168-182-111
name:etcd02 data-dir:/opt/bigdata/etcd/data initial-advertise-peer-urls:http://192.168.182.111:2380 listen-peer-urls:http://192.168.182.111:2380 listen-client-urls:http://192.168.182.111:2379,http://127.0.0.1:2379 advertise-client-urls:http://192.168.182.111:2379 initial-cluster-token:etcd-cluster initial-cluster:etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380 initial-cluster-state:new
etcd03:local-168-182-112
name:etcd03 data-dir:/opt/bigdata/etcd/data initial-advertise-peer-urls:http://192.168.182.112:2380 listen-peer-urls:http://192.168.182.112:2380 listen-client-urls:http://192.168.182.112:2379,http://127.0.0.1:2379 advertise-client-urls:http://192.168.182.112:2379 initial-cluster-token:etcd-cluster initial-cluster:etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380 initial-cluster-state:new
【溫馨提示】只能寫 IP,寫主機名會啟動失敗
配置參數解析:
name:當前 etcd 節點名稱。
data-dir:數據存儲目錄。
initial-advertise-peer-urls:集群的其他節點通過該地址與當前節點通信。
listen-peer-urls:當前節點通過該地址監聽集群其他節點發送的信息。
listen-client-urls:當前節點通過該地址監聽客戶端發送的信息。
advertise-client-urls:客戶端通過該地址與當前節點通信
initial-cluster-token:用于區分不同的集群,同一集群的所有節點配置相同的值。
initial-cluster:當前集群的所有節點信息,當前節點根據此信息與其他節點取得聯系。
initial-cluster-state:本次是否為新建集群,有兩個取值:new 和 existing。
配置服務
cat>/usr/lib/systemd/system/etcd.service<
啟動服務
systemctldaemon-reload systemctlstartetcd.service
驗證
#加軟連接 ln-s/opt/bigdata/etcd/etcd-v3.4.20-linux-amd64/etcdctl/usr/local/bin/etcdctl #查看集群成員列表 etcdctlmemberlist #查看集群成員健康情況 etcdctlendpointhealth--endpoints=http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380
查看 etcd 版本
ln-s/opt/bigdata/etcd/etcd-v3.4.20-linux-amd64/etcd/usr/local/bin/etcd etcd--version
2、運行多個 MinIO 集群
集群 1
cd/opt/bigdata/minio exportMINIO_ETCD_ENDPOINTS="http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380" mkdir-p/etc/minio exportMINIO_ROOT_USER=admin exportMINIO_ROOT_PASSWORD=admin123456 exportMINIO_PUBLIC_IPS=192.168.182.110,192.168.182.111 ./minioserver--address0.0.0.0:8000--console-address0.0.0.0:8001--config-dir/etc/miniohttp://192.168.182.11{0...1}/opt/bigdata/minio/data/export{3...4}
web 訪問:http://local-168-182-110:8001/
集群 2
cd/opt/bigdata/minio exportMINIO_ETCD_ENDPOINTS="http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380" mkdir-p/etc/minio exportMINIO_ROOT_USER=admin exportMINIO_ROOT_PASSWORD=admin123456 exportMINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113 ./minioserver--address0.0.0.0:8000--console-address0.0.0.0:8001--config-dir/etc/miniohttp://192.168.182.11{2...3}/opt/bigdata/minio/data/export{3...4}
web 訪問:http://local-168-182-112:8001/
配置 nginx
#/etc/nginx/conf.d/minio2.conf upstreamminio_api2{ ip_hash; server192.168.182.110:8000; server192.168.182.111:8000; server192.168.182.112:8000; server192.168.182.113:8000; } upstreamminio_console2{ ip_hash; server192.168.182.110:8001; server192.168.182.111:8001; server192.168.182.112:8001; server192.168.182.113:8001; } server{ listen18000; server_name192.168.182.110; ignore_invalid_headersoff; client_max_body_size0; proxy_bufferingoff; location/{ proxy_set_headerX-Forwarded-Proto$scheme; proxy_set_headerHost$http_host; proxy_set_headerX-Real-IP$remote_addr; proxy_connect_timeout300; proxy_http_version1.1; chunked_transfer_encodingoff; proxy_ignore_client_aborton; proxy_passhttp://minio_api2; } } server{ listen18001; server_name192.168.182.110; ignore_invalid_headersoff; client_max_body_size0; proxy_bufferingoff; location/{ proxy_set_headerX-Forwarded-Proto$scheme; proxy_set_headerHost$http_host; proxy_set_headerX-Real-IP$remote_addr; proxy_connect_timeout300; proxy_http_version1.1; chunked_transfer_encodingoff; proxy_ignore_client_aborton; proxy_passhttp://minio_console2; } }
重新加載 nginx 生效
systemctlreloadnginx
web 訪問:local-168-182-110:18001/
不同的客戶端訪問會顯示不同的節點信息MinIO 的基本操作和 MinIO 擴容實戰就到這里了,有疑問的小伙伴歡迎給我留言哦,后續會持續分享更多關于大數據的教程,請小伙伴耐心等待哦~
審核編輯:彭靜
-
驅動器
+關注
關注
54文章
8460瀏覽量
148334 -
云存儲
+關注
關注
7文章
774瀏覽量
46494 -
文件系統
+關注
關注
0文章
293瀏覽量
20194
原文標題:超詳細分布式對象存儲 MinIO 實戰教程
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
【NanoPi NEO試用體驗】開發環境部署
Hadoop的集群環境部署說明
VSCode環境部署
在嵌入式環境中部署環境的相關資料分享
Arduino環境下ESP32如何部署
Python在web應用實現部署的協議與實現協議的工具解析
嵌入式環境部署

高性能對象存儲MinIO的基本概念和環境部署
云服務器 Flexus X 實例,Docker 集成搭建 MinIO

評論