网站首页 > 精选教程 正文
前述
- 本次将使用最新的minio版本2022-09。自minio2022-06之后,minio的数据存储格式发生了变化。且已经不再兼容之前的版本。
- 备份后,可通过mc命令,将数据从原来的集群迁移到新的集群。
- 本次将直接采用swarm集群,让minio及nginx在swam集群内实现通讯。
- 镜像可以使用minio/minio(官方)或bitnami/minio(docker认证的第三方),这两种的参数,略有不同。
- 最后使用nginx实现minio的访问。
- 建议机器有限,因为磁盘必须4及以上个,所以这儿选择使用两个宿主机。可根据要求进行扩展。注意,如果原集群有4个磁盘的话,再次扩展,必须也是4个磁盘,因为只有这样,才可以形成相同的纠错码。
配置建议
根据官方https://github.com/minio/minio/blob/master/docs/distributed/SIZING.md的配置列表,建议配置如下。
服务器指机器的数量,驱动器指磁盘的数量。
容量受限的环境,MinIO 可以工作,但不推荐用于生产。
生产的最低配置:
如果一个或多个磁盘在 PutObject 或 NewMultipartUpload 操作开始时处于脱机状态,则该对象将自动添加额外的数据保护位,以便为这些对象提供高达 50% 磁盘数量的常规安全性。这将允许在超出写入容限的系统上进行正常的写入操作。
这意味着在上面的示例中,系统将始终写入 4 个奇偶校验分片,代价是磁盘使用率略高。
规划
(由于本人宿主机有限,以下环境仅使供学习使用)。
主机/ip | 程序 | 端口 | 目录 |
ubuntu21/192.168.56.21 | minio 2022-9-1 Nginx 1.23.1 | 9000 9001 80 | /app/minio/data{1..2} |
ubuntu22/192.168.56.22 | Minio 2022-9-1 | 9000 9001 | /app/minio/data{1..2} |
准备
- 所有主机安装docker,请直接参考docker官网:https://docs.docker.com/engine/install/ubuntu/。
- 所有主机,创建相同目录如/app/minio。
- 所有主机,pull最新镜像:docker pull minio/minio:RELEASE.2022-09-01T23-53-36Z。
- 如果开启的防火墙,请开放端口:# ufw allow 2377 和 ufw allow 7946
docker集群
在ubuntu21执行:
# docker swarm init --advertise-addr 192.168.56.21
拷贝上图的docker swarm命令,并在ubuntu22上执行:
# docker swarm join --token \
SWMTKN-1-1vmhn9t82kf2i4l11zditp52mldu6h3egbfb1ezep5c8o0amlg-6kvpgqa7evp13tribe8iabhhl 192.168.56.21:2377
This node joined a swarm as a worker.
在ubuntu21查看docker集群
# docker node ls
创建overlaym网卡,在ubuntu21上执行
# docker network create -d overlay --attachable myingress
minio启动脚本
在ubuntu21的app/minio目录下,创建启动脚本start.sh,
并添加可执行权限: chmod +x start.sh
#!/bin/bash
name=minio21
docker stop $name
docker rm $name
docker run --name $name -d \
--network myingress \
-p 9000:9000 \
-p 9001:9001 \
-e TZ=Asia/Shanghai \
-e MINIO_ROOT_USER=minio \
-e MINIO_ROOT_PASSWORD=12345678 \
-v ${PWD}/datas:/datas \
minio/minio:RELEASE.2022-09-01T23-53-36Z \
server \
http://minio2{1..2}:9000/datas/data{1..2} \
--address ":9000" --console-address ":9001"
在ubuntu22的/app/minio目录下,创建启动脚本start.sh,内容完全一样,只是name即创建的容器名称不同,因为,在同一个swarm集群内,可以通过容器名称进行通讯,所以名称不能一样,添加可执行权限:chmod +x start.sh
#!/bin/bash
name=minio22
docker stop $name
docker rm $name
docker run --name $name -d \
--network myingress \
-p 9000:9000 \
-p 9001:9001 \
-e TZ=Asia/Shanghai \
-e MINIO_ROOT_USER=minio \
-e MINIO_ROOT_PASSWORD=12345678 \
-v ${PWD}/datas:/datas \
minio/minio:RELEASE.2022-09-01T23-53-36Z \
server \
http://minio2{1..2}:9000/datas/data{1..2} \
--address ":9000" --console-address ":9001"
现在分别启动两台服务器的minio,在两台主机上,都执行:
# ./start.sh
查看两台服务器的启动日志,直到都出现以下信息,即为启动成功:
访问ui
访问minio的ui,因为是两台主机,所以两台主机,应该都可以访问:
http://192.168.56.21:9001/
http://192.168.56.22:9001/
界面:
查看集群状态,两台服务器,应该展示相同的数据:
创建桶
在任意一个ui上创建桶,并设置权限:
上传一个图片并访问
因为数据是集群的,所以访问任何一台主机,都可以查看到这个图片。
http://192.168.56.21:9000/one/1.png
http://192.168.56.22:9000/one/1.png
数据存储格式:
宕机测试
现在下线minio22,在ubuntu22上执行
# docker stop minio22
访问,依然可以看到图片:
http://192.168.56.21:9000/one/1.png
查看21的ui,会显示已经下线的主机和磁盘:
- 由于已经下线1/2的主机和磁盘,所以已经不能上传文件了,请您在正式的环境上,至少配置4*4的集群。
- 再次启动minio22后,即可以上传文件了。
配置Nginx
注意,配置后,只能通过nginx查看、下载资源。如果要上传资源还是需要直接访问minio的9000API端口。
下载镜像
在ubuntu21上执行:
# docker pull nginx:1.23.1
配置文件
创建配置文件,在/app/nginx/conf.d/default.conf,完整内容如下:
upstream miocluster {
server minio21:9000;
server minio22:9000;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /oos/one/ {
proxy_pass http://miocluster/one/;
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;
}
}
截图:
启动脚本
创建启动脚本:/app/nginx/start.sh:
#!/bin/bash
docker stop nginx
docker rm nginx
docker run --name nginx -d \
--network myingress \
-p 80:80 \
-e TZ=Asia/Shanghai \
-v ${PWD}/conf.d:/etc/nginx/conf.d \
-v ${PWD}/templates:/etc/nginx/templates \
-v ${PWD}/html:/usr/share/nginx/html \
nginx:1.23.1
截图:
测试访问
通过nginx的oss,就可以访问到minio上的图片。
http://192.168.56.21/oos/one/1.png
可选的配置域名
同样,可以配置域名转发到指定的ip进行访问。
客户端
mc客户端
在minio官网,下载mc客户端,并放到/usr/local/bin目录下。并设置可执行权限:chmod +x /usr/local/bin/mc
下载地址:https://dl.min.io/client/mc/release/linux-amd64/mc。
# wget https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x mc
# mc -v
mc version RELEASE.2022-08-28T20-08-11Z (commit-id=a64491e101feeaf68735a20c204d06993ba531e5)
Runtime: go1.18.5 linux/amd64
Copyright (c) 2015-2022 MinIO, Inc.
设置访问环境
# mc alias set local http://192.168.56.21:9000 minio 12345678
Added `local` successfully.
导入数据
使用mc mirror可以导入其他minio服务器的数据、本地的数据到指定的minio集群。
如:mc mirror play/photos/2014 local/backup-photos
Java客户端
- Java项目添加依赖:io.minio:minio:8.4.3
- 以下仅列出部分API,功能太多。
列出桶:
MinioClient client = MinioClient.builder().endpoint("http://192.168.56.21:9000")
.credentials("minio", "12345678").build();
List<Bucket> buckets = client.listBuckets();
for (Bucket bucket : buckets) {
System.err.println(bucket.name());
}
猜你喜欢
- 2024-10-05 基于Kafka+ELK搭建海量日志平台 kafka实现日志收集
- 2024-10-05 高级架构技术点之安装redis 集群 redis怎么安装
- 2024-10-05 Nacos在企业生产中如何使用集群环境?
- 2024-10-05 SpringCloud Alibaba之Nacos集群、持久化
- 2024-10-05 太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集
- 2024-10-05 认识Kubernetes以及搭建Kubernetes集群
- 2024-10-05 Redis + Tomcat + Nginx 集群实现 Session 共享
- 2024-10-05 架构师白话分布式系统 分布式架构的核心理念
- 2024-10-05 企业级k8s集群部署二 k8s集群需要哪些必备角色功能
- 2024-10-05 简单几步玩转Redis集群 redis集群解决方案
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)