百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

最新Minio+Docker+Nginx多机集群

bigegpt 2024-08-11 14:16 24 浏览

前述

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

相关推荐

5分钟搭建公网https网页文件服务器,免费权威TLS证书

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要讲解如何快速搭建一个https网页文件服务器,并免费申请权威机构颁发的tls证...

nginx负载均衡配置(nginx负载均衡配置两个程序副本)

Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...

19《Nginx 入门教程》Nginx综合实践

今天我们将基于Nginx完成两个比较有用的场景,但是用到的Nginx的配置非常简单。内部Yum源搭建内部Pip源搭建1.实验环境ceph1centos7.6内网ip:172.16....

Nginx性能调优与优化指南(nginx优化配置大全)

Nginx性能调优需要结合服务器硬件资源、业务场景和负载特征进行针对性优化。以下是一些关键优化方向和具体配置示例:一、Nginx配置优化1.进程与连接数优化nginxworker_process...

C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)

本文为Nginx实操高级篇。通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离和高可用Nginx6种功能,并对Nginx的原理作进一步的解析。当需...

【Nginx】史上最全的Nginx配置详解

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。Nginx是非常重要的负载均衡中间件,被广泛应用于大型...

【Nginx】Nginx 4种常见配置实例(nginx基本配置与参数说明)

本文主要介绍nginx4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx4种常见配置实例如下:一、Nginx反向代理配...

使用nginx+allure管理自动化测试报告

allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+...

nginx配置文件详解(nginx配置文件详解高清版)

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...

SpringCloud Eureka-服务注册与发现

1.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服...

微服务 Spring Cloud 实战 Eureka+Gateway+Feign+Hystrix

前言我所在项目组刚接到一个微服务改造需求,技术选型为SpringCloud,具体需求是把部分项目使用SpringCloud技术进行重构。本篇文章中介绍了Eureka、Gateway、Fe...

深度剖析 Spring Cloud Eureka 底层实现原理

你作为一名互联网大厂后端技术开发人员,在构建分布式系统时,是不是常常为服务的注册与发现而头疼?你是否好奇,像SpringCloudEureka这样被广泛使用的组件,它的底层实现原理到底是怎样的...

热爱生活,喜欢折腾。(很热爱生活)

原文是stackoverflow的一则高票回答,原文链接可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删)。尽管classmethod和st...

GDB调试的高级技巧(详细描述gdb调试程序的全过程)

GDB是我们平时调试c/c++程序的利器,查起复杂的bug问题,比打印大法要好得多,但是也不得不说,gdb在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,分享下:一美化打印先上个例子...

Arduino 实例(二十三)Arduino 给Python 编译器发送信息

1首先Python需要安装Pyserial库,在命令提示符中输入pipintallpyserial若是遇到提示‘pip‘不是内部或外部命令,也不是可运行的程序或批处理文件,则需要设置环境变...