对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载-Java-IT技术博客

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

时间:2021-04-20 17:00:00 浏览: 字体: 放大 缩小


目录
  • 一、MinIO快速入门
    • 1. MinIO简介
    • 2. CentOS7更换成阿里云镜像
    • 3. 安装
      • 3.1 下载
      • 3.2 运行测试
    • 4. 配置脚本执行文件
      • 4.1 创建配置执行文件
      • 4.2 执行
  • 二、分布式MinIO快速入门
    • 1. 分布式MinIO快速入门
      • 1.1 分布式Minio有什么好处?
      • 1.2 数据保护
      • 1.3 高可用
      • 1.4 一致性
    • 2. 配置运行分布式Minio
      • 2.1 将access秘钥和secret秘钥export成环境变量
      • 2.2 启动分布式Minio实例
      • 2.3 配置成启动脚本
        • 2.3.1 创建配置执行文件
        • 2.3.2 执行
  • 三、纠删码(erasure code)
    • 1. 纠删码(erasure code)
      • 1.1 什么是纠删码erasure code?
      • 1.2 为什么纠删码有用?
      • 1.3 什么是位衰减bit rot保护?
  • 四、MinIO个人项目测试

一、MinIO快速入门

1. MinIO简介

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

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

2. CentOS7更换成阿里云镜像

image 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纠删码的设计目标是为了性能和尽可能的使用硬件加速。

image

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

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

四、MinIO个人项目测试

标签: 对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载对象存储服务minio安装部署分布布式分布式spring boot项目文件上传传下下载上传下载