云计算 / 存储系统

分布式对象存储服务minio安装部署及使用

浅时光 · 11月15日 · 2020年 1788次已读

一、MinIO简介

MinIO是在Apache License v2.0下发布的高性能对象存储。它的API与Amazon S3云存储服务兼容。使用MinIO为机器学习、分析和应用数据工作负载构建高性能基础设施。Minio使用纠删码erasure cod文章来源(Source):https://www.dqzboy.come和校验和checksum来保护数据免受硬件故障和数据损坏。即便您丢失一半数量(N/2文章来源(Source):https://www.dqzboy.com)的硬盘,您仍然可以恢复数据。开发语言:Golang

官方网站:https://min.io/

二、单机部署

文章来源(Source):https://www.dqzboy.com

1、容器化方式部署

#创建持久化目录
~]# mkdir /home/minio
~]# mkdir /home/minio/data
~]# mkdir /home/minio/config

#启动容器服务
~]# docker run --restart=always -p 9000:9000 --name minio -e MINIO_ACCESS_KEY=admin123 -e MINIO_SECRET_KEY=admin -v /home/minio/data:/data -v /home/minio/config:/root/.minio -d minio/minio server /data 

#参数说明
MINIO_ACCESS_KEY:登入用KEY
MINIO_SECRET_KEY:登入秘钥
--restart=always:docker服务重启后,容器服务也跟随重启

2、二进制方式部署

~]# wget https://dl.minio.io/server/minio/release/linux-amd64/minio
~]# chmod +x minio

# 自定义MINIO_ACCESS_KEY和MINIO_SECRET_KEY
~]# export MINIO_ACCESS_KEY=admin
~]# export MINIO_SECRET_KEY=admin123
~]# ./minio server /mnt/data
分布式对象存储服务minio安装部署及使用-浅时光博客
以后台方式启动
~]# vim minio_start.sh
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
nohup ./minio server /mnt/data > /mnt/data/minio.log 2>&1 &

~]# chmod +x minio_start.sh
~]# ./minio_start.sh
添加到开机自启动
~]# cd /etc/rc.d/init.d/
init.d]# vim autostart.sh
#!/bin/bash
#chkconfig: 2345 10 90
#description:minio service
/root/minio_start.sh

init.d]# chmod +x autostart.sh
init.d]# chkconfig --add autostart.sh 
init.d]# chkconfig autostart.sh on
init.d]# chkconfig --list|grep autostart.sh
自定义服务监听端口
~]# vim minio_start.sh
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
nohup ./minio server --address 192.168.66.221:9001 /mnt/data > /mnt/data/minio.log 2>&1 &

3、MinIO客户端部文章来源(Source):https://www.dqzboy.com

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help

4、单节点多磁盘部署

在启动 MinIO 时,若传入参数是多个目录,则会以纠删码的形式运行,即具备高可靠性意义。即在一个服务器(单节点)上对,多个磁文章来源(Source):https://www.dqzboy.com盘上运行 MinIO

  • 注意:数量不得小于4个
#先创建目录
~]# mkdir /mnt/data{1..4}

~]# vim minio_start.sh
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
nohup ./minio server --address 192.168.66.221:9001 /mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4 > /mnt/minio.log 2>&1 &

三、集群部署

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

minio分布式部署,访问随意一个节点,都会自动根据负载来请求空闲的节点文章来源(Source):https://www.dqzboy.com

分布式Minio有什么好处?

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

数据保护

分布式Minio采用 纠删码来防范多个节点宕机和位衰减bit rot

分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

高可用

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

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

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

一致性

Minio在分布式和单机模式下,所有读写文章来源(Source):https://www.dqzboy.com操作都严格遵守read-after-write一致性模型。

纠删码概念

二进制部署

  • 部署4主机,每机2块磁盘(drives),4节点都需要执行下面的命令

注意:

  • 分布式Minio里所有的节点需要有同样的文章来源(Source):https://www.dqzboy.comaccess秘钥和secret秘文章来源(Source):https://www.dqzboy.com钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥secret秘钥export成环境变量。
  • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
  • 下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
  • 分布式Minio里的节点时间差不能超过3秒
~]# wget https://dl.minio.io/server/minio/release/linux-amd64/minio
~]# chmod +x minio
~]# vim minio_cluster.sh
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
nohup ./minio server --address 192.168.66.221:9001 http://192.168.66.221/mnt/data1 http://192.168.66.221/mnt/data2 \
               http://192.168.66.222/mnt/data1 http://192.168.66.222/mnt/data2 \          
               http://192.168.66.223/mnt/data1 http://192.168.66.223/mnt/data2 \
               http://192.168.66.224/mnt/data1 http://192.168.66.224/mnt/data2 > /mnt/data/minio.log 2>&1 &

~]# chmod +x minio_cluster.sh
~]# ./minio_cluster.sh

四、MinIO使用

1、创建Bucker

分布式对象存储服务minio安装部署及使用-浅时光博客
分布式对象存储服务minio安装部署及使用-浅时光博客
分布式对象存储服务minio安装部署及使用-浅时光博客
分布式对象存储服务minio安装部署及使用-浅时光博客
分布式对象存储服务minio安装部署及使用-浅时光博客

2、Java项目

以下示例来自minion官方文档

2.1:文件上传

  • 本示例程序连接到一个对象存储服务,创建一个存储桶并上传一个文件到该桶中。
  • 你需要有存储服务的三个参数才能连接到该服务。
参数说明
Endpoint对象存储服务的URL
Access KeyAccess key就像用户ID,可以唯一标识你的账户
Secret KeySecret key是你账户的密码
  • 在下面的例子的中,我们将使用一个运行在https://play.min.io的免费文章来源(Source):https://www.dqzboy.com托管的MinIO服务。你可以随意使用此服务进行测试和开发。此示例中显示的访问凭据是公开的。

2.2:FileUploader.java

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;

import org.xmlpull.v1.XmlPullParserException;

import io.minio.MinioClient;
import io.minio.errors.MinioException;

public class FileUploader {
  public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
    try {
      // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
      MinioClient minioClient = new MinioClient("https://play.min.io", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");

      // 检查存储桶是否已经存在
      boolean isExist = minioClient.bucketExists("asiatrip");
      if(isExist) {
        System.out.println("Bucket already exists.");
      } else {
        // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
        minioClient.makeBucket("asiatrip");
      }

      // 使用putObject上传一个文件到存储桶中。
      minioClient.putObject("asiatrip","asiaphotos.zip", "/home/user/Photos/asiaphotos.zip");
      System.out.println("/home/user/Photos/asiaphotos.zip is successfully uploaded as asiaphotos.zip to `asiatrip` bucket.");
    } catch(MinioException e) {
      System.out.println("Error occurred: " + e);
    }
  }
}

2.3:编译FileUploader

javac -cp "minio-3.0.9-all.jar"  FileUploader.java

2.4:运行FileUploader

java -cp "minio-3.0.9-all.jar:." FileUploader
/home/user/Photos/asiaphotos.zip is successfully uploaded as asiaphotos.zip to `asiatrip` bucket.

mc ls play/asiatrip/
分布式对象存储服务minio安装部署及使用-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.385 秒 | 查询 111 次 | 内存 18.70 MB