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


    一、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
    
    function start() {
        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 &
    }
    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
    

    2.3.2 执行

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

    三、纠删码(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,感兴趣的同学请FQgoogle。

    1.2 为什么纠删码有用?

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

    image

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

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

    相关链接

    MinIO个人项目测试

    image Gitee项目地址
    image GitHub项目地址

    MinIO其它文章

    image MinIO分布式集群的扩展方案及实现

  • 相关阅读:
    如何判断某个设备文件是否存在
    shell中export理解误区
    linux命令之tail
    国内较快的gnu镜像:北京交通大学镜像
    Cmake的交叉编译
    linux 命令之grep
    makefile之变量赋值
    makefile之VPATH和vpath的使用
    arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值
    Jlink 软件断点和硬件断点
  • 原文地址:https://www.cnblogs.com/lishen2021/p/14681182.html
Copyright © 2020-2023  润新知