Minio对象存储
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对象存储的更多相关文章
- 在kubernetes中搭建harbor,并利用MinIO对象存储保存镜像文件
前言:此文档是用来在线下环境harbor利用MinIO做镜像存储的,至于那些说OSS不香吗?或者单机harbor的,不用看了.此文档对你没啥用,如果是采用单机的harbor连接集群MinIO,请看我的 ...
- 轻量对象存储服务——minio
minio Minio是一个非常轻量的对象存储服务. Github: minio 它本身不支持文件的版本管理.如果有这个需求,可以用 s3git 搭配使用. Github: s3git 安装 mini ...
- 对象存储服务-Minio
Mino 目录 Mino 对象存储服务 Minio 参考 Minio 架构 为什么要用 Minio 存储机制 纠删码 MinIO概念 部署 单机部署: Docker 部署Minio 分布式Minio ...
- 对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载
目录 一.MinIO快速入门 1. MinIO简介 2. CentOS7更换成阿里云镜像 3. 安装 3.1 下载 3.2 运行测试 4. 配置脚本执行文件 4.1 创建配置执行文件 4.2 执行 二 ...
- 免费版对象存储【minIO】CentOS部署实践记录 2021
好久没写,记录一下 1.背景 之前一直用的七牛,不过是收费的,然后有些定制化需求,可能比较看重预算,然后就有了这篇开源方式:minio 2.简介 官方文档:http://docs.minio.org. ...
- Github 29K Star的开源对象存储方案——Minio入门宝典
对象存储不是什么新技术了,但是从来都没有被替代掉.为什么?在这个大数据发展迅速地时代,数据已经不单单是简单的文本数据了,每天有大量的图片,视频数据产生,在短视频火爆的今天,这个数量还在增加.有数据表明 ...
- 使用MinIO搭建对象存储服务
1.MinIO是什么? MinIO 是一款高性能.分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件.即X86等低成本机器也能够很好的运行MinIO. MinIO与传统的存储和其 ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- [转载] 文件系统vs对象存储——选型和趋势
原文: http://www.testlab.com.cn/Index/article/id/1082.html#rd?sukey=fc78a68049a14bb2699b479d5e730f6f45 ...
随机推荐
- 认领该应用 apk空白包签名 方法
起因: apicloud开发的项目,上架应用宝市场,被要求做这个 解决方法: 下载签名工具,并解压缩.解压缩.解压后是两个文件夹,选择keystore签名工具. 下载地址: linux 签名工具(命令 ...
- bladex下载前端代码后,运行服务时报错【'vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件。】的解决方法
问题:E:\BladeXDB\Saber>yarn run serveyarn run v1.13.0$ vue-cli-service serve'vue-cli-service' 不是内部或 ...
- 后会有期,江湖再见!(WondersGroup)
很高兴能和大家一路走来,一如既往的做好并做完本职工作后,今儿我要离开了,本想着悄无声息地离开,但是为了解决走了还被微信艾特和私聊找我处理问题的潜在风险,我决定在此正式的和大家说一声再见!哈哈,It's ...
- [计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2
faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇:faster-rcnn(testing): ubuntu14.04+c ...
- 阿里云使用Docker部署工单系统(redmine)
环境:阿里云服务器 Redmine安装部署 Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据 ...
- java File源码理解,探索File路径
1.方法: new File(path); 我们知道根据输入的路径path的不同 ,File可以根据path的不同格式,来访问文件.那么,path的形式有几种呢? 根据源码 可以知道,输入的路径pat ...
- Apache Kafka主题 - 架构和分区
1.卡夫卡话题 在这篇Kafka文章中,我们将学习Kafka主题与Kafka Architecture的整体概念.Kafka中的体系结构包括复制,故障转移以及并行处理.此外,我们还将看到创建Kafka ...
- 怎么查看服务器的cpu和内存的硬件信息
在linux 下怎么查看服务器的cpu和内存的硬件信息 可以按照如下方式进行操作: 一.查看cpu总个数方法: 1.首先执行top命令,如下图中内容所表示. 2.在top命令的显示界面,按数字 ...
- 深度学习 Bottleneck layer / Bottleneck feature
最近在学习deeplearning的时候接触到了bottle-neck layer,好奇它的作用于是便扒了一些论文(论文链接放在文末吧),系统的了解一下bottle-neck feature究竟有什么 ...
- 作业调度框架Quartz.NET-现学现用-02-任务监听
原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...