一、MinIO快速入门

1. MinIO简介

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

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

2. CentOS7更换成阿里云镜像

CentOS更换aliyun镜像站

https://www.cnblogs.com/lishen2021/p/14680564.html

3. 安装

3.1 下载

下载:
wget https://dl.min.io/server/minio/release/linux-amd64/minio

3.2 运行测试

修改文件执行权限:
chmod +x minio 运行:
MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin ./minio server /data/minio/standalone

安装启动后使用浏览器访问http://ip:port,默认端口为:9000,如果可以访问,则表示minio已经安装成功。账号和密码分别为:MINIO_ACCESS_KEY、MINIO_SECRET_KEY

4. 配置脚本执行文件

4.1 创建配置执行文件

创建可执行文件 minio.sh

touch minio.sh

添加以下脚本内容:

#!/bin/sh

function start() {
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=2020_minio@admin
nohup /home/minio/minio server /home/minio/data > /home/minio/logs/minio.log 2>&1 &
} NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
#if [ "start" = $1 ]; then
# if [ 0 -eq $NUM ]; then
# start
# fi
#elif [ "restart" = $1 ]; then
# if [ 0 -ne $NUM ]; then
# kill -9 $ID | start
# else
# start
# fi
#elif [ "stop" = $1 ]; then
# if [ 0 -ne $NUM ]; then
# kill -9 $ID
# fi
#else
# echo "No sush command '$1'"
#fi case $1 in
"start")
if [ 0 -eq $NUM ]; then
start
fi
;;
"restart")
if [ 0 -ne $NUM ]; then
kill -9 $ID | start
else
start
fi
;;
"stop")
if [ 0 -ne $NUM ]; then
kill -9 $ID
fi
;;
*)
echo "No sush command '$1'"
;;
esac

脚本中使用 if 或 case 都可以

4.2 执行

启动:
sh minio.sh start 输出执行信息方式启动:
sh -x minio.sh start 重启:
sh minio.sh restart 停止服务:
sh minio.sh stop

二、分布式MinIO快速入门

1. 分布式MinIO快速入门

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。

1.1 分布式Minio有什么好处?

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

1.2 数据保护

分布式Minio采用 纠删码 来防范多个节点宕机和位衰减bit rot。分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

1.3 高可用

单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。

例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写数据。

注意:只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。

1.4 一致性

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

2. 配置运行分布式Minio

启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。

注意:

1. 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
2. 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
3. 分布式Minio里的节点时间差不能超过3秒,你可以使用NTP来保证时间一致。

2.1 将access秘钥和secret秘钥export成环境变量

注:需要在每个节点上都运行

export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

2.2 启动分布式Minio实例

配置:2个节点,每个节点2块盘。

执行命令:

./minio server http://192.168.199.140/data/minio/export1 http://192.168.199.140/data/minio/export2 http://192.168.199.141/data/minio/export1 http://192.168.199.141/data/minio/export2

注:需要在两个节点上都运行

2.3 配置成启动脚本

2.3.1 创建配置执行文件

创建可执行文件 minio-cluster.sh

touch minio-cluster.sh

添加内容如下:

#!/bin/sh
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin #nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
# http://192.168.199.140/data/minio/export2 \
# http://192.168.199.141/data/minio/export1 \
# http://192.168.199.141/data/minio/export2 \
# > /dev/null 2>&1 & nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
http://192.168.199.140/data/minio/export2 \
http://192.168.199.141/data/minio/export1 \
http://192.168.199.141/data/minio/export2 \
> /opt/minio/minio.log 2>&1 &

2.3.2 执行

启动:
sh minio-cluster.sh 输出执行信息方式启动:
sh -x minio-cluster.sh

三、纠删码(erasure code)

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。

1. 纠删码(erasure code)

1.1 什么是纠删码erasure code?

纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复,是不是很NB,感兴趣的同学请翻墙google。

1.2 为什么纠删码有用?

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。

1.3 什么是位衰减bit rot保护?

位衰减又被称为数据腐化Data Rot、无声数据损坏Silent Data Corruption,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接咔咔宕了还危险。 不过不用怕,Minio纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。

四、MinIO个人项目测试

对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载的更多相关文章

  1. 对象存储服务-Minio

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

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

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

  3. centos 6.5下安装文件上传下载服务

    centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机,和上传一些文件到服务器,导致来回的开启ftp软件有点麻烦,这里我们可以使用文件上传下载服务,来解决上传和 ...

  4. Nginx + Lua搭建文件上传下载服务

    收录待用,修改转载已取得腾讯云授权 最新腾讯云技术公开课直播,提问腾讯W3C代表,如何从小白成为技术专家?点击了解活动详情 作者 | 庄进发 编辑 | 迷鹿 庄进发,信息安全部后台开发工程师,主要负责 ...

  5. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  6. SecureCRT 下载,安装,绝佳配色,实用配置,上传下载配置合集

    SecureCRT 下载,安装,绝佳配色,实用配置,上传下载配置合集 chocoball 发布于 2年前,共有 3 条评论 SecureCRT 是一款支持 SSH2.SSH1.Telnet.Telne ...

  7. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

  8. linux CentOS 安装rz和sz命令 lrzsz 实现windows和linux之间的文件上传 下载

    https://blog.nbhao.org/1902.html https://bbs.csdn.net/topics/391989523 https://www.cnblogs.com/zhoul ...

  9. 【docker】docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

随机推荐

  1. django学习-18.*args和**kwargs的用法和使用场景

    目录结构 1.前言 2.[*args]的用法 2.1.第一步:首先编写这样的函数[test1]. 2.2.第二步:给函数[test1]赋值相关入参值. 2.3.第三步:调用函数[test1],得到以下 ...

  2. Byte Buddy学习笔记

    本文转载自Byte Buddy学习笔记 简介 Byte Buddy是一个JVM的运行时代码生成器,你可以利用它创建任何类,且不像JDK动态代理那样强制实现一个接口.Byte Buddy还提供了简单的A ...

  3. vue路由理解

    vue路由:就是一个菜单的概念比如说有一个菜单栏,菜单栏上有很多按钮,当你点击一个按钮时会出现不同的页面,这就是vue路由

  4. @Transaction注解失效的几种场景

    一.@Transactional介绍 1.@Transactional注解可以作用于哪些地方? @Transactional 可以作用在接口.类.类方法上. 作用于类:表示所有该类的public方法都 ...

  5. Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  6. Go中的if-else判断

    目录 go中的if-else判断 一.语法 go中的if-else判断 一.语法 if 条件 { //符合上面条件的执行 } else if 条件{ //符合上面条件的执行 } else { // 不 ...

  7. nodejs+express+mongodb实现登录注册

    nodejs+express+mongodb实现登录注册 1 简介 登录注册功能使用nodejs+express+mongodb完成,其中对mongodb的操作使用mongoose完成,对mongod ...

  8. Go语言实现布谷鸟过滤器

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/453 介绍 在我们工作中,如果遇到如网页 URL 去重.垃圾邮件识别 ...

  9. MYSQL-SQLSERVER获取某个数据库的表记录数

    MYSQL: 1,可以使用MYSQL的系统表的记录数(亲测,有时候,会不准确,被坑了一把,如果还是想通过此方式实现查询表记录数,可以按照文章后的链接进行操作) use information_sche ...

  10. Go语言学习笔记——在本地建立一个官网查看

    命令行内运行 godoc -http=:8080 运行完成后打开浏览器输入网址:http://localhost:8080能看到一个和官网一模一样的网站,然后查看帮助文档