Minio入门系列【1】Windows/Linux/K8S单机部署Minio

1 Minio简介

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

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。目前支持JavaScript 、Java、Python、Golang、.NET。

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。

MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。

MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。

在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品

MinIO现在也是CNCF成员,在云原生存储部分和ceph等一起作为目前的解决方案之一。

2 Minio优点

2.1 Erasure Coding(消除编码)

MinIO 使用以汇编代码编写的每个对象内联擦除编码来保护数据,以提供尽可能高的性能。 MinIO 使用 Reed-Solomon 代码将对象条带化为具有用户可配置冗余级别的数据和奇偶校验块。 MinIO 的纠删码在对象级别执行修复,可以独立修复多个对象。

在最大奇偶校验为 N/2 的情况下,MinIO 的实现可以确保部署中只有 ((N/2)+1) 个可操作驱动器的不间断读写操作。 例如,在 12 驱动器设置中,MinIO 将对象分片到 6 个数据驱动器和 6 个奇偶校验驱动器,并且可以可靠地写入新对象或重建现有对象,部署中只剩下 7 个驱动器

在这里插入图片描述

2.2 Bitrot 保护

静默数据损坏或比特腐烂是磁盘驱动器面临的一个严重问题,会导致数据在用户不知情的情况下损坏。 原因多种多样(驱动器老化、电流峰值、磁盘固件错误、幻写、误读/写入、驱动程序错误、意外覆盖)但结果是相同的 - 数据受损。

MinIO 对 HighwayHash 算法的优化实现确保它永远不会读取损坏的数据 - 它会即时捕获并修复损坏的对象。 通过在读取时计算散列并在写入时从应用程序、网络和内存/驱动器验证它,从端到端确保完整性。 该实现专为速度而设计,可以在 Intel CPU 的单核上实现超过 10 GB/秒的散列速度。

在这里插入图片描述

2.3 加密

在飞行中加密数据是一回事; 保护静态数据是另一回事。 MinIO 支持多种复杂的服务器端加密方案来保护数据——无论数据位于何处。 MinIO 的方法以可忽略的性能开销确保机密性、完整性和真实性。 使用 AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC 支持服务器端和客户端加密。

加密对象使用 AEAD 服务器端加密进行防篡改。 此外,MinIO 与所有常用的密钥管理解决方案(例如 HashiCorp Vault)兼容并经过测试。 MinIO 使用密钥管理系统 (KMS) 来支持 SSE-S3。

如果客户端请求 SSE-S3,或者启用了自动加密,MinIO 服务器使用唯一的对象密钥加密每个对象,该对象密钥由 KMS 管理的主密钥保护。 鉴于极低的开销,可以为每个应用程序和实例打开自动加密。
在这里插入图片描述

2.4 蠕虫病毒

启用 WORM 后,MinIO 会禁用所有可能会改变对象数据和元数据的 API。 这意味着数据一旦写入就可以防篡改。 这对于许多不同的监管要求具有实际应用。

2.5 身份管理

MinIO 支持身份管理领域最先进的标准,与 OpenID connect 兼容提供商以及主要外部 IDP 供应商集成。这意味着访问是集中式的,密码是临时和轮换的,而不是存储在配置文件和数据库中。此外,访问策略是细粒度和高度可配置的,这意味着支持多租户和多实例部署变得非常简单。

在这里插入图片描述

2.6 连续复制

传统复制方法的挑战在于它们无法有效地扩展到几百 TiB 以上。 话虽如此,每个人都需要一个复制策略来支持灾难恢复,并且该策略需要跨越地域、数据中心和云。

MinIO 的连续复制专为大规模、跨数据中心部署而设计。 通过利用 Lambda 计算通知和对象元数据,它可以高效快速地计算增量。 Lambda 通知确保立即传播更改,这与传统的批处理模式不同。

连续复制意味着如果发生故障,数据丢失将保持在最低限度 - 即使面对高度动态的数据集。 最后,与 MinIO 所做的一切一样,连续复制是多供应商的,这意味着您的备份位置可以是从 NAS 到公共云的任何地方。
在这里插入图片描述

2.7 全球联盟

现代企业的数据无处不在。 MinIO 允许将这些不同的实例组合起来形成一个统一的全局命名空间。 具体来说,可以将任意数量的 MinIO 服务器组合成一个 Distributed Mode set,多个 Distributed Mode set 可以组合成一个 MinIO Server Federation。 每个 MinIO Server Federation 都提供统一的管理和命名空间。

MinIO 联合服务器支持无限数量的分布式模式集。 这种方法的影响是,对象存储可以为大型、地理分布的企业大规模扩展,同时保留从单个控制台容纳各种应用程序(Splunk、Teradata、Spark、Hive、Presto、TensorFlow、H20)的能力。

2.8 多云网关

所有企业都在采用多云战略。 这也包括私有云。 因此,您的裸机虚拟化容器和公共云服务(包括非 S3 提供商,如谷歌、微软和阿里巴巴)必须看起来完全相同。 虽然现代应用程序具有高度可移植性,但为这些应用程序提供支持的数据却并非如此。

让数据可用,无论它位于何处,是 MinIO 解决的主要挑战。 MinIO 在裸机、网络附加存储和每个公共云上运行。 更重要的是,MinIO 通过 Amazon S3 API 确保您对该数据的看法从应用程序和管理的角度来看完全相同。

MinIO,可以走得更远,使您现有的存储基础设施与 Amazon S3 兼容。 其影响是深远的。 现在,组织可以真正统一他们的数据基础设施 - 从文件到块,所有这些都显示为可通过 Amazon S3 API 访问的对象,而无需迁移。

3 Minio架构

MinIO 被设计为云原生,可以作为由外部编排服务(如 Kubernetes)管理的轻量级容器运行。 整个服务器是一个大约 40MB 的静态二进制文件,并且在使用 CPU 和内存资源方面非常高效 - 即使在高负载下也是如此。 结果是您可以在共享硬件上共同托管大量租户。

在这里插入图片描述
MinIO 在带有本地连接驱动器 (JBOD/JBOF) 的商用服务器上运行。 集群中的所有服务器都具有相同的能力(完全对称架构)。 没有名称节点或元数据服务器。

MinIO 将数据和元数据作为对象一起写入,从而消除了对元数据数据库的需求。 此外,MinIO 执行所有功能(擦除代码、位腐烂检查、加密)作为内联、严格一致的操作。 结果是 MinIO 非常有弹性。

每个 MinIO 集群都是分布式 MinIO 服务器的集合,每个节点有一个进程。 MinIO作为单进程运行在用户空间,使用轻量级协程实现高并发。 驱动器被分组为擦除集(默认情况下每组 16 个驱动器),并且使用确定性哈希算法将对象放置在这些集中。

MinIO 专为大规模、多数据中心的云存储服务而设计。 每个租户运行他们自己的 MinIO 集群,与其他租户完全隔离,使他们能够保护他们免受升级、更新和安全事件的任何中断。 每个租户通过跨地域联合集群独立扩展。

4 Windows安装

4.1 下载

下载地址:http://dl.minio.org.cn/server/minio/release/
在这里插入图片描述
在这里插入图片描述

4.2 在minio.exe目录打开cmd

在这里插入图片描述

4.3 配置参数并启动

# 设置用户名
set MINIO_ACCESS_KEY=admin
# 设置密码(8位)
set MINIO_SECRET_KEY=admin123
# 指定启动端口(未指定默认9000)及存储位置
minio.exe  server  --address 0.0.0.0:9999 D:/data

在这里插入图片描述

4.4 登录地址IP+9999,输入用户名及密码,搭建完成

在这里插入图片描述

5 Linux安装

5.1 下载

在这里插入图片描述
在这里插入图片描述

5.2 创建相关目录

# 创建文件存储目录
mkdir -p /data/minio/data
# 创建程序存放目录,并上传minio至此目录
mkdir -p /data/minio
cd /data/minio
# 修改可读权限
chmod +x minio 
# 设置用户名
export  MINIO_ACCESS_KEY=admin
# 设置密码
export  MINIO_SECRET_KEY=admin123

5.3 启动并访问首页

 ./minio server /data/minio/data --console-address ":33639" --address ":9000"

在这里插入图片描述

5.4 Docker

docker run -p 9999:9000 -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123" -v /data/minio:/data -d minio/minio server /data

5.5 Docker compose

version: '3'
services:minio:container_name: miniohostname: minioimage: "minio/minio:latest"volumes:- /data/minio:/dataports:- "9999:9000"environment:MINIO_ACCESS_KEY: adminMINIO_SECRET_KEY: admin123TZ: Asia/Shanghaicommand: server /datahealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3

6 K8S

要点:使用yml文件配置资源,使用PVC存储minio文件

6.1 在节点 192.168.58.103创建NFS

# 安装nfs-utils rpcbind
yum install nfs-utils nfs-common rpcbind 
# 创建目录
mkdir -p /data/minio
chmod 666 /data/minio/
chown nfsnobaby /data/minio/
# 添加访问策略
vi /etc/exports
# 输入内容
/data/minio  *(rw,no_root_squash,no_all_squash,sync)
# 启动
systemctl start rpcbind
systemctl start nfs
# 查看
showmount -e

6.2 创建PV(master执行)

# vim minio-pv.yaml 
# 添加
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-minio
spec:capacity:storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Recyclenfs:path: /data/minioserver: 192.168.58.103
# 创建
kubectl create -f minio-pv.yaml 
# 查看
kubectl get pv -o wide

在这里插入图片描述

6.3 创建PVC(master执行)

# 
vim minio-pvc.yaml 
# 内容
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-minio
spec:accessModes:- ReadWriteManyresources:requests:storage: 1Gi
# 查看
kubectl get pvc -o wide 

6.4 创建pod及service(master执行)

# 
vim minio.yaml 
# 添加
apiVersion: v1
kind: Service
metadata:name: minio-svclabels:app: minio
spec:type: NodePortports:- name: minio-portprotocol: TCPport: 9000nodePort: 32600targetPort: 9000selector:app: minio
---
apiVersion: v1
kind: Pod
metadata:name: miniolabels:app: minio
spec:containers:- name: minioenv:- name: MINIO_ACCESS_KEYvalue: "admin"- name: MINIO_SECRET_KEYvalue: "admin123"image: minio/minio:latestargs:- server- /dataports:- name: miniocontainerPort: 9000volumeMounts:- name: datamountPath: /datavolumes:- name: datapersistentVolumeClaim:claimName: pvc-minio
# 创建
kubectl apply  -f minio.yaml 
# 查看pod 
kubectl get pods -o wide
# 查看service
kubectl get svc -o wide 

在这里插入图片描述

6.5 验证

因为service采用的是NodePort,所以需要输入minio所在node的IP+32600访问
在这里插入图片描述
文件存放:页面上传一个文件,进入nfs所在服务器,然后发现文件已被存放在PVC中
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109261.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:三次握手与四次挥手

摘取作者:拓跋阿秀 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后…

亚马逊测评自养号成号率的关键因素及风控策略探讨

什么决定了自养号的成号率?这是测评团队最关心的问题之一 在测评自养号的过程中,除了需要在远程终端建立防火墙来做防关联和指纹浏览器外,干净的国外IP也是至关重要的 IP地址是互联网协议地址的缩写,为每个网络和主机分配一个逻…

伴随矩阵与可逆矩阵

目录 伴随矩阵的概念与公式 可逆矩阵的概念与定理 逆矩阵的运算性质 伴随矩阵的概念与公式 伴随矩阵是一个与给定矩阵相关的矩阵,它的元素是给定矩阵的代数余子式。 给定一个nn的方阵A,其元素为aij,则A的伴随矩阵adj(A)是一个nn的方阵&…

笔记1.1 计算机网络基本概念

计算机网络是通信技术与计算机技术紧密结合的产物 通信系统模型: 计算机网络是一种通信网络 计算机网络是互连的、自洽的计算机集合。 互连:互联互通 自洽:无主从关系 通过交换网络互连主机 Internet:数以百万计的互连的计算设…

FFmpeg深入学习

文章目录 前言一、FFmpeg 基础指令二、FFmpeg 应用之视频播放器1、音视频播放流程2、音视频同步 三、FFplay 播放器1、FFmpeg 播放器的整体框架2、ffplay 的初体验及快捷键3、ffplay 模块划分4、ffplay 原理及流程 四、FFmpeg 编解码及转码1、FFmpeg 转码全流程简介2、FFmpeg 转…

使用两个队列模拟栈

整体思路如下图: 代码实现 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;/*** author: Arbicoral* Description: 使用2个队列模拟栈的 push() pop() top(), 自己实现打印 print()*/ public class QueueMoniStack2 {public stati…

深度解析shell脚本的命令的原理之mv

mv 是 Unix 或 Linux 中的一个基本命令,用于移动或重命名文件和目录。以下是对这个命令的深度解析: 基本操作:mv 命令的基本操作是将一个或多个源文件或目录移动到一个目标文件或目录,或者重命名源文件或目录。这是通过改变文件系…

基于SSM+Vue的鲸落文化线上体验馆设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Unity WebView 中文输入支持

WebView 中文输入支持 🥪效果展示🍱原理 🥪效果展示 💡使用版本为4.4; 💡测试环境:unity editor 2022.3.15f1c1、Windows; 🍱原理 提取页面激活的输入框,…

c语言练习题56:变种水仙花

变种水仙花 描述 变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身&#xff0c…

竞赛 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

笔记(四)传统图机器学习的特征工程-连接

1、引言 工作:通过已知连接,补全未知连接 思想: 直接提取link特征,把link变成D维向量把link两端节点的D维向量拼接在一起(不好,丢失了link本身的连接结构信息) 2、连接分类 客观静态图&…