一、概述
1.1 minio介绍
minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,适用于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
**对象存储服务(Object Storage Service,OSS)**是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
对于中小型企业,如果不选择存储上云,那么Minio是个不错的选择,麻雀虽小,五脏俱全。Minio除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。
minio优点
- 部署简单, 一个single二进制文件即是一切,还可支持各种平台。
- minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;
- 兼容Amazon S3接口,充分考虑开发人员的需求和体验;
- 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读
- 数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
- 读写性能优异
1.2 minio的基础概念
Object:存储到minio的基本对象,如文件、字节流,Anything…
Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。
Drive:即存储数据的磁盘,在minio启动时,以参数的方式传入。Minio中所有的对象数据都会存储在Drive里。
Set :即一组Drive的集合,分布式部署根据集群规模自动划分一个或多个Set,每个Set中的Drive分布在不同位置。一个对象存储在一个Set上。
- 一个对象存储在一个Set上
- 一个集群划分为多个Set
- 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
- 一个SET中的Drive尽可能分布在不同的节点上
1.3 纠删码EC(Erasure Code)
minio使用纠删码机制来保证高可靠性,使用highwayhash来处理数据损坏(Bit Rot Protection)。
关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。
1.4 存储形式
文件对象上传到minio,会在对应的数据存储磁盘中,以Bucket名称为目录,文件名称为下一级目录,文件名下是part.1和xl.meta(老版本,最新版本如下图),前者是编码数据块及检验块,后者是元数据文件。
二、环境准备
2.1 服务器准备
名称 | IP | 磁盘数量 | 每个磁盘大小(G) | 操作系统 |
---|---|---|---|---|
minio1 | 192.168.1.155 | 2 | 5 | 银河麒麟V10 |
minio2 | 192.168.1.156 | 2 | 5 | 银河麒麟V10 |
minio3 | 192.168.1.157 | 2 | 5 | 银河麒麟V10 |
minio3 | 192.168.1.158 | 2 | 5 | 银河麒麟V10 |
nginx | 192.168.1.159 | 银河麒麟V10 |
2.2 磁盘挂载
2.2.1 查看服务器磁盘信息
[root@minio1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─klas-root 253:0 0 58G 0 lvm /
└─klas-swap 253:1 0 1020M 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sr0 11:0 1 4.3G 0 rom
2.2.2 格式化磁盘
#将每个节点挂载的磁盘格式化为minio推荐的xfs格式
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
#查看格式化后的磁盘信息
[root@minio1 ~]# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 xfs 1e84cbe7-d69c-490b-aea0-fa6e2bb7ad39 847.1M 16% /boot
└─sda2 LVM2_member LVM2 001 FdkYJn-0uIF-pWuX-uRh9-zshP-JKzE-oAIdw2
├─klas-root xfs 9d9aa4a0-285f-4d8c-a3a2-8b13ad8d9b49 55.5G 4% /
└─klas-swap swap 1 90749669-ceaa-46a3-8547-76650949d9c8 [SWAP]
sdb xfs 285da777-c02e-4739-8074-ff73fca36379 4.9G 1%
sdc xfs 46852c1e-fee1-4f40-901e-13981ad688d2 4.9G 1%
sr0 iso9660 Joliet Extension Kylin-Server-10 2023-03-31-21-06-57-0
2.2.3 磁盘目录挂载
#所有节点创建磁盘挂载数据目录
mkdir /minio-data/data{
01,02}
#所有节点将磁盘挂载到数据目录
mount /dev/sdc /minio-data/data01
mount /dev/sdc /minio-data/data02
#所有节点设置磁盘在系统重启后自动挂载
vi /etc/fstab
/dev/sdb /minio-data/data01 xfs defaults 0 0
/dev/sdc /minio-data/data02 xfs defaults 0 0
#重新加载配置
mount -a
#查看挂载信息
[root@minio1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2