https://hub.docker.com/r/minio/minio
https://docs.min.io/docs/
http://docs.minio.org.cn/docs/
https://github.com/minio/minio/releases
# one
docker run -d --name minio --restart=always -p 9010:9010 -p 9011:9011 --privileged=true --user=root -e TZ='Asia/Shanghai' --ulimit nofile=262144:262144 -e MINIO_ROOT_USER='ihunter' -e MINIO_ROOT_PASSWORD='wdqdmm@0' -e MINIO_ACCESS_KEY='6CFr1WpCd7tI9dfk' -e MINIO_SECRET_KEY='AjsdYLSCmJxSZDlHWEOOQPbwKX8VF1pY' -v /data/site/htmltoo.f/htmltoo.minio:/data minio/minio server /data --console-address ":9010" --address ":9011"
-
http://s.htmltoo.com:9010
S3-url: http://s.htmltoo.com:9011
地区:gz, 强制路径风格,存储桶:joplin
# Multi-Node
docker run -d --name minio1 --restart=always -p 9110:9010 -p 9111:9011 --privileged=true --user=root -e TZ='Asia/Shanghai' --ulimit nofile=262144:262144 --network mgr --ip 172.18.0.11 -e MINIO_ROOT_USER='ihunter' -e MINIO_ROOT_PASSWORD='wdqdmm@0' -e MINIO_ACCESS_KEY='6CFr1WpCd7tI9dfk' -e MINIO_SECRET_KEY='AjsdYLSCmJxSZDlHWEOOQPbwKX8VF1pY' -v /data/site/htmltoo.f/htmltoo.minio1:/data minio/minio server --console-address ":9010" --address ":9011" http://172.18.0.11:9011/data http://172.18.0.12:9011/data
docker run -d --name minio2 --restart=always -p 9120:9010 -p 9121:9011 --privileged=true --user=root -e TZ='Asia/Shanghai' --ulimit nofile=262144:262144 --network mgr --ip 172.18.0.12 -e MINIO_ROOT_USER='ihunter' -e MINIO_ROOT_PASSWORD='wdqdmm@0' -e MINIO_ACCESS_KEY='6CFr1WpCd7tI9dfk' -e MINIO_SECRET_KEY='AjsdYLSCmJxSZDlHWEOOQPbwKX8VF1pY' -v /data/site/htmltoo.f/htmltoo.minio2:/data minio/minio server --console-address ":9010" --address ":9011" http://172.18.0.11:9011/data http://172.18.0.12:9011/data
---node1-web
http://g.htmltoo.com:9110
-S3-url
http://g.htmltoo.com:9111
---node2-web
http://g.htmltoo.com:9120
-S3-url
http://g.htmltoo.com:9112
-cdn-web
http://s3web.htmltoo.com
-S3, Endpoint
https://s3.htmltoo.com
# 挂载minio到本地
https://abc.htmltoo.com/thread-46544.htm
# backup-to-s3 备份到s3
https://abc.htmltoo.com/thread-46570.htm
# hadoop,spark如何集成Mino
https://abc.htmltoo.com/thread-46618.htm
# minio集成
https://abc.htmltoo.com/search-minio-1.htm
# spark负责数据的计算
https://abc.htmltoo.com/search-spark-1.htm
docker exec -it minio /bin/bash
docker commit -m="update" -a="htmltoo.com" minio hub.htmltoo.com:5000/http:minio
docker push hub.htmltoo.com:5000/http:minio
# 设置
-Access Policy,也就是访问策略,
Private修改成Public
-优化下Minio文件系统多节点之间的同步性能,
Settings->Scanner:
Delay multiplier:10
Max Wait:1s
Cycle:1s
-Anonymous, Prefix -> Access
* -> ReadWrite
-replication,
Target URL: 127.0.0.1:9011
Use TLS: no
Access Key: ihunter
Secret Key: 0
Target Bucket: htmltoo.bak
-Health Check Duration: 60
运行状况检查持续时间:
12小时: 43200 1天: 86400 2天: 172800 3天: 259200
---Create Service Account
backup
backupSecretKey
-nginx
vi /etc/nginx/conf.d/minio.conf
upstream minio {
least_conn;
server 172.18.0.11:9011 max_fails=5 fail_timeout=5s;
server 172.18.0.12:9011 max_fails=5 fail_timeout=5s;
}
upstream minioweb {
least_conn;
server 172.18.0.11:9010 max_fails=5 fail_timeout=5s;
server 172.18.0.12:9010 max_fails=5 fail_timeout=5s;
}
server {
listen 80;
listen 443 ssl http2;
server_name s3.htmltoo.com;
charset utf-8;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
#access_log /data/file/logs/nginx/nginx_note.htmltoo.log main;
error_log /data/file/logs/nginx/error_s3.htmltoo.log warn;
location / {
proxy_pass http://minio;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 0;
#添加了websocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
#HTTP_TO_HTTPS_END
ssl_certificate /etc/nginx/conf.d/cert/s3.htmltoo.com/fullchain.pem;
ssl_certificate_key /etc/nginx/conf.d/cert/s3.htmltoo.com/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#waf
#include /etc/nginx/conf.d/waf.ini;
#pagespeed-START
include /etc/nginx/conf.d/pagespeed.ini;
#pagespeed-_END
#关闭favicon.ico日志
location = /favicon.ico {
log_not_found off;
access_log off;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
access_log /dev/null;
error_log /dev/null crit;
}
server {
listen 80;
server_name s3web.htmltoo.com;
charset utf-8;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
#access_log /data/file/logs/nginx/nginx_note.htmltoo.log main;
error_log /data/file/logs/nginx/error_s3.htmltoo.log warn;
location / {
proxy_pass http://minioweb;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires 0;
#添加了websocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#关闭favicon.ico日志
location = /favicon.ico {
log_not_found off;
access_log off;
}
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
access_log /dev/null;
error_log /dev/null crit;
}
docker stop minio1 minio2
docker rm minio1 minio2
-做负载均衡进入管理界面查看桶一直显示loading
#添加了websocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
-默认的根凭据
minioadmin:minioadmin
-
v /data/db/minio:/data
-存储桶访问策略, 永久的访问路径
访问前缀需要设置为*.*,否则会无法访问
-
-设置匿名可访问
在 minio 的可视化界面就可以设置,添加一个 Bucket Policy 即可。
Read Only 对应 mc policy 的 download;
Write Only 对应 mc policy 的 upload;
Read and Write 对应 mc policy 的 public;
无策略 对应 mc policy 的 none。
添加 Read Only 或 Read and Write 就可以实现永久链接(注意安全问题)。
# MinIO 客户端 ( mc), minio设置永久访问链接
https://dl.min.io/client/mc/release/
-通过minio分享的链接只能支持7天。
-解决方案是设置对应的bucket 可通过路径直接访问。(必须通过minio client才能设置下载策略)
-下载minio client
cd /data/site/htmltoo.f/htmltoo.minio1
cd /data/site/htmltoo.f/htmltoo.minio2
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod a+x mc
-添加MinIO存储服务
MinIO服务器显示URL,访问权和秘密密钥。
-1
./mc config host add minio http://172.18.0.11:9011 ihunter wdqdmm@0
./mc config host add minio http://172.18.0.12:9011 ihunter wdqdmm@0
-2
./mc config host add minio http://g.htmltoo.com:19010 ihunter wdqdmm@0
-密文输入(推荐)
./mc config host add minio http://g.htmltoo.com:19010
Enter Access Key: ihunter
Enter Secret Key: wdqdmm@0
-获取已配置别名“ minio”的MinIO服务器信息
./mc admin info minio
-设置需要开放下载的bucket, 注意需要带minio
./mc anonymous set download htmltoo
http://g.htmltoo.com:19010/htmltoo/test.png
http://g.htmltoo.com:9110/htmltoo/test.png //浏览器访问, 注意不需要带minio
http://g.htmltoo.com:9120/htmltoo/test.png //浏览器访问, 注意不需要带minio
-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尽可能分布在不同的节点上
---特点
-数据保护
分布式Minio采用 erasure code(纠删码)来防范多个节点宕机和位衰减bit rot。
分布式Minio至少需要4个节点,使用分布式Minio自动引入了纠删码功能。
-高可用
单机Minio服务存在单点故障,相反,如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你需要至少有N/2+1个节点 Quorum 来创建新的对象。
例如,一个8节点的Minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据。
-限制
分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了Minio的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用2个节点,每个节点4块盘,也可以使用4个节点,每个节点两块盘,诸如此类。
-一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
---MinIO的用途
MinIO的用途非常广泛,以下是一些常见的应用场景:
1. 云原生应用程序的存储
MinIO可以作为云原生应用程序的对象存储后端。它可以与Kubernetes集成,作为存储卷使用,提供持久性存储和数据共享。
2. 大规模数据分析
MinIO可以用于存储和分析大规模的数据集。它可以与流行的大数据处理框架(如Apache Spark和Apache Hadoop)集成,提供高性能的数据访问和处理能力。
3. 备份和灾难恢复
MinIO可以用作备份和灾难恢复解决方案。它支持数据冗余和高可用性,可以在多个地理位置复制数据,以确保数据的安全性和可靠性。
4. 多媒体存储和分发
MinIO可以用于存储和分发多媒体内容,如图片、视频和音频文件。它可以与内容分发网络(CDN)集成,提供快速的内容传输和缓存功能。
5. IoT数据存储和分析
MinIO可以用于存储和分析大规模的物联网(IoT)数据。它可以处理来自传感器和设备的实时数据,并提供高性能的数据存储和查询功能。
-具体实例和经典案例
实例1:云原生应用程序的存储
假设我们正在开发一个基于微服务架构的电子商务平台。我们需要一个可靠的对象存储系统来存储和管理商品图片、用户上传的文件以及其他非结构化数据。在这种情况下,MinIO可以作为我们的存储后端。它可以与Kubernetes集成,以容器的形式部署,并提供持久性存储和数据共享功能。这样,我们的应用程序可以通过MinIO API来上传和下载文件,而无需关心底层存储的细节。
实例2:大规模数据分析
假设我们是一家电信公司,拥有大量的用户数据。我们希望对这些数据进行分析,以了解用户行为和趋势。在这种情况下,MinIO可以作为我们的数据存储和处理平台。我们可以将用户数据存储在MinIO集群中,并使用Apache Spark来进行数据分析和处理。MinIO的高性能和可扩展性可以确保我们能够快速而有效地处理大规模的数据集。
经典案例:Zillow的数据湖
Zillow是美国最大的在线房地产市场之一,他们面临着处理海量房地产数据的挑战。为了解决这个问题,Zillow选择了MinIO作为他们的数据湖解决方案。他们使用MinIO来存储和管理房地产数据,包括房屋图片、销售记录和地理空间数据。MinIO的高性能和可扩展性使得Zillow能够快速地访问和分析这些数据,从而提供更好的房地产服务和洞察力。
结论
MinIO是一个强大而灵活的开源对象存储系统,可以应用于多个领域和场景。它的高性能、可扩展性和与S3兼容的API使得它成为云原生环境中的理想选择。无论是作为云原生应用程序的存储后端,还是用于大规模数据分析和备份,MinIO都可以帮助我们存储和管理大规模的非结构化数据。通过具体实例和经典案例的介绍,我们可以看到MinIO在实际应用中的价值和优势。