Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,很是适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件能够是任意大小,从几kb到最大5T不等。
Minio是一个很是轻量的服务,能够很简单的和其余应用的结合,相似 NodeJS, Redis 或者 MySQL。(引自https://docs.min.io/docs/minio-quickstart-guide.html )html
wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio
mv minio /usr/local/bin/
cat <<EOT >> /etc/default/minio # Volume to be used for MinIO server. MINIO_VOLUMES="/data/minio/" # Use if you want to run MinIO on a custom port. #MINIO_OPTS="--address :9199" # Access Key of the server. MINIO_ACCESS_KEY=admin # Secret key of the server. MINIO_SECRET_KEY=12345678 EOT
MINIO_VOLUMES:minio server使用的存储卷,minio要有存储卷的读写权限
MINIO_OPTS:自定义minio server监听的ip和端口
MINIO_ACCESS_KEY:用户名,最少三个字符
MINIO_SECRET_KEY:密钥,最少八个字符linux
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service mv minio.service /usr/lib/systemd/system/minio.service 编辑minio.service,修改User=root 、Group=root。
systemctl enable minio.service
使用Access Key与Secret Key登陆Minio。登陆成功后进入以下界面Access Key与Secret Key可由Minio Server随机生成,也可经过变量来自定义。
USAGE:ios
minio server [FLAGS] DIR1 [DIR2..] minio server [FLAGS] DIR{1...64}
DIR:定义文件系统上的目录,用空格分割每一个存储目录,也可用“…”来缩写目录;构建分布式minio时,设置为HTTP(s) URIs.git
FLAGS:github
--address value :绑定的套接字,默认端口9000 --config-dir value, -C value [DEPRECATED] :老版本遗留的配置文件目录 (默认: "/root/.minio") --certs-dir value, -S value :certs目录的路径. (默认: "/root/.minio/certs") --quiet :禁止打印启动信息 --anonymous :隐藏日志中的敏感信息 --json :以json格式输出服务器日志和启动信息。 --help, -h :帮助信息
环境变量设置:docker
ACCESS: MINIO_ACCESS_KEY:自定义用户名或访问密钥,长度至少为3个字符。 MINIO_SECRET_KEY: 自定义密码或密钥,长度至少为8个字符。 BROWSER: MINIO_BROWSER: 要禁用Web浏览器访问,请将此值设置为“off”。 CACHE: MINIO_CACHE_DRIVES: 由“;”分隔的已安装驱动器或目录的列表. MINIO_CACHE_EXCLUDE:由“;”分隔的缓存排除模式列表。 MINIO_CACHE_EXPIRY: 缓存到期持续时间(天)。 MINIO_CACHE_MAXUSE: 容许的最大缓存使用百分比(0-100)。 DOMAIN: MINIO_DOMAIN: 要启用虚拟主机请求,请将此值设置为Minio主机域名。 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端点。 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加密密钥环名称。
minio server /data/minio
数据保护
分布式Minio采用 erasure code来防范多个节点宕机和位衰减bit rot。
分布式Minio至少须要4个节点,使用分布式Minio自动引入了纠删码功能。
高可用
单机Minio服务存在单点故障,相反,若是是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你须要至少有N/2+1个节点 Quorum 来建立新的对象。
例如,一个8节点的Minio集群,每一个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你须要5个节点才能写数据。
限制
分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了Minio的简洁,同时仍拥有伸缩性。若是你须要搭建一个多租户环境,你能够轻松的使用编排工具(Kubernetes)来管理多个Minio实例。
注意,只要遵照分布式Minio的限制,你能够组合不一样的节点和每一个节点几块盘。好比,你可使用2个节点,每一个节点4块盘,也可使用4个节点,每一个节点两块盘,诸如此类。
一致性
Minio在分布式和单机模式下,全部读写操做都严格遵照read-after-write一致性模型。
(摘自minio官方文档分布式minio快速入门)json
• 须要4个节点才能使用分布式Minio自动引入了纠删码功能 • 最少2个节点,最多32个节点 • 分布式Minio里全部的节点须要有一样的access秘钥和secret秘钥,这样这些节点才能创建联接。为了实现这个,你须要在执行minio server命令以前,先将access秘钥和secret秘钥export成环境变量。 • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。 • 分布式Minio里的节点时间差不能超过3秒,你可使用NTP 来保证时间一致
cat <<EOT >> /etc/default/minio # Remote volumes to be used for Minio server. MINIO_VOLUMES=http://192.168.143.130/data/minio_volum1/minio \ http://192.168.143.130/data/minio_volum2/minio \ http://192.168.143.130/data/minio_volum3/minio \ http://192.168.143.130/data/minio_volum4/minio # Use if you want to run Minio on a custom port. #MINIO_OPTS="--address :9199" # Access Key of the server. MINIO_ACCESS_KEY=minioaccesskey # Secret key of the server. MINIO_SECRET_KEY=miniosecretkey EOT
示例使用了一台虚拟机,生产环境下每一台节点都须要单独部署minio server,配置文件一致,同时开启minio server浏览器
systemctl start minio.service
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)缓存
wget https://dl.minio.io/client/mc/release/linux-amd64/mc chmod +x mc mv mc /usr/local/bin/
mc命令帮助安全
格式:mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...] COMMAND: ls 列出文件和文件夹。 mb 建立一个存储桶或一个文件夹。 cat 显示文件和对象内容。 pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。 share 生成用于共享的URL。 cp 拷贝文件和对象。 mirror 给存储桶和文件夹作镜像。 find 基于参数查找文件。 diff 对两个文件夹或者存储桶比较差别。 rm 删除文件和对象。 events 管理对象通知。 watch 监视文件和对象的事件。 policy 管理访问策略。 session 为cp命令管理保存的会话。 config 管理mc配置文件。 update 检查软件更新。 version 输出版本信息。 配置文件:/root/.mc/config.json
添加一个云存储服务
开启minio服务 systemctl start minio
从minio服务得到url,minioaccesskey,miniosecretkey
在客户端链接minio服务
mc config host add minio http://192.168.143.131:9000 minioaccesskey miniosecretkey
参考文章
https://github.com/minio/minio-service/tree/master/linux-systemd
https://docs.min.io/cn/minio-docker-quickstart-guide.html