一、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. git log的常用命令

    git config --global alias.lg "log --graph --oneline --pretty='%Cred%h%Creset -%C(yellow)%d%Cblu ...

  2. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  3. 1060 Are They Equal——PAT甲级真题

    1060 Are They Equal If a machine can save only 3 significant digits, the float numbers 12300 and 123 ...

  4. 链表算法题二,还原题目,用debug调试搞懂每一道题

    文章简述 大家好,本篇是个人的第4篇文章. 承接第3篇文章<开启算法之路,还原题目,用debug调试搞懂每一道题>,本篇文章继续分享关于链表的算法题目. 本篇文章共有5道题目 一,反转链表 ...

  5. Java基础语法:final修饰符

    一.final类 描述: 用'final'修饰的类不能被继承,没有子类. 例如,我们是无法写一个类去继承String类,然后对String类型扩展的,因为API中已经将String类定义为'final ...

  6. 第35天学习打卡(输入框 TextField监听 简易计算器,组合+内部类回顾复习 画笔 鼠标监听 窗口监听 键盘监听)

    1.输入框 TextField监听  package com.kuang.lesson02; ​ import java.awt.*; import java.awt.event.ActionEven ...

  7. 安装node环境以及cnpm

    其实我老早以前就发现 node 版本太高也不行 以往的版本下载地址: https://nodejs.org/zh-cn/download/releases/ 下载并解压到 /usr/local/ 下 ...

  8. JAVA网络编程基本功之Servlet与Servlet容器

    Servlet与Servlet容器关系 Servlet 比较这两个的区别, 就得先搞清楚Servlet 的含义, Servlet (/ˈsərvlit/ ) 翻译成中文就是小型应用程序或者小服务程序, ...

  9. vue3中watch函数

    watch 监听普通类型 let count = ref(1); const changeCount = () => { count.value+=1 }; watch(count, (newV ...

  10. 企业安全_DNS流量监控的技术选型

    方案1 Windows server n ---> packbeat ---> logstash ---> kafka | ┗ ---------> elasticsearch ...