官网地址 中文官网地址
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
对于中小型企业,如果不选择存储在云,那么 Minio 是个不错的选择,麻雀虽小,五脏俱全。当然Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品。
部署简单: 一个single二进制文件即是一切,还可支持各种平台。
minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;
兼容Amazon S3接口,充分考虑开发人员的需求和体验;
低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用
磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
- 一个对象存储在一个Set上
- 一个集群划分为多个Set
- 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
- 一个SET中的Drive尽可能分布在不同的节点上
minio server
的standalone
模式,即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境、测试环境的验证和学习使用。在standalone
模式下,还可以分为non-erasure code mode和erasure code mode。non-erasure code mode
minio
直接在data
下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。erasure code mode
minio server
实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server
会自动启用erasure code mode
。erasure code
对磁盘的个数是有要求的,如不满足要求,实例启动将失败。erasure code
启用后,要求传给minio server
的endpoint
(standalone
模式下,即本地磁盘上的目录)至少为4个。操作系统 | CPU架构 | 地址 |
---|---|---|
GNU/Linux | 64-bit Intel | http://dl.minio.org.cn/server/minio/release/linux-amd64/minio |
cd /usr/local/soft/
#下载minio二进制文件
wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
#添加执行权限
chmod +x minio
#启动minio server服务,指定数据存储目录/data/minio
mkdir -p /data/minio
./minio server /data/minio
export MINIO_ROOT_USER=admin ---指定用户名
export MINIO_ROOT_PASSWORD=admin1234 --指定用户名密码
#启动minio
./minio server /data/minio
./minio server --config-dir /data/minio/config /data/minio/
./minio server --address ":7810" --console-address ":7811" /data/minio/
#如果想后台运行可以用下面命令:
nohup ./minio server --address ":7810" --console-address ":7811" /data/minio/ > /data/minio/minio.log &
--address ----指定api端口号
--console-address ----指定web端口号
docker run -itd --name=minio -p 7810:7810 -p 7811:7811 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin1234" \
-v /data/minio:/data/ \
-v /data/minio/config:/root/.minio/ \
minio/minio:latest server --address ":7810" --console-address ":7811" /data
#参数解释
docker run 命令中使用的各个参数的详细解释:
-itd:以交互式、终端和后台运行的方式启动容器。
--name=minio:给容器指定一个名称,这里将容器命名为 minio。
-p 7810:7810 -p 7811:7811:将容器的 7810 和 7811 端口映射到主机的同样端口,这样可以通过主机的这两个端口访问 MinIO。
-e "MINIO_ROOT_USER=admin":设置 MinIO 的根用户(管理员)的用户名为 admin。
-e "MINIO_ROOT_PASSWORD=admin1234":设置 MinIO 的根用户(管理员)的密码为 admin1234。
-v /data/minio:/data/:将主机的 /data/minio 目录挂载到容器内部的 /data 目录,用于持久化存储 MinIO 的数据。可以根据实际需求修改主机上的目录路径。
-v /data/minio/config:/root/.minio/:将主机的 /data/minio/config 目录挂载到容器内部的 /root/.minio/ 目录,用于持久化存储 MinIO 的配置文件。可以根据实际需求修改主机上的目录路径。
minio/minio:latest:指定要使用的 MinIO Docker 镜像
server --address ":7810" --console-address ":7811" /data:在容器启动后,运行 MinIO 的 server 模式,并将 /data 目录作为数据存储路径。--address 参数指定 MinIO API端口,这里使用的是主机的 7810 端口;--console-address 参数指定 MinIO的web端口,这里使用的是主机的 7811 端口
erasure code
和校验和 checksum
来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
- 纠删码是一种恢复丢失和损坏数据的数学算法,
Minio
采用Reed-Solomon code
将对象拆分成N/2数据和N/2 奇偶校验块。- 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。
docker run -itd -p 7810:7810 -p 7811:7811 --name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin1234" \
-v /data/minio1:/data1 \
-v /data/minio2:/data2 \
-v /data/minio3:/data3 \
-v /data/minio4:/data4 \
-v /data/minio5:/data5 \
-v /data/minio6:/data6 \
-v /data/minio7:/data7 \
-v /data/minio8:/data8 \
minio/minio:latest server /data{1...8} --address ":7810" --console-address ":7811"
分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。
Hadoop
的文件系统(3个副本),Redis
的集群,MySQL
的主备模式等。checksum
)进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP
协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。
- 分布式
Minio
采用 纠删码来防范多个节点宕机和位衰减bit rot
。- 分布式
Minio
至少需要4个硬盘,使用分布式Minio
自动引入了纠删码功能。
- 单机
Minio
服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio
,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。- 例如,一个16节点的
Minio
集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
Minio
在分布式和单机模式下,所有读写操作都严格遵守read-after-write
一致性模型。
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin1234
minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \
http://192.168.1.13/export3 http://192.168.1.14/export4 \
http://192.168.1.15/export5 http://192.168.1.16/export6 \
http://192.168.1.17/export7 http://192.168.1.18/export8
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin1234
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \
http://192.168.1.11/export3 http://192.168.1.11/export4 \
http://192.168.1.12/export1 http://192.168.1.12/export2 \
http://192.168.1.12/export3 http://192.168.1.12/export4 \
http://192.168.1.13/export1 http://192.168.1.13/export2 \
http://192.168.1.13/export3 http://192.168.1.13/export4 \
http://192.168.1.14/export1 http://192.168.1.14/export2 \
http://192.168.1.14/export3 http://192.168.1.14/export4
[root@localhost minio]# tree
.
└── yangshuang
└── Notepad_downloader.8.5.3.exe
├── 973c3b87-ca52-4520-9bb1-f64db88308d2
│ └── part.1
└── xl.meta
平台 | CPU架构 | URL |
---|---|---|
GNU/Linux | 64-bit Intel | http://dl.minio.org.cn/client/mc/release/linux-amd64/mc |
wget -P /usr/local/sbin/ http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
#添加权限:
chmod +x /usr/local/sbin/mc
#查询mc host配置
mc config host ls
#添加minio服务
mc config host add minio-server http://192.168.2.20:9000 admin admin1234
Added `minio-server` successfully.
# 删除host
mc config host remove minio-server
参数 | 说明 |
---|---|
ls | 列出存储桶和对象 |
mb | 创建存储桶 |
cat | 显示文件和对象内容。 |
pipe | 将一个STDIN重定向到一个对象或者文件或者STDOUT。 |
share | 生成用于共享的URL。 |
cp | 拷贝文件和对象。 |
mirror | 给存储桶和文件夹做镜像。 |
find | 基于参数查找文件。 |
diff | 对两个文件夹或者存储桶比较差异。 |
rm | 删除文件和对象。 |
events | 管理对象通知。 |
watch | 监视文件和对象的事件。 |
policy | 管理访问策略。 |
config | 管理mc配置文件。 |
update | 检查软件更新。 |
version | 输出版本信息。 |
# 查询minio服务上的所有buckets(文件和文件夹)
mc ls minio-server
# 下载文件
mc cp minio-server/tulingmall/fox/fox.jpg /tmp/
#删除文件
mc rm minio-server/tulingmall/fox/fox.jpg
#上传文件
mc cp zookeeper.out minio-server/tulingmall/
# 创建bucket
mc mb minio-server/bucket01
# 删除bucket
mc rb minio-server/bucket02
# bucket不为空,可以强制删除 慎用
mc rb --force minio-server/bucket01
#查询bucket03磁盘使用情况
mc du minio-server/bucket03
参数 | 说明 |
---|---|
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 admin user --help
#新建用户
mc admin user add minio-server fox
mc admin user add minio-server fox02 12345678
#查看用户
mc admin user list minio-server
#禁用用户
mc admin user disable minio-server fox02
#启用用户
mc admin user disable minio-server fox02
#查看用户信息
mc admin user info minio-server fox
#删除用户
mc admin user remove minio-server fox02
mc admin policy --help
#列出MinIO上的所有固定策略
mc admin policy list minio-server
# 查看plicy信息
mc admin policy info minio-server readwrite