Minio对象存储

1、概述

​ Minio是一个基于Apache License v2.0开源和谈的工具存储服务。它兼容亚马逊S3云存储服务接口,异常符合于存储大容量非构造化的数据,比如图片、视频、日记文献、备份数据和容器/杜撰机镜像等,而一个工具文献能够是任性巨细,从几kb到最大5T不等。且Minio十足笨重,可与使用顺序绳捆索绑在一齐,相似于NodeJS,Redis和MySQL。

​ 官方文档地址:https://docs.min.io/cn

​ 对于有需求不能或不使用云厂商提供的存储服务,例如阿里云的oss、七牛云的对象存储等,可以通过自建minio对象存储集群的方式

2、功能特性

  • Amazon S3兼容

    Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。
  • 数据保护

    Minio使用Minio Erasure Code来防止硬件故障。也许会损坏一半以上的driver,但是仍然可以从中恢复。
  • 高度可用

    Minio服务器可以容忍分布式设置中高达(N / 2)-1节点故障。而且,您可以配置Minio服务器在Minio与任意Amazon S3兼容服务器之间存储数据。
  • Lambda计算

    Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。
  • 加密和防篡改

    Minio为加密数据提供了机密性,完整性和真实性保证,而且性能开销微乎其微。使用AES-256-GCM,ChaCha20-Poly1305和AES-CBC支持服务器端和客户端加密。加密的对象使用AEAD服务器端加密进行防篡改。
  • 可对接后端存储

    除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。
  • sdk支持

    基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持

3、集群规划

3.1、单节点

  • 根据存储是否为远端,可直接使用FS或NFS直接操作存储中的Object
  • 调用S3接口,通过Minio使用FS或NFS来操作Object

3.2、多节点

多节点的Minio会根据不同的Access_key及Secret_Key来区分不同租户,每个租户可操作对应Server获取Object。Minio Server间可以通过不同的进程模型、容器或是虚拟机来互相隔离。

3.3、分布式

分布式Minio在无共享架构中根据需求扩展到尽可能多的服务器,所有节点需要使用相同的Access_key及Secret_key来登录。分布式Minio使用Web负载均衡器或DNS轮循(DNS round-robin),在各服务器之间实现负载均衡。

4、分布式minio集群搭建

minio存储的部署方案在官网有很多,例如在docker-compose,kubernetes,DC/OS等环境下,本文采用的是较稳定的二进制部署方式。

4.1、集群规划

minio二进制文件下载地址: https://dl.minio.io/server/minio/release/linux-amd64/minio

操作系统CentOS 7.6

服务器资源:

  • 172.16.1.101

    /minio/data1 /minio/data2
  • 172.16.1.102

    /minio/data1 /minio/data2

本集群由2台服务器构成(官方推荐集群最小4台服务器),每个服务器上挂载两个磁盘目录,最小数据挂载点为4个

4.2、创建用户

创建专用的用户

useradd -M -s /sbin/nologin -r minio-user

4.3、创建相关目录(所有节点)

  • 数据存储目录
[root@localhost ~]# mkdir -p /minio/data1
[root@localhost ~]# mkdir -p /minio/data2
  • 启动脚本目录
[root@localhost ~]# mkdir -p /opt/minio
  • 集群配置文件目录
[root@localhost ~]# mkdir -p /etc/minio

4.4、编写集群启动脚本(所有节点)

[root@localhost ~]# vim /opt/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=Minio
export MINIO_SECRET_KEY=Test123456
/opt/minio/minio server --config-dir /etc/minio \
http://172.16.1.101/minio/data1 http://172.16.1.101/minio/data2 \
http://172.16.1.102/minio/data1 http://172.16.1.102/minio/data2 \

其中,“MINIO_ACCESS_KEY”为用户名,“MINIO_SECRET_KEY”为密码,密码不能设置过于简单,不然minio会启动失败,“–config-dir”指定集群配置文件目录,生成复杂用户名和密码可通过类似Linux命令

tr -cd '[:alnum:]' </dev/urandom |fold -w64|head -n1的方式来生成

4.5、编写服务脚本(所有节点)

[root@localhost ~]# vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
Wants=network-online.target
After=network-online.target [Service]
User=minio-user
Group=minio-user
WorkingDirectory=/opt/minio/
ExecStart=/opt/minio/run.sh # Let systemd restart this service on-failure
Restart=on-failure
RestartSec=5 # Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536 # Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no [Install]
WantedBy=multi-user.target
[root@localhost ~]# chmod +x /usr/lib/systemd/system/minio.service

其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本

参考官方地址:

https://github.com/minio/minio-service/blob/master/linux-systemd/minio.service

4.6、服务启动

4.6.1、二进制文件

将minio二进制文件上传到/opt/minio目录下并赋予权限

chmod +x minio

4.6.2、赋予启动脚本权限

chmod +x /opt/minio/run.sh

4.6.3、修改目录所属

由于minio服务由minio-user这个用户启动和运行,所以需要修改相应目录的属主和属组

chown -R minio-user:minio-user /minio
chown -R minio-user:minio-user /etc/minio
chown -R minio-user:minio-user /opt/minio

4.6.4、启动服务

systemctl daemon-reload
systemctl start minio
systemctl enable minio
systemctl status minio

启动后可通过访问节点:9000,并使用设置的key登录到控制台,也可在启动脚本中加入参数--address "127.0.0.1:9000"修改端口,即:

#!/bin/bash
export MINIO_ACCESS_KEY=Minio
export MINIO_SECRET_KEY=Test123456 /opt/minio/minio server --config-dir /etc/minio \
--address "127.0.0.1:9000" \
http://172.16.1.101/minio/data1 http://172.16.1.101/minio/data2 \
http://172.16.1.102/minio/data1 http://172.16.1.102/minio/data2 \

5、配置域名及https

5.1、配置域名

使用nginx配置域名进行访问,在 Nginx 的配置文件中加入下面的内容:

location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}

5.2、配置https

使用nginx配置https安全访问,并根据301规则自动跳转到https,https证书可自签、也可申请一个浏览器可信的证书,下面的证书属于浏览器可信的,全局配置如下:

worker_processes  1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server_tokens off;
keepalive_timeout 65;
client_max_body_size 50m;
access_log /var/log/nginx/nginx.access.log;
error_log /var/log/nginx/nginx.error.log;
upstream minio_server {
server 192.168.10.101:9000;
server 192.168.10.102:9000;
ip_hash;
}
server {
listen 80;
server_name minio.test.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name minio.test.com;
if ($host != 'minio.test.com') {
return 403;
}
ssl_certificate /usr/local/nginx/cert-ssl/minio.test.com.pem;
ssl_certificate_key /usr/local/nginx/cert-ssl/minio.test.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://minio_server;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

5.3、访问认证

minio控制台界面是通过Accsss Key和Secret Key登录的,除了将这对Key用于客户端,作为管理员还可能有需要对控制台访问做保护,即在用Key登录的基础上再加一层。这就如同非X-pack版本的Kibana界面一样,没有访问控制。同样的,可以尝试使用nginx的basic_auth模块。一番折腾发现是不可行的,对于nginx基础认证,后端不支持非AWS4-HMAC-SHA256签名算法,可能出现如下图所示的返回结果:



因此这个想法不可行,具体如何实现也没有google到。。。

6、控制台界面操作及客户端sdk

6.1、控制台界面

通过上面配置的域名访问到minio界面



并通过指定的Access Key及Secret Key登录到控制台

6.2、控制台界面操作

控制台可以做的操作如下:

  • 创建一个存储空间(存储桶)bucket
  • 在存储桶内上传下载文件
  • 文件生成链接,设置链接过期时间

6.3、客户端sdk

更多内容可查看官网文档

7、多租户部署

多租户的实现可参考:

https://blog.csdn.net/dingjs520/article/details/79118305

Minio对象存储的更多相关文章

  1. 在kubernetes中搭建harbor,并利用MinIO对象存储保存镜像文件

    前言:此文档是用来在线下环境harbor利用MinIO做镜像存储的,至于那些说OSS不香吗?或者单机harbor的,不用看了.此文档对你没啥用,如果是采用单机的harbor连接集群MinIO,请看我的 ...

  2. 轻量对象存储服务——minio

    minio Minio是一个非常轻量的对象存储服务. Github: minio 它本身不支持文件的版本管理.如果有这个需求,可以用 s3git 搭配使用. Github: s3git 安装 mini ...

  3. 对象存储服务-Minio

    Mino 目录 Mino 对象存储服务 Minio 参考 Minio 架构 为什么要用 Minio 存储机制 纠删码 MinIO概念 部署 单机部署: Docker 部署Minio 分布式Minio ...

  4. 对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载

    目录 一.MinIO快速入门 1. MinIO简介 2. CentOS7更换成阿里云镜像 3. 安装 3.1 下载 3.2 运行测试 4. 配置脚本执行文件 4.1 创建配置执行文件 4.2 执行 二 ...

  5. 免费版对象存储【minIO】CentOS部署实践记录 2021

    好久没写,记录一下 1.背景 之前一直用的七牛,不过是收费的,然后有些定制化需求,可能比较看重预算,然后就有了这篇开源方式:minio 2.简介 官方文档:http://docs.minio.org. ...

  6. Github 29K Star的开源对象存储方案——Minio入门宝典

    对象存储不是什么新技术了,但是从来都没有被替代掉.为什么?在这个大数据发展迅速地时代,数据已经不单单是简单的文本数据了,每天有大量的图片,视频数据产生,在短视频火爆的今天,这个数量还在增加.有数据表明 ...

  7. 使用MinIO搭建对象存储服务

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

  8. [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署

    原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...

  9. [转载] 文件系统vs对象存储——选型和趋势

    原文: http://www.testlab.com.cn/Index/article/id/1082.html#rd?sukey=fc78a68049a14bb2699b479d5e730f6f45 ...

随机推荐

  1. Python - Django - AJAX 实现 POST 请求

    index.html: <input type="text" id="i1">+ <input type="text" i ...

  2. 基于EasyNVR摄像机流媒体服务器实现RTSP或Onvif监控摄像头Web无插件化直播监控

    前言介绍 随着互联网的发展,尤其是移动互联网基于H5.微信的应用越来越多,企业也更多地想基于H5.微信公众号来快速开发和运营自己的产品,而传统的安防IPC所输出的各种RTSP.GB28181.SDK视 ...

  3. [LeetCode] 206. Reverse Linked List 反向链表

    Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...

  4. [LeetCode] 267. Palindrome Permutation II 回文全排列 II

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  5. pytest+allure测试框架搭建

    https://blog.csdn.net/wust_lh/article/details/86685912 https://www.jianshu.com/p/9673b2aeb0d3 定制化展示数 ...

  6. Spring boot使用Aspose.Slides操作ppt转PDF、转图片

    最近要将ppt转为PDF和图片,Apache poi ,jacob都试了下 Apache poi 转图片乱码,处理了,还会存在部分乱码 jacob对系统依赖比较大,必须是windows还得安装MS O ...

  7. 第2/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...

  8. Windows 下使用 Composer 安装 thinkphp

    我用 XAMPP 安装 thinkphp 会出错,所以把环境换成了 phpStudy,这样甚至不用到处找安装包,直接去官网有最新版本,PHP 版本也是比较新的. 安装 phpStudy 先去官网下载安 ...

  9. Docker创建镜像 并推拉Harbor

    创建镜像 一.根据dockerfile创建镜像 文件详解 1.mkdir dockerfile/lib/centos7base/ 创建目录 2.创建Dockerfile vim Dockerfile ...

  10. Vue框架 03

    Vue项目开发: 前后端完全分离 后端:提供接口数据 前端:页面转跳.页面布局.页面数据渲染全部由前端做 中间交互:请求 搭建Vue项目环境: Vue项目需要自建服务器:node node介绍: 1. ...