基于Minio打造高可用 分布式文件系统

什么是对象存储?
An object 是二进制数据,有时也称为 Binary 大对象 (BLOB)。 Blob 可以是图像、音频文件、电子表格,甚至 二进制可执行代码。 像 MinIO 这样的对象存储平台提供了专用的 用于存储、检索和搜索 blob 的工具和功能。
MinIO 对象存储使用 buckets 来组织对象。 存储桶类似于文件系统中的文件夹或目录,其中每个 桶可以容纳任意数量的对象。 MinIO 存储桶提供 与 AWS S3 存储桶相同的功能。
例如,考虑一个托管网络博客的应用程序。 应用程序 需要存储各种 blob,包括丰富的多媒体,如视频和 图片。 MinIO 服务器上的对象结构可能类似于 下列的:
在这里插入图片描述
在这里插入图片描述
MinIO 是在AGPL3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API。 使用 MinIO 构建用于机器学习、分析和应用的高性能基础设施数据工作负载。
在这里插入图片描述
应用集群部署
为CentOS7开通服务器的ip_forward功能

cat >> /etc/sysctl.conf <<-'EOF'
net.ipv4.ip_forward=1
vm.max_map_count=655360
EOF
sysctl -p

创建Macvlan31网络,让每个容器都拥有独立IP

docker network create -d macvlan \
 --subnet=192.168.31.0/24 \
 --ip-range=192.168.31.0/24 \
 --gateway=192.168.31.1 \
 -o parent=ens33 \
macvlan31

创建三个Macvlan容器192.168.31.240-242,构建Macvlan应用集群

docker rm -f minio-240
docker rm -f minio-241
docker rm -f minio-242
rm -rf /data

docker run -d --name minio-240 \
--restart=always \
--network macvlan31  --ip=192.168.31.240 \
-v /data/n240/export1:/export1 \
-v /data/n240/export2:/export2 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=a1b2c3d4" \
minio/minio server http://192.168.31.24{0...2}/export{1...2}

docker run -d --name minio-241 \
--restart=always \
--network macvlan31  --ip=192.168.31.241 \
-v /data/n241/export1:/export1 \
-v /data/n241/export2:/export2 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=a1b2c3d4" \
minio/minio server http://192.168.31.24{0...2}/export{1...2}

docker run -d --name minio-242 \
--restart=always \
--network macvlan31  --ip=192.168.31.242 \
-v /data/n242/export1:/export1 \
-v /data/n242/export2:/export2 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=a1b2c3d4" \
minio/minio server http://192.168.31.24{0...2}/export{1...2}

minio高可用原理
MinIO 将对象分成块,并在每个块之间均匀分布驱动器在擦除集。 MinIO 可以继续无缝地服务于读取和尽管丢失了任何单个驱动器,但仍会发出写入请求。 在最高 冗余级别,MinIO 可以以最低的性能处理读取请求 尽管损失了多达一半 (N/2) 的总驱动器部署。
Dashboard
http://192.168.31.240:9000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接入代码
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>minio-sdk</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>
  <dependencies>
    <dependency>
      <groupId>io.minio</groupId>
      <artifactId>minio</artifactId>
      <version>7.0.2</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.8.0</version>
    </dependency>
  </dependencies>
</project>

接入代码

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.util.List;

import org.apache.commons.io.IOUtils;
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("http://192.168.31.240:9000", "1234567890", "1234567890");

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

            // 使用putObject上传一个文件到存储桶中。
            minioClient.putObject("test","/诗歌/再别康桥.txt", "d:/再别康桥.txt",null);
            System.out.println("文件上传成功");
            InputStream is = minioClient.getObject("test", "/诗歌/再别康桥.txt");
            List<String> strings = IOUtils.readLines(is, "UTF-8");
            strings.stream().forEach(s -> System.out.println(s));

        } catch(MinioException e) {
            System.out.println("Error occurred: " + e);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的老史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值