minio开发需注意的事项(springboot)

minio开发需注意的事项(springboot)spring-cloud-admin-minio
minio 分布式部署现象学的创始人
3.0文明
1 准备 4 台服务器
节点应⽤⽬录⽂件存储⽬录脚本⽬录⽇志存储⽬录
192.168.0.100/usr/local/minio/bin/usr/local/minio/upload/usr/local/minio/run/usr/local/minio/log
192.168.0.101/usr/local/minio/bin/usr/local/minio/upload/usr/local/minio/run/usr/local/minio/log
192.168.0.102/usr/local/minio/bin/usr/local/minio/upload/usr/local/minio/run/usr/local/minio/log
192.168.0.103/usr/local/minio/bin/usr/local/minio/upload/usr/local/minio/run/usr/local/minio/log
注: 在服务器数量少于 4 台的情况下,可以做伪集部署,此时只需要修改端⼝号即可:
192.168.0.100:9000
192.168.0.100:9001
192.168.0.100:9002
192.168.0.100:9003
2 创建⽬录
4 台服务器都执⾏以下命令:
# mkdir -p /usr/local/minio/{bin,upload,run,log}
3 下载 minio
把下载的 minio 分别存放到 4 台服务器的 /usr/local/minio/bin ⽬录。
4 创建启动脚本
4 台服务器都执⾏以下命令:
# vim /usr/local/minio/run/minio-run.sh
5 编辑启动脚本
5.1 节点 192.168.0.100 的脚本内容
日本参议院选举
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password
/usr/local/minio/bin/minio server --address "192.168.0.100:9000" --console-address ":7000" \
192.168.0.100:9000/usr/local/minio/upload \
192.168.0.101:9000/usr/local/minio/upload \
192.168.0.102:9000/usr/local/minio/upload \
192.168.0.103:9000/usr/local/minio/upload \
> /usr/local/minio/log/run.log
5.2 节点 192.168.0.101 的脚本内容
#!/bin/bash纳税人权益网
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password
/usr/local/minio/bin/minio server --address "192.168.0.101:9000" --console-address ":7000" \
192.168.0.100:9000/usr/local/minio/upload \
192.168.0.101:9000/usr/local/minio/upload \
192.168.0.102:9000/usr/local/minio/upload \
192.168.0.103:9000/usr/local/minio/upload \
> /usr/local/minio/log/run.log
5.3 节点 192.168.0.102 的脚本内容
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password
/usr/local/minio/bin/minio server --address "192.168.0.102:9000" --console-address ":7000" \
192.168.0.100:9000/usr/local/minio/upload \
192.168.0.101:9000/usr/local/minio/upload \
192.168.0.102:9000/usr/local/minio/upload \
192.168.0.103:9000/usr/local/minio/upload \
> /usr/local/minio/log/run.log
5.4 节点 192.168.0.103 的脚本内容
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password
/usr/local/minio/bin/minio server --address "192.168.0.103:9000" --console-address ":7000" \ 192.168.0.100:9000/usr/local/minio/upload \
192.168.0.101:9000/usr/local/minio/upload \
192.168.0.102:9000/usr/local/minio/upload \
192.168.0.103:9000/usr/local/minio/upload \
> /usr/local/minio/log/run.log
6 授权 minio ⽬录
4 台服务器都执⾏以下命令:
# chmod +x -R /usr/local/minio
7 将 minio 加⼊系统服务
4 台服务器都执⾏以下命令:
# vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=docs.minio.io/
[Service]
WorkingDirectory=/usr/local/minio/run/
ExecStart=/usr/local/minio/run/minio-run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
# chmod +x /usr/lib/systemd/system/minio.service
8 启动 minio 服务
4 台服务器都执⾏以下命令:
# systemctl daemon-reload
# systemctl start minio
9 使⽤ nginx 负载均衡
在⽇志⾥增加 "$upstream_status" "$upstream_addr" 以便打印真实的服务端 IP 地址:
http {
include      pes;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_status" "$upstream_addr"';
}
9.1 后台调⽤ endpoint
在 f ⽂件⾥增加如下配置:
upstream lb_minio {
server 192.168.0.100:9000;
server 192.168.0.101:9000;
server 192.168.0.102:9000;
server 192.168.0.103:9000;
}
server {
listen 9000;
server_name localhost;
access_log  logs/minio.access.log  main;
error_log  log;
location / {
proxy_set_header  X-Real-IP $remote_addr;
proxy_set_header  X-Forwarded-Host  $host:$server_port;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header  X-Forwarded-Proto  $http_x_forwarded_proto;
中国机电供求信息网
proxy_set_header  Host $http_host;
proxy_pass lb_minio;
}
}
9.2 前端访问 console
在 f ⽂件⾥增加如下配置:
upstream lb_minio_console {
server 192.168.0.100:7000;
server 192.168.0.101:7000;
server 192.168.0.102:7000;
server 192.168.0.103:7000;
}
server {
listen 7000;
server_name localhost;
access_log  logs/minio.access.log  main;
error_log  log;
location / {
proxy_pass lb_minio_console;
}
}
FAQ
minio 服务启动失败
查看服务⽇志:
# journalctl -u minio
ERROR Unable to initialize backend: format.json file: expected format-type: fs, found: xl
删除⽂件存储⽬录⾥的 .minio.sys⽂件:
# ls -la
total 0
drwxr-xr-x. 3 root root  24 Jan 12 11:53 .
drwxr-xr-x. 6 root root  53 Jan 12 11:08 ..
drwxr-xr-x. 9 root root 125 Jan 12 14:14 .minio.sys
# rm -rf .minio.sys
minio 开发需注意的事项
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.4</version>
</dependency>
升级 okhttp3
okhttp3 的版本不能低于 4.8.1,升级的时候,只需要在⽗模块的 properties ⾥配置 okhttp3 版本即可。    <properties>
<okhttp3.version>4.9.3</okhttp3.version>
</properties>
源码: .\io\minio\minio\8.3.4\minio-8.3.4.jar!\io\minio\S3Base.class
static {
try {
} catch (NoSuchMethodError var1) {
throw new RuntimeException("Unsupported OkHttp library found. Must use okhttp >= 4.8.1", var1);    }
DEFAULT_CONNECTION_TIMEOUT = Millis(5L);
TRACE_QUERY_PARAMS = ImmutableSet.of("retention", "legal-hold", "tagging", "uploadId");
}
命名 bucket 的名称
bucket 的名称必须满⾜正则表达式: ^[a-z0-9][a-z0-9\\.\\-]+[a-z0-9]$
源码: .\io\minio\minio\8.3.4\minio-8.3.4.jar!\io\minio\BucketArgs.class
protected void validateBucketName(String name) {
this.validateNotNull(name, "bucket name");
if (name.length() >= 3 && name.length() <= 63) {
String msg;
if (ains("..")) {
msg = "bucket name cannot contain successive periods. For more information refer docs.aws.amazon/AmazonS3/latest/dev/BucketRestrictions.html";
throw new IllegalArgumentException(name + " : " + msg);
} else if (!name.matches("^[a-z0-9][a-z0-9\\.\\-]+[a-z0-9]$")) {
msg = "bucket name does not follow Amazon S3 standards. For more information refer docs.aws.amazon/AmazonS3/latest/dev/BucketRestrictions.html";        throw new IllegalArgumentException(name + " : " + msg);
}
} else {
throw new IllegalArgumentException(name + " : bucket name must be at least 3 and no more than 63 characters long");
}
}
正确的命名:
.bucket("example.minio")
.bucket("example-minio")
.bucket("example.minio-bucket")三维建模
.bucket("example-minio.bucket")
命名 object 的名称
object ⽅法会根据层级⾃动创建⽬录。
.object("example.jpg")
.object("/example.jpg")
.object("level1/level2/example.jpg")
.object("/level1/level2/example.jpg")
指定 ContentType
上传⽂件的时候,尽量指定 ContentType,如果不指定的话,ContentType 默认为: application/octet-stream
源码: .\io\minio\minio\8.3.4\minio-8.3.4.jar!\io\minio\PutObjectArgs.class
public String contentType() throws IOException {
String contentType = tType();
return contentType != null ? contentType : "application/octet-stream";
}
FilePart(webflux)
List<String> contentTypeList = file.headers().get("Content-Type");
.contentType((contentTypeList == null || contentTypeList.isEmpty()) ? null : (0))
MultipartFile(web)
.ContentType())
nginx 传输⽂件的限制
nginx 默认⽂件传输的⼤⼩是 1M,传输超过 1M 的⽂件会报异常: 413 Request Entity Too Large,此时可以在 http{ } 或 server{ } 或 location{ } 中添加以下配置:
client_body_buffer_size 10m;
client_max_body_size 10m;
http{ }: 作⽤于全局 nginx
server{ }: 作⽤于当前 server
location{ }: 作⽤于当前路由

本文发布于:2024-09-21 08:45:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/688446.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:需要   脚本   启动   传输   时候   服务
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议