参考博客

创建minio文件目录

cd /opt/
mkdir minio

下载安装包

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

初始化minio

cd /opt/minio/
touch minio.log

赋予下载minio文件执行权限

chmod 777 minio

设置环境变量

vim /etc/profile
# set minio environment
export MINIO_ROOT_USER=fileadmin
export MINIO_ROOT_PASSWORD=fileadmin
source /etc/profile

启动minio

–console-address “:port” 指定端口

./minio server /opt/minio/data --console-address ":62222"

/opt/minio/data为文件数据目录

放开指定端口的防火墙配置

开放指定端口

firewall-cmd --zone=public --add-port=62222/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent

开放指定ip来源访问端口

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.XX.XX.195" port port="62222" protocol="tcp" accept';
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.XX.XX.25" port protocol="tcp" port="9000" accept'

刷新防火墙配置

firewall-cmd --reload

查看防火墙配置

firewall-cmd --list-all

可验证防火墙是否已开放指定端口访问

firewall-cmd --zone=public --query-port=9000/tcp

设置minio后台启动

vim start.sh
nohup /opt/minio/minio server  /opt/minio/data --console-address ":62222" > /opt/minio/minio.log 2>&1 &

验证后台启动

ps -ef | grep minio
[root@localhost minio]# ps -ef | grep minio;
root 4969 1 5 15:37 pts/0 00:00:00 /opt/minio/minio server /opt/minio/data --console-address :62222
root 5017 4898 0 15:38 pts/0 00:00:00 grep --color=auto minio

Minio 集群配置

minio对象存储四台服务器部署4个节点集群

注意:当从单minio构建集群minio,原单minio的数据data目录必须重建,否则启动报错!
INFO: Unable to use the drive http://10.xx.xx.96:9000/xiaomu_logs/minio/data: drive not found, will be retried INFO: Waiting for a minimum of 1 drives to come online

创建目录

mkdir -p /xiaomu_logs/minio/{conf,data}
  • conf 配置目录
  • data 文件目录

下载minio文件

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

创建执行启动脚本 minio_run.sh

#!/bin/bash

# 新版本使用MINIO_ROOT_USER和MINIO_ROOT_PASSWORD来配置账号密码
export MINIO_ROOT_USER=username
export MINIO_ROOT_PASSWORD=password

nohup /xiaomu_logs/minio/conf/minio server \
--config-dir /etc/minio \
--address "10.xx.xx.96:9000" \
--console-address "10.xx.xx.96:62222" \
http://10.xx.xx.95/xiaomu_logs/minio/data \
http://10.xx.xx.96/xiaomu_logs/minio/data \
> /xiaomu_logs/minio/minio.log 2>&1 &

授权minio文件和启动脚本文件

chmod u+x minio
chmod u+x minio_run.sh

TIP:

  • http://10.xx.xx.95:部署minio实例的服务器地址
  • /xiaomu_logs/minio/data: 创建的minio的文件目录位置
  • --config-dir:minio集群配置文件(此博客中未详细描述)

配置minio为服务启动

TODO

Windows客户端连接访问

Minio客户端快速入门指南

Minio官方下载地址

C:\mc.exe alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD

Windows上通过cmd命令行,通过mc客户端连接minio命令

通过Nginx代理Minio

注意:/oss/,此处设置仅对外通过域名地址访问。若通过域名上传,仅域名地址。

upstream

upstream upstreamMinio {
# minio的api服务端口地址
server 192.168.0.1:9000 weight=5 max_fails=3 fail_timeout=15s;
keepalive 2000;
}

vconf

location /oss/ {
proxy_set_header Host $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;
# 注意:访问地址后缀补充`/`,目的过滤访问前缀`/oss/`名称
proxy_pass http://upstreamMinio/;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}

开启nginx日志,观察在集群环境下的负载均衡是否生效

upstream配置

upstream minio{
server 10.xx.xx.96:9000 max_fails=2 weight=100 fail_timeout=3s;
server 10.xx.xx.95:9000 max_fails=2 weight=50 fail_timeout=3s;
keepalive 300;
}

log日志模板配置在server节点上方

log_format custom '{"timestamp":"$time_iso8601",'
'"host": "$server_addr",'
'"client": "$remote_addr",'
'"server": "$upstream_addr",'
'"status":"$status",'
'"responsetime": $request_time,'
'"size": $body_bytes_sent,'
'"domain": "$host",'
'"url":"$request_uri",'
'"referer": "$http_referer",'
'"agent": "$http_user_agent",'
'"x_forwarded_for":"$http_x_forwarded_for"}';

server节点中location配置

location /oss/ {
access_log /usr/local/openresty/nginx/logs/minio_access.log custom;
proxy_pass http://minio/;
}

Minio SDK

Java

<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>

DEMO

import io.minio.*;
import io.minio.errors.MinioException;

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

public class MinioExample {

public static void main(String[] args) {
try {
// 1. 创建 MinIO 客户端
MinioClient minioClient = MinioClient.builder()
.endpoint("http://192.168.0.68:9000") // 替换为你的 MinIO 服务器地址
.credentials("ljBVNBvOsrG8pTJlyhpq", "MUKNgdf1UNxNk3D6niF5gvODkuyuW81ZN6LqnKT0") // 替换为你的访问密钥
.build();

String bucketName = "test02";
String objectName = "mc.exe"; // 上传的文件名
String filePath = "C:\\Users\\MUMU\\Downloads\\mc.exe"; // 本地文件路径

// 2. 确保存储桶存在(不存在则创建)
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
System.out.println("存储桶 " + bucketName + " 已创建.");
} else {
System.out.println("存储桶 " + bucketName + " 已存在.");
}

// 3. 上传文件到存储桶
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.filename(filePath)
.build());
System.out.println("文件已成功上传至 " + bucketName + "/" + objectName);

// 4. 设置存储桶为公共访问
String policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}";
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(policy).build());

// 5. 构造访问 URL
String url = "http://192.168.0.68:9000/" + bucketName + "/" + objectName; // 替换为你的 MinIO 服务器地址
System.out.println("文件的访问 URL: " + url);

} catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
System.out.println("发生错误: " + e.getMessage());
}
}

}