一、前言
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 扩容实战就到这里了,有疑问的小伙伴欢迎给我留言哦,后续会持续分享更多关于大数据的教程,请小伙伴耐心等待哦~
审核编辑:彭静
-
驱动器
+关注
关注
52文章
8150浏览量
145956 -
云存储
+关注
关注
7文章
732浏览量
45990 -
文件系统
+关注
关注
0文章
284浏览量
19882
原文标题:超详细分布式对象存储 MinIO 实战教程
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论