赞
踩
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
显示版本信息
我们可以看到有两个启动命令
server
和gateway
,继续看一下这两个命令的用法
语法:
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:为这个设置添加一个可选的注释
示例:
- 以 “/home/shared” 为存储目录启动 minio服务
$ minio server /home/shared- 启动 minio 服务并绑定指定地址和端口, ADDRESS:PORT
$ minio server --address 192.168.1.101:9000 /home/shared- 启动 minio 服务并启用虚拟主机风格的请求
$ export MINIO_DOMAIN=mydomain.com
$ minio server --address mydomain.com:9000 /mnt/export- 单节点64个盘,以纠删码模式启动 minio 服务
$ minio server /mnt/export{1…64}- 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}- 启动 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- 启动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
sever 和 gateway 启动有何区别呢?
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_KEY 和 MINIO_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 环境
单节点容器部署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 代理,进行负载均衡则很有必要。简单的配置如下:
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;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。