JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

最新Minio+Docker+Nginx多机集群 多台nginx

wys521 2024-10-05 04:12:21 精选教程 19 ℃ 0 评论

前述

  • 本次将使用最新的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());
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表