合 MinIO_S3的简介和安装使用
Tags: GreenPlum存储异地备份S3MinIOsshfs备份服务器存储服务器
- 简介
- MinIO 基础概念
- 纠删码EC(Erasure Code)
- 下载
- docker安装
- Linux单机安装
- Linux单主机多硬盘模式
- 扩容
- Linux分布式集群部署(多主机、多硬盘模式)
- Windows安装
- Windows下分布式部署、单节点多磁盘、多节点模式
- 单节点多磁盘模拟
- Linux客户端工具mc
- Windows挂载S3服务端为本地盘
- 普罗米修斯prometheus来监控
- 常见的核心监控指标
- 1、对象和存储桶指标(核心指标)
- 2、复制指标(核心指标)
- 3、容量指标(核心指标)
- 4、生命周期管理指标(核心指标)
- 5、节点和驱动器运行状况指标(核心指标)
- 6、通知队列指标
- 7、扫描仪指标
- 8、S3指标
- 9、内部指标
- 10、软件和流程指标
- 如何获取监控指标进行自定义
- 存储空间
- Minio中的存储级别
- 介绍
- 使用
- 启用https访问
- 总结
- 参考
简介
GitHub:https://github.com/minio/
官方文档:https://min.io/docs/minio/linux/index.html
中文文档:https://www.minio.org.cn/docs/minio/linux/index.html
MinIO 的名称来源于 "Minimal Object Storage"(最小化对象存储)的缩写,体现了其设计理念——提供一个简单、高效的对象存储系统。名称中的 "Min" 代表 "Minimal"(最小的),而 "IO" 代表 "Input/Output"(输入/输出)。
MinIO 是一个高性能的对象存储系统,采用 Go 语言编写,设计上与 Amazon S3 兼容,支持 S3 API。MinIO 主要用于存储海量的非结构化数据,比如图片、视频、日志文件和备份等。它可以部署在本地数据中心、公有云或混合云环境中,并且通过 S3 API 实现与现有工具和应用的兼容性。
MinIO 是一种高性能、S3 (Simple Storage Service) 兼容的对象存储。它专为大规模 AI/ML、数据湖和数据库工作负载而构建,并且它是由软件定义的存储。
不需要购买任何专有硬件,就可以在云上和普通硬件上拥有分布式对象存储。
MinIO拥有开源 GNU AGPL v3 和商业企业许可证的双重许可。
MinIO
是一个开源的对象存储服务器,用于存储和管理大规模的非结构化数据,例如图像、视频、日志文件、备份和容器镜像。MinIO
旨在提供高性能、高可用性、可扩展性和易用性的对象存储解决方案,适用于私有云、公共云和混合云环境。
以下是 MinIO
的主要特点和介绍:
- 开源和自由:
MinIO
是一个开源项目,根据Apache License 2.0
许可证发布,这意味着您可以免费使用、修改和分发它。 - 对象存储:
MinIO
是一种对象存储系统,它使用存储桶(buckets
)来组织数据,每个存储桶包含多个对象。对象可以是各种文件、文档、媒体和其他非结构化数据。 - 高性能:
MinIO
具有出色的性能,能够以高速处理大规模数据。它采用了分布式、并行和多线程处理技术,以支持高吞吐量和低延迟。 - 高可用性:
MinIO
具有内置的冗余和故障转移功能,支持数据备份和多副本存储,以确保数据的持久性和高可用性。它还支持数据版本控制。 - 容器化:
MinIO
可以轻松部署在容器化环境中,如Docker
和Kubernetes
。这使得它适用于云原生应用和容器化工作负载。 - 分布式扩展:
MinIO
支持分布式架构,可以轻松扩展以适应不断增长的数据需求。您可以添加更多的MinIO
实例以构建多节点集群。 - S3 兼容:
MinIO
提供了S3(Simple Storage Service) API
兼容性,这意味着它可以与现有的S3
客户端和应用程序集成,无需进行大规模修改。 - 安全性:
MinIO
提供数据加密、身份验证和访问控制功能,以确保数据的保密性和完整性。它还支持SSL/TLS
加密。 - 易用性:
MinIO
的配置和管理非常简单,具有用户友好的命令行界面和Web管理控制台。它还有丰富的文档和活跃的社区支持。
MinIO
是一个功能强大且易于使用的对象存储解决方案,适用于各种应用,从数据备份和存档到大规模媒体存储和分析。它为云原生环境提供了一个强大的存储选项,并且由于其开源性质,广受开发者和组织的欢迎。
优点:
部署简单:一个single二进制文件即是一切,还可支持各种平台。
minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;
兼容Amazon S3接口,充分考虑开发人员的需求和体验;
低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
读写性能优异
MinIO 基础概念
S3
——Simple Storage Service,简单存储服务,这个概念是Amazon在2006年推出的,对象存储就是从那个时候诞生的。S3提供了一个简单Web服务接口,可用于随时在Web上的任何位置存储和检索任何数量的数据。Object
——存储到 Minio 的基本对象,如文件、字节流,Anything...Bucket
——用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。Drive
——部署 Minio 时设置的磁盘,Minio 中所有的对象数据都会存储在 Drive 里。Set
——一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个Set上
一个集群划分为多个Set
一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
一个SET中的Drive尽可能分布在不同的节点上
纠删码EC(Erasure Code)
MinlO使用纠删码机制来保证高可靠性,使用highwayhash来处理数据损坏( Bit Rot Protection)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。
即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。
在standalone模式下,还可以分为non-erasure code mode(无纠删码模式)和erasure code mode(纠删码模式)。
non-erasure code mode
在此启动模式下,对于每一份对象数据, minio直接在data 下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。
erasure code mode
此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server会自动启用erasure code mode.
erasure code对磁盘的个数是有要求的,如不满足要求,实例启动将失败。erasure code启后,要求传给minio server的endpoint(standalone模式下,即本地磁盘上的目录)至少为4个。
下载
http://minio.org.cn/download.shtml#/windows
http://minio.org.cn/download.shtml#/linux
http://minio.org.cn/download.shtml#/docker
docker安装
https://hub.docker.com/r/minio/minio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | docker rm -f minio docker run -itd --name minio -h minio \ -p 8000:9000 -p 8001:9001 \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --restart=always \ --privileged=true minio/minio server \ /data --console-address ":9000" -address ":9001" docker logs -f minio http://192.16.7.162:8000/login |
9000端口指的是minio的WebUI端口,9001是API的端口
MINIO_ACCESS_KEY :账号
MINIO_SECRET_KEY :密码(账号长度必须大于等于5,密码长度必须大于等于8位)
API: http://192.92.0.27:9001 http://127.0.0.1:9001
RootUser: minioadmin
RootPass: minioadminWebUI: http://192.92.0.27:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Linux单机安装
https://dl.min.io/server/minio/release/linux-amd64/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | docker rm -f lhrminio docker run -itd --name lhrminio -h lhrminio \ -p 9000:9000 -p 9001:9001 -p 39389:3389 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --restart=always \ --privileged=true lhrbest/lhrcentos76:9.2 \ /usr/sbin/init docker exec -it lhrminio bash echo 'export LC_TIME=POSIX' >> /etc/profile echo 'export TMOUT=0' >> /etc/profile source /etc/profile echo 'export LANG=en_US.UTF-8' >> /etc/profile ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config setenforce 0 systemctl start firewalld firewall-cmd --add-port=0-65535/tcp --permanent firewall-cmd --add-port=0-65535/udp --permanent firewall-cmd --reload firewall-cmd --list-ports systemctl disable firewalld.service systemctl stop firewalld.service systemctl mask firewalld.service systemctl status firewalld.service wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240826153307.0.0-1.x86_64.rpm rpm -ivh minio-20240826153307.0.0-1.x86_64.rpm mkdir -p /minio/data export MINIO_ROOT_USER=minioadmin export MINIO_ROOT_PASSWORD=minioadmin minio server /minio/data --console-address ":9000" --address ":9001" cat > /etc/default/minio <<"EOF" MINIO_ROOT_USER="minioadmin" MINIO_ROOT_PASSWORD="minioadmin" MINIO_VOLUMES="/minio/data" MINIO_OPTS="--console-address :9000 --address :9001" #MINIO_PROMETHEUS_AUTH_TYPE="public" #MINIO_PROMETHEUS_URL="http://192.168.10.148:9090" #配置prometheus监控的服务器地址 #MINIO_SERVER_URL="http://192.168.192.163:9000" #负载均衡地址,没有负载均衡就不要放开注释 EOF cat > /usr/lib/systemd/system/minio.service <<"EOF" [Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] Type=notify WorkingDirectory=/usr/local User=root Group=root EnvironmentFile=-/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=1048576 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name}) EOF sudo systemctl daemon-reload # 启动失败查看日志:journalctl -u minio.service --no-pager sudo systemctl start minio sudo systemctl enable minio sudo systemctl status minio -- 可以登录 9000端口创建一个 bucket了 ,minioadmin/minioadmin http://192.16.7.162:9000/login |
Linux单主机多硬盘模式
在启动 MinIO 时,若传入参数是多个目录,则会以纠删码的形式运行,即具备高可靠性意义。即在一个服务器(单节点)上对,多个磁盘上运行 MinIO。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | mkfs.xfs /dev/sdb -L DISK1 mkfs.xfs /dev/sdc -L DISK2 mkfs.xfs /dev/sdd -L DISK3 mkfs.xfs /dev/sde -L DISK4 mkfs.xfs /dev/sdf -L DISK5 mkfs.xfs /dev/sdg -L DISK6 mkfs.xfs /dev/sdh -L DISK7 mkfs.xfs /dev/sdi -L DISK8 mkfs.xfs /dev/sdj -L DISK9 mkdir -p /minio/data{1..9} cat >> /etc/fstab <<"EOF" # <file system> <mount point> <type> <options> <dump> <pass> LABEL=DISK1 /minio/data1 xfs defaults,noatime 0 2 LABEL=DISK2 /minio/data2 xfs defaults,noatime 0 2 LABEL=DISK3 /minio/data3 xfs defaults,noatime 0 2 LABEL=DISK4 /minio/data4 xfs defaults,noatime 0 2 LABEL=DISK5 /minio/data5 xfs defaults,noatime 0 2 LABEL=DISK6 /minio/data6 xfs defaults,noatime 0 2 LABEL=DISK7 /minio/data7 xfs defaults,noatime 0 2 LABEL=DISK8 /minio/data8 xfs defaults,noatime 0 2 LABEL=DISK9 /minio/data9 xfs defaults,noatime 0 2 EOF mount /dev/sdb /minio/data1 mount /dev/sdc /minio/data2 mount /dev/sdd /minio/data3 mount /dev/sde /minio/data4 mount /dev/sdf /minio/data5 mount /dev/sdg /minio/data6 mount /dev/sdh /minio/data7 mount /dev/sdi /minio/data8 mount /dev/sdj /minio/data9 wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240826153307.0.0-1.x86_64.rpm rpm -ivh minio-20240826153307.0.0-1.x86_64.rpm -- mkdir -p /minio/data export MINIO_ROOT_USER=minioadmin export MINIO_ROOT_PASSWORD=minioadmin -- minio server /minio/data --console-address ":9000" --address ":9001" cat > /etc/default/minio <<"EOF" MINIO_ROOT_USER="minioadmin" MINIO_ROOT_PASSWORD="minioadmin" MINIO_VOLUMES="/minio/data{1...9}" MINIO_OPTS="--console-address :9000 --address :9001" #MINIO_PROMETHEUS_AUTH_TYPE="public" #MINIO_PROMETHEUS_URL="http://192.168.10.148:9090" #配置prometheus监控的服务器地址 #MINIO_SERVER_URL="http://192.168.192.163:9000" #负载均衡地址,没有负载均衡就不要放开注释 EOF cat > /usr/lib/systemd/system/minio.service <<"EOF" [Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] Type=notify WorkingDirectory=/usr/local User=root Group=root EnvironmentFile=-/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=1048576 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name}) EOF sudo systemctl daemon-reload # 启动失败查看日志:journalctl -u minio.service --no-pager sudo systemctl start minio sudo systemctl enable minio sudo systemctl status minio # 从日志里可以看到访问入口地址,也可以看/var/log/messages -- 可以登录 9000端口创建一个 bucket了 ,minioadmin/minioadmin http://192.16.7.162:9000/login |
file system
Label
就是分区的标签,在最初安装系统是填写的挂载点就是标签的名字。使用设备名(例如:/dev/sdb)和label
及uuid
作为标识的不同。这里使用的是lable
。mount point
挂载目录。type
文件系统类型,包括xfs、ext2、ext3、ext4、reiserfs、nfs、vfat等。options
文件系统的参数,参数如下:Async/sync
:设置是否为同步方式运行,默认为async
auto/noauto
:当执行mount -a
的命令时,此文件系统是否被主动挂载。默认为auto
rw/ro
:是否以以只读或者读写模式挂载exec/noexec
:限制此文件系统内是否能够进行"执行"的操作user/nouser
:是否允许用户使用mount命令挂载suid/nosuid
:是否允许SUID的存在Usrquota
:启动文件系统支持磁盘配额模式Grpquota
:启动文件系统对群组磁盘配额模式的支持Defaults
:同事具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置
dump
是一个用来作为备份的命令参数值解释如下:0
代表不要做dump备份1
代表要每天进行dump的操作2
代表不定日期的进行dump操作
扩容
注意数据的丢失!!!
如果需要加磁盘,必须先把这个这个目录删掉,要不然无法启动,
/data{1..4}/.minio.sys
,报错:ERROR Unable to initialize backend: /data1 drive is already being used in another erasure deployment. (Number of drives specified: 5 but the number of drives found in the 1st drive's format.json: 4)
FATAL Unable to initialize backend: /minio/data1 drive is already being used in another erasure deployment. (Number of drives specified: 9 but the number of drives found in the 1st drive's format.json: 6)
1 | rm -rf /minio/data{1..9}/.minio.sys |
Linux分布式集群部署(多主机、多硬盘模式)
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
数据保护
分布式Minio采用 纠删码来防范多个节点宕机和位衰减bit rot。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
高可用
单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。
一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
Windows安装
http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe
http://dl.minio.org.cn/client/mc/release/windows-amd64/mc.exe
1 2 3 4 5 6 | set MINIO_ROOT_USER=minioadmin set MINIO_ROOT_PASSWORD=minioadmin D:\db\minio\minio.exe server D:\minio\file --console-address ":9000" --address ":9001" |
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。MinIO服务端中并没有自带客户端,所以我们需要安装配置完客户端后才能使用。
- ls 列出文件和文件夹。
- mb 创建一个存储桶或一个文件夹。
- cat 显示文件和对象内容。
- pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
- share 生成用于共享的URL。
- cp 拷贝文件和对象。
- mirror 给存储桶和文件夹做镜像。
- find 基于参数查找文件。
- diff 对两个文件夹或者存储桶比较差异。
- rm 删除文件和对象。
- events 管理对象通知。
- watch 监听文件和对象的事件。
- policy 管理访问策略。
- session 为cp命令管理保存的会话。
- config 管理mc配置文件。
- update 检查软件更新。
- version 输出版本信息。
添加一个云存储服务
添加一个或多个S3兼容的服务,请参考下面说明。mc将所有的配置信息都存储在~/.mc/config.json文件中。
1 2 | mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE] |
别名就是给你的云存储服务起了一个短点的外号。S3 endpoint,access key和secret key是你的云存储服务提供的。API签名是可选参数,默认情况下,它被设置为"S3v4"。
1 2 | mc config host add minio http://127.0.0.1:9090 admin 12345678 --api s3v4 |
其它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 2.查看别名下的bucket D:\minio>mc config host add minio http://127.0.0.1:9090 admin 12345678 --api s3v4 Added `minio` successfully. D:\minio>mc ls minio [2021-08-03 14:56:35 CST] 0B test1\ D:\minio>mc ls minio/test1 D:\minio>mc ls minio/test1 [2021-08-03 15:14:53 CST] 5.5KiB 01-log.png D:\minio> 3.创建bucket D:\minio>mc mb minio/test2 Bucket created successfully `minio/test2`. D:\minio>mc ls minio [2021-08-03 14:56:35 CST] 0B test1\ [2021-08-03 15:18:11 CST] 0B test2\ D:\minio> 4.显示文件和对象内容 D:\minio>mc cat minio/test1/新建文本文档.txt 123132132 lku 5.cp拷贝(上传)文件 D:\minio>mc cp test.txt minio/test1 test.txt: 10 B / 10 B [========================================================================] 143 B/s 0s D:\minio>mc ls minio/test1 [2021-08-03 15:14:53 CST] 5.5KiB 01-log.png [2021-08-03 15:24:02 CST] 10B test.txt [2021-08-03 15:21:03 CST] 22B 新建文本文档.txt 6.查找find D:\minio>mc find minio/test1 --name "*.txt" minio/test1/test.txt minio/test1/新建文本文档.txt |
Windows下分布式部署、单节点多磁盘、多节点模式
参考:https://blog.csdn.net/xixiyuguang/article/details/119456729
单节点多磁盘模拟
1 2 3 4 5 | set MINIO_ROOT_USER=minioadmin set MINIO_ROOT_PASSWORD=minioadmin D:\db\minio\minio.exe server --console-address ":9000" --address ":9001" F:\minio\data1 F:\minio\data2 F:\minio\data3 F:\minio\data4 |