分布式文件系统介绍与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");
}
相关文章
|
24天前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
24天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
1月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
87 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
69 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
50 2
|
2月前
|
Java
用java实现Client和Server之间的互相通信
本文介绍了如何使用Java实现客户端和服务器之间的通信,包括服务器端创建ServerSocket、接受客户端连接、读取和发送消息,以及客户端创建Socket连接、发送和接收消息的完整过程。
63 0
用java实现Client和Server之间的互相通信
|
3月前
|
Java API Nacos
Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forge
Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forge
194 2
|
2月前
|
NoSQL Java 数据库
Java分布式锁
Java分布式锁
46 0
|
2月前
|
缓存 Java 数据库
JAVA分布式CAP原则
JAVA分布式CAP原则
69 0
|
4月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)