参考博客
创建minio
文件目录 下载安装包 wget https://dl.minio.io/server/minio/release/linux-amd64/minio
初始化minio 赋予下载minio文件执行权限
设置环境变量 # set minio environment export MINIO_ROOT_USER=fileadmin export MINIO_ROOT_PASSWORD=fileadmin
启动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 --zone=public --query-port=9000/tcp
设置minio后台启动 nohup /opt/minio/minio server /opt/minio/data --console-address ":62222" > /opt/minio/minio.log 2>&1 &
验证后台启动
[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}
下载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()); } } }