<返回更多

minio集群将一切访问都交给nginx

2022-09-05    互联共商
加入收藏

问题

一般在正式的环境下,通过给域名添加子路径(如oss)用于下载文件服务器上的文件。但这种设置子路径的方式不能直接通过API上传文件,创建桶等,鉴于安全,也不能让这种子路径拥有创建、删除文件的权限。所以,一般情况下,后台还是通过访问多个minio端口9000实现文件的操作,甚至有时,还需要在自己的代码中写一套负载均衡的逻辑(之前我的代码中就是这样实现的)。其实完全可以基于Nginx直接暴露9001,9000, 同时再给web通过/oss/xx的形式访问的能力。

结构设计

 


 

本次环境在一台主机上搭建:

主机

软件

网卡

端口

192.168.56.61

bitnami/minio:2022.9.1

mybridge

不对外暴露

bitnami/minio:2022.9.1

mybridge

不对外暴露

bitnami/minio:2022.9.1

mybridge

不对外暴露

bitnami/minio:2022.9.1

mybridge

不对外暴露

nginx:1.23.1

mybridge

80,9000,9001

目录结构

在任意目录下,创建data{1..4}目录,用于保存minio的数据。创建nginx用于添加nginx的配置文件。在nginx1.19版本以后,可以通过映射 /etc/nginx/templats文件,将此目录下的xxx.conf.template文件自动的保存到nginx的配置文件下/etc/nginx/conf.d/,nginx将 templates下的 *.conf.template文件保存到/etc/nginx/conf.d/目录下以后,会删除.template扩展名。

目录截图:


 

配置文件Docker-compose.yml

此配置文件,用于管理4个minio容器和一个nginx容器。由于bitnami/minio在创建时,会自动创建mc client,这会影响创建的速度,我们可以通过MINIO_SKIP_client将它关闭。关闭后,如果需要使用此功能,可以进入容器自行设置。


 


 

配置文件default.conf.template

此配置文件为oss映射配置文件,配置后,web可以通过http://<或名>/oss/<桶名称>/1.png直接访问到到图片,但不能操作minio的文件系统,如上传、创建桶等。


 

配置文件minio_api.conf.template

此配置文件用于nginx影射9000端口,实现直接通过此端口创建桶、上传等,也用于其他client接口。


 

配置文件minio_console.conf.template

此配置文件,用于影射9001端口,实现console ui的相关操作。


 

启动所有容器

# docker compose up -d

启动过程中,可以通过log查看启动日志,如出现以下信息,即表示启动成功,注意最后的 4 online表示4台主机都已经上线并可以使用了。


 

通过以下启动的容器可以看出,仅nginx对外影射了端口,minio所有端口仅对nginx开放。


 

可选的,进入任意一台容器,查看集群状态


 

访问ui

由于只开放了nginx9000端口,而此端口后面,负载均衡了minio{1...4}:9000端口,所以,访问时,如果有宕机的minio也不影响操作,登录之后,可以查看到minio集群的运行状态。

http://192.168.56.61:9001


 

创建一个桶,并设置访问权限


 

宕机测试

现在让其中一台minio服务器下线,并继续在console ui上操作,创建桶、上传或下载文件,都可以正常操作。


 

下线某个minio后查看ui中的offline下线已经为1 servers ,1 drivers。


 

测试完成后,再重新启动

docker compose start minio1

oss访问测试(通过)


 

域名访问测试(通过)


 

JAVAAPI访问(通过)

直接访问nginx的9000端口即后,再不用于自己手写代码实现api接口的负载均衡了。


 


 

deepin

另:本人的操作系统为deepin 20(绝对不是给deepin做宣传),deepin是基于debian的linux系统,非常好用。推荐大家尝试。上个图:


 


 


 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>