分布式文件系统介绍与minio介绍与使用(附minio java client 使用)(三)

简介: 分布式文件系统介绍与minio介绍与使用(附minio java client 使用)

3.2.6 基于nginx实现loadbalancer

upstream minio {
    server 192.168.3.14:9001;
    server 192.168.3.14:9002;
    server 192.168.3.14:9003;
    server 192.168.3.14:9004;
}
upstream console {
    ip_hash;
    server 192.168.3.14:50001;
    server 192.168.3.14:50002;
    server 192.168.3.14:50003;
    server 192.168.3.14:50004;
}
server {
    listen 9000;
    listen [::]:9000;
    server_name localhost;
    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific
    value
        client_max_body_size 0;
    # To disable buffering
    proxy_buffering off;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 300;
        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;
        proxy_pass http://minio;
    }
}
server {
    listen 50000;
    listen [::]:50000;
    server_name localhost;
    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific
    value
        client_max_body_size 0;
    # To disable buffering
    proxy_buffering off;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-NginX-Proxy true;
        proxy_connect_timeout 300;
        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;
        proxy_pass http://console;
    }
}

4.Minio客户端使用

🏠 文档地址:https://min.io/docs/minio/linux/reference/minio-mc.html

MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。

4.1 部署客户端mc

平台 CPU架构 URL
GNU/Linux 64-bit Intel http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
# 1.下载mc文件
wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
# 2.打开权限
chmod +x mc
# 3.查看帮助指令
./mc --help
# 4.将mc移动至环境变量使用
mv mc /usr/local/sbin/
平台 CPU架构 URL
Microsoft Windows 64-bit Intel http://dl.minio.org.cn/client/mc/release/windows-amd64/

4.2 配置mc

mc 将所有的配置信息都存储在 ~/.mc/config.json 文件中

# 查询mc host配置
mc config host ls
# 添加minio服务
mc config host add minio-server http://192.168.3.14:9000 admin 12345678
# 删除host
mc config host remove minio-server

4.3 mc命令使用

命令 说明
ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监视文件和对象的事件。
policy 管理访问策略。
config 管理mc配置文件。

4.3.1 上传下载

# 查询minio服务上的所有buckets(文件和文件夹)
mc ls minio-server
# 下载文件
mc cp minio-server/tulingmall/fox/fox.jpg /tmp/
#删除文件
mc rm minio-server/tulingmall/fox/fox.jpg
#上传文件
mc cp zookeeper.out minio-server/tulingmall/

4.3.2 Bucket管理

# 创建bucket
mc mb minio-server/bucket01
# 删除bucket
mc rb minio-server/bucket02
# bucket不为空,可以强制删除 慎用
mc rb --force minio-server/bucket01
# 查询bucket03磁盘使用情况
mc du minio-server/bucket03

4.4 mc admin使用

MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务。

service   服务重启并停止所有MinIO服务器
update    更新更新所有MinIO服务器
info    信息显示MinIO服务器信息
user    用户管理用户
group     小组管理小组
policy    MinIO服务器中定义的策略管理策略
config    配置管理MinIO服务器配置
heal    修复MinIO服务器上的磁盘,存储桶和对象
profile   概要文件生成概要文件数据以进行调试
top     顶部提供MinIO的顶部统计信息
trace     跟踪显示MinIO服务器的http跟踪
console   控制台显示MinIO服务器的控制台日志
prometheus  Prometheus管理Prometheus配置
kms     kms执行KMS管理操作

4.4.1 用户管理

mc admin user --help
# 新建用户
mc admin user add minio-server fox
mc admin user add minio-server fox02 12345678
# 查看用户
mc admin user list minio-server
# 禁用用户
mc admin user disable minio-server fox02
# 启用用户
mc admin user disable minio-server fox02
# 查看用户信息
mc admin user info minio-server fox
# 删除用户
mc admin user remove minio-server fox02

4.4.2 策略管理

policy命令,用于添加,删除,列出策略,获取有关策略的信息并为MinIO服务器上的用户设置策略。

mc admin policy --help
# 列出MinIO上的所有固定策略
mc admin policy list minio-server
# 查看plicy信息
mc admin policy info minio-server readwrite

📍 添加新的策略:编写策略文件:vim /root/tulingmall.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::tulingmall"
            ]
        },{
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::tulingmall/*"
            ]
        }
    ]
}

将tulingmall.json添加到策略数据库:

# 添加新的策略
mc admin policy add minio-server tulingmall-admin /root/tulingmall.json
mc admin policy list minio-server
mc admin user add minio-server fox03 12345678
# 设置用户的访问策略
mc admin policy set minio-server tulingmall-admin user=fox03

5.SDK-Minio Java Client使用

MinIO Java Client SDK提供简单的API来访问任何与Amazon S3兼容的对象存储服务。

🏠 官方demo: https://github.com/minio/minio-java

🏠 官方文档:https://min.io/docs/minio/linux/developers/java/minio-java.html

引入依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.0</version>
</dependency>
<dependency>
    <groupId>me.tongfei</groupId>
    <artifactId>progressbar</artifactId>
    <version>0.5.3</version>
</dependency>
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.8.1</version>
</dependency>

5.1 文件上传

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
 * @author 狐狸半面添
 * @create 2023-02-05 17:06
 */
public class FileUploadDemo {
    public static void main(String[] args)
            throws IOException, NoSuchAlgorithmException, InvalidKeyException {
        try {
            // Create a minioClient with the MinIO server playground, its access key and secret key.
            MinioClient minioClient =
                    MinioClient.builder()
                            // 指定连接的ip和端口
                            .endpoint("http://192.168.65.129:9000")
                            // 指定 访问秘钥(也称用户id) 和 私有秘钥(也称密码)
                            .credentials("admin", "12345678")
                            .build();
            // 创建bucket
            String bucketName = "sangxin-fox";
            boolean exists =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!exists) {
                // 不存在,创建bucket
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
            // 上传文件
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket(bucketName)
                            // 指定上传到minio的保存文件名(MyC文件夹下,文件夹不存在时会自动创建)
                            .object("MyC/C语言.pdf")
                            // 指定需要上传的文件地址
                            .filename("D:\\SoftwareEngineering\\LearningFile\\C语言\\C语言.pdf")
                            .build());
            System.out.println("上传文件成功");
        } catch (MinioException e) {
            System.out.println("Error occurred: " + e);
            System.out.println("HTTP trace: " + e.httpTrace());
        }
    }
}

5.2 文件下载

import io.minio.DownloadObjectArgs;
import io.minio.MinioClient;
/**
 * @author 狐狸半面添
 * @create 2023-02-05 17:12
 */
public class DownLoadDemo {
    public static void main(String[] args) {
        // Create a minioClient with the MinIO server playground, its access key and secret key.
        MinioClient minioClient =
                MinioClient.builder()
                        // 指定连接的ip和端口
                        .endpoint("http://192.168.65.129:9000")
                        // 指定 访问秘钥(也称用户id) 和 私有秘钥(也称密码)
                        .credentials("admin", "12345678")
                        .build();
        // Download object given the bucket, object name and output file name
        try {
            minioClient.downloadObject(
                    DownloadObjectArgs.builder()
                            // 指定 bucket 存储桶
                            .bucket("sangxin-fox")
                            // 指定 哪个文件
                            .object("MyC/C语言.pdf")
                            // 指定存放位置与名称
                            .filename("D:\\c语言.pdf")
                            .build());
            System.out.println("下载文件成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5.3 删除文件

public static void delete(String bucket,String filepath)throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    try {
        minioClient.removeObject(
            RemoveObjectArgs.builder().bucket(bucket).object(filepath).build());
        System.out.println("删除成功");
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
        System.out.println("HTTP trace: " + e.httpTrace());
    }
}
public static void main(String[] args)throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    //  upload();
    delete("testbucket","1.mp4");
    delete("testbucket","avi/1.avi");
}

5.4 查询文件

public static void getFile(String bucket,String filepath,String outFile)throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    try {
        try (InputStream stream = minioClient.getObject(
            GetObjectArgs.builder()
            .bucket(bucket)
            .object(filepath)
            .build());
             FileOutputStream fileOutputStream = new FileOutputStream(new File(outFile));
            ) {
            // Read data from stream
            IOUtils.copy(stream,fileOutputStream);
            System.out.println("下载成功");
        }
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
        System.out.println("HTTP trace: " + e.httpTrace());
    }
}
public static void main(String[] args)throws IOException, NoSuchAlgorithmException, InvalidKeyException {
    upload();
    //  delete("testbucket","1.mp4");
    //  delete("testbucket","avi/1.avi");
    getFile("testbucket","avi/1.avi","D:\\develop\\minio_data\\1.avi");
}
相关文章
|
8月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
280 5
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
7月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2267 57
|
6月前
|
存储 Java API
MinIO Java SDK 7.1.4 升级到 8.5.17 需要注意什么
现在我需要你帮我分析对比这个两个sdk在对外的接口设计上是否有不兼容的变更
484 5
|
9月前
|
存储 Java 文件存储
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
本文介绍了如何基于Spring Boot 3和MinIO实现分布式文件存储。随着应用规模扩大,传统的单机文件存储方案难以应对大规模数据和高并发访问,分布式文件存储系统成为更好的选择。文章详细讲解了MinIO的安装、配置及与Spring Boot的整合步骤,包括Docker部署、MinIO控制台操作、Spring Boot项目中的依赖引入、配置类编写及工具类封装等内容。最后通过一个上传头像的接口示例展示了具体的开发和测试过程,强调了将API操作封装成通用工具类以提高代码复用性和可维护性的重要性。
1936 7
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
|
11月前
|
存储 人工智能 算法
解锁分布式文件分享的 Java 一致性哈希算法密码
在数字化时代,文件分享成为信息传播与协同办公的关键环节。本文深入探讨基于Java的一致性哈希算法,该算法通过引入虚拟节点和环形哈希空间,解决了传统哈希算法在分布式存储中的“哈希雪崩”问题,确保文件分配稳定高效。文章还展示了Java实现代码,并展望了其在未来文件分享技术中的应用前景,如结合AI优化节点布局和区块链增强数据安全。
|
11月前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
209 9
|
11月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
355 7
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
239 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁

热门文章

最新文章