xSky 实验室关注高性能计算,分布式系统/存储,大数据/机器学习/WebRTC
目录
  • 首页
  • 技术相关
  • 原创作品
  • 人工智能/机器学习
  • 系统与架构
  • 数据库/数据分析
  • 分布式系统/存储
  • 服务端开发
  • WEBRTC研究
  • 开发调试
  • 网络与安全
  • 常用工具
  • 杂七杂八

MinIO 快速入门

2022-09-21 10:12:50

什么是 MinIO?

Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。

1)MinIO 的应用场景

如下图,MinIO 的应用场景除了可以作为私有云的对象存储服务来使用,也可以作为云对象存储的网关层,无缝对接 Amazon S3 或者 MicroSoft Azure 。

 

 

2)特点

  • 高性能:
    作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到 55Gb/s 和 35Gb/s。并而 MinIO 支持一个对象文件可以是任意大小,从几kb到最大5T不等。

  • 可扩展:
    不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心。

  • 云原生:
    容器化、基于K8S的编排、多租户支持。

  • Amazon S3兼容:
    使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问Minio服务器。

  • 可对接多种后端存储:
    除了Minio自己的文件系统,还支持 DAS、 JBODs、NAS、Google云存储和 Azure Blob存储。

 

部署与使用

minio分服务端minio 和客户端工具mc 两个

wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data

 客户端也是一个命令行工具,mc

wget https://dl.min.io/client/mc/release/linux-amd64/mc
mv mc /usr/local/bin/

docker安装

docker run \
  -p 9000:9000 \
  -p 9001:9001 \
  minio/minio server /data --console-address ":9001"


docker run -p 9000:9000 --name minio1 \
  -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  -v /mnt/data:/data \
  -v /mnt/config:/root/.minio \
  minio/minio server /data

 这里的9000端口是api调用的,
9001是web ui的页面,直接访问http://ip:9001 然后输入默认账密: minioadmin/minioadmin 登陆

 

 minio服务配置

MinIOserver在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json文件中

可以使用--config-dir命令行选项重写

minio server --config-dir /etc/minio /data

 证书目录默认在${HOME}/.minio/certs目录下,如果需要TLS,需要将证书放在该目录来启用https

 

 MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务

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

启用shell自动补全

下载官方提供的自动补全配置,使用时 按TAB键补全

sudo wget https://raw.githubusercontent.com/minio/mc/master/autocomplete/bash_autocomplete -O /etc/bash_completion.d/mc
source /etc/bash_completion.d/mc

 MinIO Client(mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案

 在没有配置minio服务端时,执行以下命令就像执行系统命令,操作的也是系统上的文件,而不是minio

ls       列出文件和文件夹。
mb       创建一个存储桶或一个文件夹。
cat      显示文件和对象内容。
pipe     将一个STDIN重定向到一个对象或者文件或者STDOUT。
share    生成用于共享的URL。
cp       拷贝文件和对象。
mirror   给存储桶和文件夹做镜像。
find     基于参数查找文件。
diff     对两个文件夹或者存储桶比较差异。
rm       删除文件和对象。
events   管理对象通知。
watch    监听文件和对象的事件。
policy   管理访问策略。
session  为cp命令管理保存的会话。
config   管理mc配置文件。
update   检查软件更新。
version  输出版本信息。

 

配置服务器地址 mc alias set myminio http://10.10.1.32:9000 minioadmin minioadmin
 创建一个bucket    mc mb myminio/test2
上传文件                 mc cp /var/log/messages myminio/test2
列出目录文件     mc ls myminio/test2
查看文件内容    mc cat myminio/test2/messages
删除文件或对象    mc rm myminio/test2/messages

 

 

事件通知

如果bucket发生了上传对象或删除对象等,通过存储桶事件通知机制进行监控,并支持mq,sql,webhooks等发送出去,或存储起来

webhooks发布minio事件 

webhooks是采用推送的方式,将数据发送给定义好的api

配置webhook

localhost:3000是自已编写的api接口

"webhook": {
  "1": {
    "enable": true,
    "endpoint": "http://localhost:3000/"
}

 

启用bucket通知

新增一个名称为images 的bucket,并开启事件通知

#创建bucket
mc mb myminio/images
#创建bucket
mc mb myminio/images-thumbnail

#开启事件通知 ARN是arn:minio:sqs:us-east-1:1:webhook
mc event add myminio/images arn:minio:sqs:us-east-1:1:webhook --events put --suffix .jpg

 

查看事件通知列表
 mc event list myminio/images

 

当有上传和删除等操作时,通过自已的3000端口api,可以收到相应通知信息

arn:minio:sqs:us-east-1:1:webhook s3:ObjectCreated:* Filter: suffix=".jpg"
 

监控

以下接口需要通知9000端口访问

minio默认提供了2个接口路径做健康检查

  • 活力探针 /minio/health/live 活动性探针-服务器是否工作正常
  • 就绪探针 /minio/health/ready 就绪性探针-指示服务器是否由于重负载而未接受连接

集成到prometheus

默认也是公开接口并提供了相关监控数据,给到prometheus抓取指标

  • Prometheus 数据可在 /minio/prometheus/metrics

配置prometheus监控minio

scrape_configs:
- job_name: minio-job
  metrics_path: /minio/prometheus/metrics
  scheme: http
  static_configs:
  - targets: ['localhost:9000']
复制代码

具体指标含义请参考:如何使用Prometheus监控MinIO服务器

 

示例-文件上传

本示例连接到一个对象存储服务,创建一个存储桶并上传一个文件到存储桶中。

我们在本示例中使用运行在 https://play.min.io 上的MinIO服务,你可以用这个服务来开发和测试。示例中的访问凭据是公开的。

FileUploader.go

package main

import (
    "github.com/minio/minio-go/v6"
    "log"
)

func main() {
    endpoint := "play.min.io"
    accessKeyID := "Q3AM3UQ867SPQQA43P2F"
    secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
    useSSL := true

    // 初使化minio client对象。
    minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
    if err != nil {
        log.Fatalln(err)
    }

    // 创建一个叫mymusic的存储桶。
    bucketName := "mymusic"
    location := "us-east-1"

    err = minioClient.MakeBucket(bucketName, location)
    if err != nil {
        // 检查存储桶是否已经存在。
        exists, err := minioClient.BucketExists(bucketName)
        if err == nil && exists {
            log.Printf("We already own %s\n", bucketName)
        } else {
            log.Fatalln(err)
        }
    }
    log.Printf("Successfully created %s\n", bucketName)

    // 上传一个zip文件。
    objectName := "golden-oldies.zip"
    filePath := "/tmp/golden-oldies.zip"
    contentType := "application/zip"

    // 使用FPutObject上传一个zip文件。
    n, err := minioClient.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType:contentType})
    if err != nil {
        log.Fatalln(err)
    }

    log.Printf("Successfully uploaded %s of size %d\n", objectName, n)
}
 
 

2.3上传文件到桶的子文件夹下
子文件夹的创建是在文件名前使用,而不是作为桶的后缀
minioClient.putObject("asiatrip","ppp/minio.png", "C:\\Users\\Administrator\\Desktop\\minio.png");

2.4 文件链接获取
getObjectURL()获取桶内文件的url地址,如果设置了只写权限,用户直接访问地址是查看不了的
getObgect()可以获取桶内对应文件的流对象,进行文件流传输
presignedGetObject()返回的是进行加密算法的地址,通过它可以直接访问文件

设置有效期的分享链接(共享文件时间最大7天)
minioClient.getPresignedObjectUrl(Method.GET,"asiatrip","minio.png",10,null)有效期10秒,可以通过get方式访问

3.操作对象
使用的类都是MinioClient对象

3.1 对存储桶操作方法
makeBucket 创建桶
listBuckets 列出当前所有桶
bucketExists 判断桶是否存在
removeBucket 移除桶
listObjects 获取桶内的内容
listIncompleteUploads 获取上传中断的内容,支持断点续传
3.2 对文件操作方法
getObject 下载文件
putObject 上传文件
copyObject 复制文件
statObject 查看文件状态
removeObject 删除文件
removeIncompleteUpload 删除上传中断的文件
3.3 Presigned操作
签名加密操作

presignedGetObject 用于获取桶内文件的get下载链接
presignedPutObject 用于获取桶内文件的上传链接
presignedPostPolicy 用于设置返回和访问链接的编解码算法
3.4 对存储桶策略操作
存储桶的策略主要是设置读写权限,当访问文件地址时会对策略进行判断是否开放相应的功能

getBucketPolicy 获取策略信息
setBucketPolicy 设置策略信息

 
 
 

http://docs.minio.org.cn/minio/baremetal/

http://docs.minio.org.cn/docs/

MinIO 教程

 

 

 

 

 

 

 

 

 

By:xSky | 技术相关 |

  • 分类目录

    • 技术相关 (23)
    • 原创作品 (14)
    • 人工智能/机器学习 (7)
    • 系统与架构 (9)
    • 数据库/数据分析 (11)
    • 分布式系统/存储 (4)
    • 服务端开发 (7)
    • WEBRTC研究 (7)
    • 开发调试 (7)
    • 网络与安全 (9)
    • 常用工具 (9)
    • 杂七杂八 (5)
  • 最新文章

    • Visual ChatGPT 系统搭建指南
    • stanford_alpaca - ChatGPT 学术版开源实现
    • Linux bash终端设置代理(proxy)访问
    • centos 下 yum安装python3
    • 使用SQL查询Milvus 向量数据库
    • Milvus v2.2.1 开源向量搜索引擎使用教程
    • 爱宝宝-小兔兔
    • 部署了一个SRS的demo
    • Dockerfile 详解
    • Docker常用命令
    • Tus文件上传协议
    • 编译运行Milvus
    • MinIO 快速入门
    • ESP32
    • Prometheus监控报警系统搭建
    • go语言JSON字典模拟
    • go语言的sql解析器
    • Grafana配置数据源,自定义查询语法
    • TDengine + Telegraf + Grafana
    • gRPC-Gateway 返回JSON数据int64类型被转为string类型问题
    • LLAMA模型试玩
    • 语音识别的一些开源项目整理
    • 移动网络弱网处理研究
    • 翻译:使用 Semgrep 进行热点代码评审
    • 共享内存并发路线图
    • 优化 QUIC 的 ACK 机制
    • QUIC 上的 RTP
    • [译] [论文] BBR:基于拥塞(而非丢包)的拥塞控制(ACM, 2017)
    • BBR拥塞控制算法
    • congestion_controller、 remote bitrate estimator、pacing模块浅析
  • 链接

    • xSky的Blog
    • 我的Github
    • 实时监控图表
    • 预印本
    • xRedis 在线文档
    • xSkyProxy
    • xChart 数据在线测试
    • 我的电子书
    • xChart 数据可视化系统
    • 树莓派技术圈
    • WebRTC开发者社区
  • 开源项目

    • xReis C++的redis客户端库
    • xBlog-C++ 博客程序
    • xSkyProxy-新型MySQL代理网关
    • 数据可视化平台- xChart
    • xhttpcache 高速数据缓存服务
    • xMonitor-图形监测工具
    • test

Powered By xBlog

Copyright 2010~2022 0xsky.com All Rights Reserved.