• 高性能 在标准硬件上,读/写速度上高达183GB/秒和171GB/秒
  • 可扩展性 利用了web缩放器知识,简单的通过添加机器就可扩展集群
  • 云原生 支持k8s,微服务和多租户的容器技术
  • S3兼容 采用了S3兼容协议(阿里云oss等也支持该协议)
  • 简单 安装使用都非常简单,一个命令启动
  • 以下夸张的描述来自官网,非笔者瞎编

    全世界增长最快的对象存储系统

    MinIO生产部署涵盖了全球。 作为全球使用最多和下载量最大的对象存储服务系统, 它的影响力在与日俱增 - 由非凡的贡献者和传播者社区提供支持。

    得益于go语言跨平台交叉编译功能,只需将包打成 对应系统架构,无需在服务器安装环境,既可一键运行启动

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

    服务端安装

    在linux上安装

    类似于一个命令行工个,指定存储目录/data 直接就启动了

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

    docker安装 比较推荐这种方式,方便维护

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

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

    默认我们安装的都是社区版,它的Dashborad是个简单页面

    安户端安装

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

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

    ---该章内容来源于官网文档

    minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。丢失一半数量(N/2)的硬盘,依然可以恢复数据

    什么是纠删码erasure code?

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

    启动minio 指定4个盘,拿到2个盘,检查minio是否可以正常读写

    minio server /data1 /data2 /data3 /data4 
    

    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管理操作
    

    使用之前请设置好服务器地址,请见客户端mc使用-使用示例-配置服务器地址

    #查看myminio bucket信息
    mc admin info myminio
    #查看myminio bucket用户信息
    mc admin user  list myminio
    
  • 最大最小没有限制
  • 读写仲裁 读可以失去一半硬盘数(N/2),写必须是一半+1(N/2+1)
  • web浏览上传最大5G API相关:
  • 没有桶数限制,没有对象数限制
  • 单个最大对象为5,PUT操作最大对象为5G
  • 每次上传的Part数最大为1000
  • Part大小从5M到5G
  • 查看列表,返回值对象和Part最大数量均为1000
  • minio默认支持tls安全访问,需要将私钥和公钥放到指定目录

    公私钥必须命名为private.key和public.crt,然后放到minio同级另目录下的config(需要创建)

    Minio在Linux只支持使用PEM格式的key/certificate

    如果想使用Let's Encrypt请进入官网: docs.minio.org.cn/docs/master…

    不过推荐使用openssl生成,比较简单:

    #生成私钥
    openssl genrsa -out private.key 2048
    #生成公钥
    openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj "/C=CH/ST=state/L=location/O=organization/CN=domain"
    

    客户端mc使用

    一些操作,minio ui上功能基本上都有,可以直接在页面点击按钮进行操作,但是客户端mc,也需要熟悉是不

    启用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
    

    像级了在linux操作一样,确实是UNIX命令一种替代方案

    如果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
    #开启事件通知 ARNarn: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"
    

    ARN不作过多讨论,详情请看: docs.aws.amazon.com/general/lat…

    Thumnailer接收事件

    如果自已不想编写接口来接收事件,可以使用第三方项目: Thumnailer

    使用Thumbnailer监听MinIO通知。如果有文件上传到MinIO服务,Thumnailer监听到该通知,生成一个缩略图并上传到MinIO服务

    git clone https://github.com/minio/thumbnailer/ #安装依懒模块 npm install #配置minio server信息,地址账密,和bucket桶(images-thumbnail) cd thumbnailer vim config/webhook.json NODE_ENV=webhook node thumbnail-webhook.js

    启动后的Thumnailer临听在 http://localhost:3000 和上面对应上了-_-

    测试事件通知

    #上传一张图片,普通文件也行
    mc cp images.jpg myminio/images
    #查看是否缩略图,有表示事件通知接收到了
    mc ls myminio/images-thumbnail
    

    在consule ui页面上创建账号,权限分为只读,只写,读写,排查,以及UI管理员

    如果创建bucket没有设置权限的话,默认允许所有权限。当用户有对应的权限,就可以直接该问bucket

    详细例子请参考官网: docs.minio.org.cn/docs/master…

    以下接口需要通知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']
    

    具体指标含义请参考:docs.minio.org.cn/docs/master…

    分类:
    后端
    标签: