草庐IT

MinIO 介绍使用

LWQBLOG 2023-03-28 原文

MinIO 介绍

MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。

MinIO 英文官网  MinIO 中文官网 注意:中文官方更新不及时,会有很多坑,请以英文官网为准。

 基础概念

1、Object:存储到minio的基本对象,如文件,字节流,Anything。。。。

2、Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。

3、Drlve:存储数据的磁盘,在MinIO启动时,以参数的方式传入。MinIO中所有的对象数据都会存在Drive里。

4、Set:即一组 Drive的集合,分布式部署根据集群规模自动划分一个或者多个Set,每个Set中的Drive 分布在不同位置。一个对象存储在一个Set上。

4.1、一个对象存储在一个Set上。

4.2、一个集群划分为多个Set。

4.3、一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。

4.4、一个Set中的drive 尽可能分布在不同的节点上。

5、纠删码:Minio 使用纠删码机制来保证高可靠性。

5.1、使用highwayhash来处理数据损坏(Bit Rot Protectio)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原。

5.2、纠删码是恢复丢失和算怀数据的数学算法,minio采用reed-solomincode将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据快、6个奇偶校验块,你可以丢失任意6块盘(不管其存放的是数据块还是奇偶校验块),你任可以从剩下的盘中的数据进行恢复。

5.2、纠删码模式,把数据分成 DATA BLOCk:数据块、 PARITY BLOCK:校验块。一个BLOCK 10M左右,如果一个文件小于10M,就以文件大小进行分块。如果一个文件大于10m,就以10M为一个文件单位进行分块。

应用场景

1、互联网非结构化数据的存储需求

1.1 、电商网站:海量商品图片

2.1、视频网站:海量视频文件

3.1、网盘:海量文件

 

MinIO优势

1、数据保护

1.1、分布式MInio采用纠删码来放反多个节点待机和位衰减 bit rot

1.2、分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

2、高可用

2.1、单机Minio服务存在单点故障,相反,如果是有一个N快硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。

2.2、例如,一个16节点的Minio集群,每个节点16块块硬盘,计算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写入数据。

3、一致性

3.1、Minio在分布式和单机模式下,所有读写炒作都严格遵守read-after-write 一致性模型

 

MinIO 使用

使用【服务端】

单机模式 (linux部署)

ps:初始用户名密码:minioadmin

1、下载linux minio,  wget https://dl.min.io/server/minio/release/linux-amd64/minio

2、linux部署

修改用户名密码:
export MINIO_ROOT_USER=username
export MINIO_ROOT_PASSWORD=password

启动:
./minio server --console-address ":9090" /mnt/data

后台启动,指定日志路径:
nohup ./minio server --console-address :"9090" ./miniodata/data >./miniodata/minio.log 2>&1 &

ps:接口默认地址:9000
指定console端口:9090

3、docker部署

docker run \
  -p 9000:9000 \
  -p 9001:9001 \
  -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  quay.io/minio/minio server /data --console-address ":9001"

4、docker部署纠删码模式

docker run -d -p 9000:9000 -p 9090:9090 --name minio \
 -v /mnt/data1:/data1 \
 -v /mnt/data2:/data2 \
 -v /mnt/data3:/data3 \
 -v /mnt/data4:/data4 \
 -v /mnt/data5:/data5 \
 -v /mnt/data6:/data6 \
 -v /mnt/data7:/data7 \
 -v /mnt/data8:/data8 \
minio/minio server /data{1...8} --console-address ":9090"

    5、缺点:单点故障,直接宕机

 分布式部署

    注意事项:

1、linux部署:启动一个分布式Minio实例,你只需要把硬盘位置作为参数传给minio server命令即可,然后,你需要在所有其他节点运行同样的命令。

2、分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立连接。为了实现这个,你需要在执行minioserver命令前,先将access秘钥和secret秘钥expoert成环境变量。新版本使用MINIO_ROOT_USER&MINIO_ROOTPASSWORD。

3、【举例1】8个节点,每个节点1块盘。启动分布式Minio实例,8个节点,每节点1块盘,需要再8个节点上都运行下面的命令:

export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456

举例1.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。

minio server http://192.168.1.11/export1 \
http://192.168.1.12/export2 \
http://192.168.1.13/export3 \
http://192.168.1.14/export4 \
http://192.168.1.15/export5 \
http://192.168.1.16/export6 \
http://192.168.1.17/export7 \
http://192.168.1.18/export8 \

    【举例2】4个节点,每个节点2块盘。启动分布式Minio实例,4个节点,每节点2块盘,需要再4个节点上都运行下面的命令:

    

export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456

举例2.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。

http://192.168.1.11/export1 \
http://192.168.1.11/export2 \
http://192.168.1.12/export1 \
http://192.168.1.12/export2 \
http://192.168.1.13/export1 \
http://192.168.1.13/export2 \
http://192.168.1.14/export1 \
http://192.168.1.14/export2 \

 

 5、统一入口:使用Nginx 统一入口,可以做ip hash策略分散服务器压力。

【例如 :】

upstream minio {
    server 192.168.1.11:9001;
    server 192.168.1.12:9001;
    server 192.168.1.13:9001;
    server 192.168.1.14:9001;
}

upstream console {
    ip_hash;
    server 192.168.1.11:5001;
    server 192.168.1.12:5002;
    server 192.168.1.13:5003;
    server 192.168.1.14:5004;
}

server {
    listen      9000;
    listen [::] 9000;
    server_name localhost;
    
    localhost / {
    
        proxy_pass http://minio;
    }
}
server {
    listen      5000;
    listen [::] 5000;
    server_name localhost;
    
    localhost / {
    
    proxy_pass http://console;
    }
}

6、docker-compose部署,能力有限,留个入口。。

使用【客户端】

介绍:MinIO Clinet(mc) 为ls,cat,cp,mirror,diff,find 等UNIX命令提供一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。

Windows 部署

ps:注意9001 是接口端口,不是console端口。

1、下载 

wget https://dl.min.io/client/mc/release/linux-amd64/mc 

2、赋予权限

chmod +x mc
./mc --help

3、查询mc host配置

mc config host ls

  4、 添加minio服务

mc config host add minio-server http://81.70.144.153:9001/
minioadmin minioadmin

 

  5、 mc命令【管理文件】

# 加入配置文件:
mc config host add minio01 http://81.70.144.153:9000 minioadmin minioadmin

# 连接查看minio文件内容:
mc ls tuling minio01

# 下载文件
mc cp minio01/yeb/数据结构算法面试题.txt D:\

# 上传文件
mc cp D:\测试.txt minio01/yeb

# 删除文件
mc rm minio01/yeb/测试.txt

6、mc命令【管理桶(Bucket)】

# 创建bucket
mc mb minio01/yeb1

# 删除bucket(有数据删除失败)
mc rb minio01/yeb1

# bucket不为空,强制删除,慎用
mc rb --force minio01/yeb1

# 查看bucket磁盘使用情况
mc du minio01/yeb

7、mc命令【admin使用】

Minio Client 提供了‘admin’子命令来对minio部署执行管理任务

service 服务器停止并且重启所有Minio服务器
udpate 更新所有MInio服务器
info 显示minio服务器信息
user 管理用户
group 管理小组
policy minio服务器中定义策略管理
cofnig 配置管理minio服务器
heal 修复minio服务器上的磁盘、桶、对象
profile 生成概要文件数据进行调试
top 顶部提供minio统计信息
trace 跟踪显示minio服务器的http跟踪
console 控制台显示minio服务器的控制台日志
prometheus prometheys配置
kms kms管理操作

 

官方 Java demo使用 

 

有关MinIO 介绍使用的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐