七叶笔记 » golang编程 » Minio分布式文件服务器介绍及部署

Minio分布式文件服务器介绍及部署

minio

Minio是什么

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

主流文件服务器对比

综合性对比

特性对比

为什么选择Minio

文档社区活跃

MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式存储方案的开源项目,有十分完善的官方文档。。

官网文档地址:

SDK接口丰富

目前MinIO支持市面主流的开发语言并且可以通过SDK快速集成快速集成使用。

安装部署简单

Linux环境下只需下载一个二进制文件然后执行,即可在几分钟内完成安装和配置MinIO,并且MinIO提供了与k8s、etcd、docker等主流容器化技术深度集成方案。

性能好

MinIO号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s。对象存储可以作为主存储层,用来处理Spark、Presto等各种复杂工作负载以及成为Hadoop HDFS的替代品。

AWS S3标准兼容

亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品。

aws s3 minio

Minio分布式部署优势

数据保护

  • 分布式 Minio 采用纠删码来防范多个节点宕机和位衰减。
  • 分布式 Minio 至少需要 4 个节点(4台服务器),使用分布式 Minio 就 自动引入了纠删码功能。
  • 纠删码是一种恢复丢失和损坏数据的数学算法, Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。
  • 纠删码的工作原理和 RAID 或者复制不同,像 RAID6 可以在损失两块盘的情况下不丢数据,而 Minio 纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且 Minio 纠删码是作用在对象级别,可以一次恢复一个对象,而RAID 是作用在卷级别,数据恢复时间很长。 Minio 对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio 纠删码的设计目标是为了性能和尽可能的使用硬件加速。
  • 位衰减又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。

一致性

Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

高可用

单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,数据就是安全的。不过需要至少有 N/2+1 个节点来创建新的对象。(例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过你需要 5 个节点才能写数据。)

Minio分布式部署

环境

env

创建相应目录

 $ mkdir -p /minio/{run,data} && mkdir -p /etc/minio  

run:启动脚本及二进制文件目录;

data:数据存储目录;

/etc/minio:配置文件目录;

注意:/minio 目录必须是挂载的单独硬盘,否则后面启动会有问题

集群启动文件

 $ cat /minio/run/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=MinioTest
export MINIO_SECRET_KEY=1QAZ2wsx!
 
/data/minio/run/minio server --config-dir /etc/minio \
 \
 \
 \
   

MINIO_ACCESS_KEY:用户名,长度最小是5个字符;

MINIO_SECRET_KEY:密码,密码有复杂度要求,长度最小是8个字符;

–config-dir:指定集群配置文件目录;

配置成系统服务

 $ cat /etc/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=
 
[Service]
WorkingDirectory=/minio/run/
ExecStart=/minio/run/run.sh
 
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target  

将minio二进制文件上传到/minio/run目录!

给所有涉及到的文件或目录添加权限!

启动

 $ systemctl daemon-reload
$ systemctl enable minio 
$ systemctl start minio  

至此,Minio集群搭建完成!可以通过10.10.4.100:9000来访问UI。

ui

后记

prometheus

搭建完成只不过完成了第一步,后续还需要进行监控等操作,监控就留在下一篇吧。

相关文章