MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
中文官方文档:https://docs.min.io/cn/

二进制文件部署

下载二进制文件

Linux 64位 https://dl.min.io/server/minio/release/linux-amd64/minio
下载完后上传至 Linux 服务器或者登录Linux服务器通过 wget 命令下载
wget https://dl.min.io/server/minio/release/linux-amd64/minio

MinIO启动参数

在启动MinIO服务前,我们先来了解一下 MinIO 启动都支持那些参数
语法:
     minio [FLAGS] COMMAND [ARGS...]
COMMANDS:
     server 启动对象存储服务
     gateway 启动对象存储网关
FLAGS:
     --certs-dir value, -S value 证书目录 (默认: “/root/.minio/certs”)
     --quiet 不显示启动信息
     --anonymous 不记录敏感信息
     --json 以json格式输出服务器日志和启动信息
     --help, -h 显示帮助信息
     --version, -v 显示版本信息


我们可以看到有两个启动命令 servergateway,继续看一下这两个命令的用法
语法:
     minio server [FLAGS] DIR1 [DIR2..]
FLAGS:
     --address value 绑定指定的地址和端口,格式:ADDRESS:PORT, ADDRESS 可以是 IP 或 hostname (默认: “:9000”)
     --certs-dir value, -S value
     --quiet
     --anonymous
     --json
     --help, -h

语法:
     minio gateway COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
     nas 网络附属存储 (NAS)
     azure 微软Azure Blob 存储
     s3 亚马逊简易存储服务 (S3)
     hdfs Hadoop分布式文件系统 (HDFS)
     gcs Google 云存储
FLAGS:
     --address value
     --certs-dir value, -S value
     --quiet
     --anonymous
     --json
     --help, -h

常用的环境变量参数:
ACCESS:
     MINIO_ACCESS_KEY: 自定义用户名或访问密钥,长度至少为3个字符
     MINIO_SECRET_KEY: 自定义密码或密钥,长度至少为8个字符
BROWSER:
     MINIO_BROWSER: 禁用浏览器访问,设置值为 “off”
CACHE:
     MINIO_CACHE_DRIVES: 挂载的驱动器或目录列表,以 “;” 分割
     MINIO_CACHE_EXCLUDE: 不启用缓存的模板列表,以 “;” 分割
     MINIO_CACHE_EXPIRY: 缓存过期时间(天)
     MINIO_CACHE_QUOTA: 最大允许的缓存驱动器使用百分比(0-100)
     MINIO_CACHE_AFTER:缓存对象之前的最小可访问次数
     MINIO_CACHE_COMMENT:为这个设置添加一个可选的注释
DOMAIN:
     MINIO_DOMAIN: 要启用虚拟主机风格的请求,将此值设置为Minio主机域名。MinIO支持格式为
                                    http://mydomain.com/bucket/object 的路径类型请求。MINIO_DOMAIN 环境变量被用来
                                    启用虚拟主机类型请求。 如果请求的Host头信息匹配 (.+).mydomain.com,则匹配的
                                    模式 $1 被用作 bucket, 并且路径被用作object
WORM:
     MINIO_WORM: 要在服务器上打开Write-Once-Read-Many,将这个值设置为 “on”
BUCKET-DNS:
     MINIO_DOMAIN: 如果需要开启存储桶DNS请求,请设置为“Minio主机域名”
     MINIO_PUBLIC_IPS: 要启用存储桶DNS请求,将此值设置为Minio主机公共IP列表,以 “,” 分隔
     MINIO_ETCD_ENDPOINTS: 要启用存储桶DNS请求,将此值设置为etcd端点列表,以 “,” 分隔的
KMS:
     MINIO_SSE_VAULT_ENDPOINT: 要将Vault启用为KMS,请将此值设置为Vault endpoint
     MINIO_SSE_VAULT_APPROLE_ID: 要将Vault启用为KMS,请将此值设置为Vault AppRole ID。
     MINIO_SSE_VAULT_APPROLE_SECRET: 要将Vault启用为KMS,请将此值设置为Vault AppRole Secret ID
     MINIO_SSE_VAULT_KEY_NAME: 要将Vault启用为KMS,请将此值设置为Vault加密密钥环名称。
REGION:
     MINIO_REGION_NAME:服务器的物理位置名字
     MINIO_REGION_COMMENT:为这个设置添加一个可选的注释
STORAGE_CLASS:
     MINIO_STORAGE_CLASS_STANDARD:设置默认标准存储类型的奇偶校验计数,例如"EC:4"
     MINIO_STORAGE_CLASS_RRS:设置默认低冗余存储类型的奇偶校验计数,例如"EC:2"
     MINIO_STORAGE_CLASS_COMMENT:为这个设置添加一个可选的注释

示例:

  1. 以 “/home/shared” 为存储目录启动 minio服务
    $ minio server /home/shared
  2. 启动 minio 服务并绑定指定地址和端口, ADDRESS:PORT
    $ minio server --address 192.168.1.101:9000 /home/shared
  3. 启动 minio 服务并启用虚拟主机风格的请求
    $ export MINIO_DOMAIN=mydomain.com
    $ minio server --address mydomain.com:9000 /mnt/export
  4. 单节点64个盘,以纠删码模式启动 minio 服务
    $ minio server /mnt/export{1…64}
  5. 32节点,每个节点32个盘,以分布式模式启动 minio 服务。在所有32个节点依次执行以下命令
    $ export MINIO_ACCESS_KEY=minio
    $ export MINIO_SECRET_KEY=miniostorage
    $ minio server http://node{1…32}.example.com/mnt/export/{1…32}
  6. 启动 minio 服务器并启用边缘缓存
    $ export MINIO_CACHE_DRIVES="/mnt/drive1;/mnt/drive2;/mnt/drive3;/mnt/drive4"
    $ export MINIO_CACHE_EXCLUDE=“bucket1/;.png”
    $ export MINIO_CACHE_EXPIRY=40
    $ export MINIO_CACHE_MAXUSE=80
    $ minio server /home/shared
  7. 启动minio服务器并启用KMS
    $ export MINIO_SSE_VAULT_APPROLE_ID=9b56cc08-8258-45d5-24a3-679876769126
    $ export MINIO_SSE_VAULT_APPROLE_SECRET=4e30c52f-13e4-a6f5-0763-d50e8cb4321f
    $ export MINIO_SSE_VAULT_ENDPOINT=https://vault-endpoint-ip:8200
    $ export MINIO_SSE_VAULT_KEY_NAME=my-minio-key
    $ minio server /home/shared

severgateway 启动有何区别呢?
server:适用于有自己的服务和硬盘等存储硬件设备的情况,不依赖于第三方服务
gateway:以网关的模式启动,网关一般充当的是请求转发的角色,也可以理解为代理。所以在该模式下,可以使用第三方提供存储服务,像:NAS,azure,s3等

单节点单磁盘运行MinIO

赋予 minio 可执行权限
chmod +x minio
启动服务
./minio server /data
后台进程启动
nohup ./minio server /data > /usr/local/minio/minio.log 2>&1 &
启动后浏览器输入: 服务器IP:9000,看到如下界面,启动成功
默认 Access Key 和 Secret Key 都是 minioadmin

如何指定 Access Key 和 Secret Key?MinIO启动时,会从环境变量中读取 MINIO_ACCESS_KEYMINIO_SECRET_KEY,所以我们需要在启动服务前,设置这两个环境变量即可
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

以纠删码模式运行Minio

MinIO会把你提供的所有驱动器,按照4到16个一组划分为多个纠删码集合,因此,你提供的驱动器数量必须是以上这些数字(4到16)的倍数
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
./minio server /data1 /data2 /data3 /data4
后台进程启动
nohup ./minio server /data1 /data2 /data3 /data4 > /usr/local/minio/minio.log 2>&1 &

多节点分布式运行Minio

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。首先需要关注一下几个注意点

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,建议在执行minio server命令之前,在所有节点上先将access秘钥和secret秘钥export成环境变量MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD。
  • MinIO 可创建每组4到16个磁盘组成的纠删码集合。所以你提供的磁盘总数必须是其中一个数字的倍数。
  • MinIO会根据给定的磁盘总数或者节点总数选择最大的纠删码集合大小,确保统一分布,即每个节点参与每个集合的磁盘数量相等。
  • 每个对象被写入一个EC集合中,因此该对象分布在不超过16个磁盘上。
  • 建议运行分布式MinIO设置的所有节点都是同构的,即相同的操作系统,相同数量的磁盘和相同的网络互连。
  • 分布式Minio使用干净的目录,里面没有数据。你也可以与其他程序共享磁盘,这时候只需要把一个子目录单独给MinIO使用即可。例如,你可以把磁盘挂在到/export下, 然后把/export/data作为参数传给MinIO server即可。
  • 分布式Minio里的节点时间差不能超过15分钟,你可以使用NTP 来保证时间一致。
  • MINIO_DOMAIN环境变量应该定义并且导出,以支持bucket DNS style。

启动分布式Minio实例,例如:4个节点,每节点1块盘,需要在4个节点上都运行下面的命令
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
./minio server http://192.168.1.101/data http://192.168.1.102/data \
                             http://192.168.1.103/data http://192.168.1.104/data \

启动分布式Minio实例,例如:4个节点,每节点4块盘,需要在4个节点上都运行下面的命令
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
./minio server http://192.168.1.101/data1 http://192.168.1.101/data1 \
                             http://192.168.1.101/data3 http://192.168.1.101/data4 \
                             http://192.168.1.102/data1 http://192.168.1.102/data1 \
                             http://192.168.1.102/data3 http://192.168.1.102/data4 \
                             http://192.168.1.103/data1 http://192.168.1.103/data1 \
                             http://192.168.1.103/data3 http://192.168.1.103/data4 \
                             http://192.168.1.104/data1 http://192.168.1.104/data1 \
                             http://192.168.1.104/data3 http://192.168.1.104/data4 \

或者:./minio server http://192.168.1.10{1...4}/data{1...4}
{1…4} 是有3个点的! 用2个点{1…n}的话会被shell解析导致不能传给MinIO server, 影响纠删码的顺序, 进而影响性能和高可用性
服务启动后,通过 192.168.1.101:9000~192.168.1.104:9000 均可访问

Docker容器部署

当然了,使用 Docker 容器部署需要服务器安装有 Docker 环境

单节点容器部署Minio

拉取镜像:
docker pull minio/minio
在Docker中运行Minio单点模式(-p 指定主机与容器端口映射,-e 指定环境变量):
docker run -p 9000:9000 -e MINIO_ACCESS_KEY=minioadmin -e MINIO_SECRET_KEY=minioadmin minio/minio server /data
以上命令运行,在容器销毁后,存储在容器中的所有文件都没有了,要持久化保存文件,需要将主机的目录挂载到容器内(-v 主机目录:容器目录,容器目录不可以为相对路径)
docker run -p 9000:9000 -e MINIO_ACCESS_KEY=minioadmin -e MINIO_SECRET_KEY=minioadmin -v /minio/data:/data minio/minio server /data

分布式模式部署Minio

分布式MinIO可以通过 Docker Compose 或者 Swarm mode进行部署。这两者之间的主要区别是Docker Compose创建了单个主机,多容器部署,而Swarm模式创建了一个多主机,多容器部署。
分布式部署详见官方文档:
使用Docker Compose部署MinIO
使用Docker Swarm部署MinIO

多节点使用 Nginx 负载均衡

多节点服务启动后,单独对每个节点进行访问显然不合理,通过使用 nginx 代理,进行负载均衡则很有必要。简单的配置如下:

upstream http_minio {server 192.168.1.101:9000;server 192.168.1.102:9000;server 192.168.1.103:9000;server 192.168.1.104:9000;
}server{listen       9000;server_name  192.168.1.105;location / {proxy_pass http://http_minio;}
}

MinIO文件存储服务搭建相关推荐

  1. 第2-3-5章 删除附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    文章目录 5.4 接口开发-根据id删除附件 5.4.1 接口文档 5.4.2 代码实现 5.4.3 接口测试 5.4.4 测试ALI和FAST_DFS以及MINIO上传和删除的接口 5.4.4.1 ...

  2. MiniO对象存储服务 磁盘缓存快速入门 ​​​​​​​

    MiniO对象存储服务 磁盘缓存快速入门 这里的磁盘缓存功能是指使用缓存磁盘来存储租户常用的一些数据.例如,假设你通过gateway azure设置访问一个对象并下载下来进行缓存,那接下来的请求都会直 ...

  3. FastDFS 分布式的文件存储环境搭建

    FastDFS 分布式的文件存储环境搭建 FastDFS环境安装包地址:http://download.csdn.net/detail/rzg813/9273935 (包含6个) 在Linux Cen ...

  4. minio搭建文件存储服务

    文件存储是必不可少的.目前市场上有许多提供对象存储服务的厂商,但是这些存储服务往往是收费或者有存储空间限制的.现在可使用minio搭建自己的文件存储服务器,因为minio新版和旧版有一定的区别,所以今 ...

  5. NFS、GFS、NAS文件存储服务对比分析

    <一>NFS NFS 是Network File System的缩写,中文解释是网络文件系统,它是FreeBSD支持的文件系统中的一种,它容许网络中的计算机之间经过TCP/IP网络共享资源 ...

  6. docker部署单主机集群minio文件存储

    官方文档地址: https://docs.min.io/docs/deploy-minio-on-docker-compose.html 1.安装Docker Compose工具(用于在使用Compo ...

  7. 文件存储服务RapidShare流量暴跌入困境

    RapidShare是国外一家相当知名的文件存储分项网站,但是近年来却麻烦不断.美国政府给它贴上了"流氓网站"的标签,迫使其2011年投入了50万欧元进行游说,试图恢复形象:在发布 ...

  8. 微服务系列:分布式文件存储之 MinIO 入门指南

    经过前面多篇文章我们学习了服务网关.服务调用.服务注册.服务监控等微服务系列的的相关知识,今天开始我们来学习一下分布式文件的相关知识. 首先我们从学习 MinIO 对象存储服务开始,后面还会学习下其他 ...

  9. 阿里云文件存储和自我管理的云解决方案的TCO比较

    阿里云文件存储是一种完全托管的文件存储服务. 很多客户也会使用第三方软件搭建自我管理的云解决方案. 本文重点从总体拥有成本(TCO)的角度,对这两种文件存储服务进行比较. 使用阿里云文件存储服务的总拥 ...

最新文章

  1. 10行代码带你搞定目标检测(附代码)
  2. 软件测试系列---软件测试基础
  3. 亚马逊向土耳其企业启动“全球开店”计划,要和中国卖家抢夺欧洲市场
  4. 关于Cpp中的类型转换操作符
  5. 环境在c盘_如何给女朋友解释为什么 Windows 上面的软件都把自己安装在 C 盘
  6. HTMLCSS 超简单的前端设计入门-2!
  7. Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
  8. Select和epoll的区别
  9. 时刻记住要做合格的程序员——一次高性能程序设计实验课后的反思
  10. java writedouble_java-将double转换为32位表示形式(以及相反的...
  11. 一晃眼这个blog已经丢弃两年。。。
  12. 手机电子书UMD数据格式实现代码(C#版)
  13. htmlunit第一个爬虫演示 目标网址http://ent.sina.com.cn/film/
  14. Java基础编程题目——找出姐妹素数
  15. 隔壁老王都找我要的33款开源爬虫框架,《记得收藏哦!不然看着看着就不见了》
  16. java学不下去能学web安全吗,这半年学习 Web 安全的一点心得体会
  17. 2022青海省农商银行(农信社)招聘每日一练及答案
  18. 2022-2028年中国素食行业竞争策略研究及未来前景展望报告
  19. TypeScript值比较、泛型函数类型和签名
  20. 详细BP神经网络预测算法及实现过程实例

热门文章

  1. Linux(文件文档操作)
  2. SOLIDWORKS软件和3D打印给行业带来的变化
  3. java根据散点图模拟出直线_借助Excel中XY散点图来模拟实现纵向折线图的方法
  4. Fritzing0.9.10下载安装和简单使用
  5. 太原理工大学计算机专业多少分录取,考多少分才能上太原理工大学 录取分数是多少...
  6. 人工智能、深度学习、机器学习常见面试题241~260
  7. React Native入门 基础使用总结
  8. java实现定位打卡功能
  9. 怒:阿里妈妈 在我Blog投的破广告
  10. 《英雄联盟》首部成人动画全球爆火!尺度有点大啊……