Minio多主机分布式 docker-compose 集群部署

news2024/11/16 1:55:57

参考 docker-compose搭建多主机分布式minio - 会bk的鱼 - 博客园 (cnblogs.com)

【运维】docker-compose安装minio集群-CSDN博客

Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能

中文地址:MinIO | 用于AI的S3 & Kubernetes原生对象存储

官网地址:MinIO | High Performance, Kubernetes Native Object Storage

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

一 准备工作

1、三台机器  配置 vim /etc/hosts

192.168.1.244 minio4
192.168.1.243 minio3
192.168.1.242 minio2

验证

查看docker

查看 docker-compose -v

如果没有则安装 

sudo yum install docker-compose

二、编写docker-compose.yml 文件

整体目录结构如下:

希望 nginx 在243上

有两个类型的docker-compose.yml (带nginx和不带nginx的),具体如下

1、不带nginx(242和244)

version: "3"
services:
  minio:
    image: quay.io/minio/minio
    container_name: minio-node2
    hostname: minio2
    expose:
      - "19000"
      - "19001"
    environment:
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=minio@123
    volumes:
      - ./data-1:/data1
      - ./data-2:/data2
    command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
    privileged: true
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
    extra_hosts:
      - minio2:192.168.1.242
      - minio3:192.168.1.243
      - minio4:192.168.1.244
    restart: always
    network_mode: host
version: "3"
services:
  minio:
    image: quay.io/minio/minio
    container_name: minio-node4
    hostname: minio4
    expose:
      - "19000"
      - "19001"
    environment:
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=minio@123
    volumes:
      - ./data-1:/data1
      - ./data-2:/data2
    command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
    privileged: true
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
    extra_hosts:
      - minio2:192.168.1.242
      - minio3:192.168.1.243
      - minio4:192.168.1.244
    restart: always
    network_mode: host

 2、带nginx (243)

version: "3"

services:
  minio:
    image: quay.io/minio/minio
    container_name: minio-node3
    hostname: minio3
    expose:
      - "19000"
      - "19001"
    environment:
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=minio@123
    volumes:
      - /home/minio-data1:/data1
      - /home/minio-data2:/data2
    command: server --console-address ':19001' --address ':19000' http://minio{2...4}/data{1...2}
    privileged: true
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:19000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
    extra_hosts:
      - minio2:192.168.1.242
      - minio3:192.168.1.243
      - minio4:192.168.1.244
    restart: always
    network_mode: host

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - /home/dockerinstall/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf:ro
      - /home/dockerinstall/nginx/cert/server1.crt:/etc/nginx/ssl/server.crt:ro
      - /home/dockerinstall/nginx/cert/server1.key:/etc/nginx/ssl/server.key:ro
    ports:
      - "9000:9090"
      - "9001:9091"
      - "443:443"  # 添加这一行来映射 443 端口
    extra_hosts:
      - minio2:192.168.1.242
      - minio3:192.168.1.243
      - minio4:192.168.1.244
    restart: always

这句话是在 Docker Compose 文件中定义的一个卷 (volume) 映射,用于将宿主机上的文件或目录挂载到容器内。具体来说,这行代码的意思是:

  1. volumes: - 这个关键字表示后面跟着的是一个或多个卷映射。
  2. - ./nginx.conf:/etc/nginx/nginx.conf:ro - 这是一个具体的卷映射配置,其中包含了三个部分:
    • ./nginx.conf - 表示宿主机上的文件路径,即当前目录下的 nginx.conf 文件。
    • :/etc/nginx/nginx.conf - 表示容器内的文件路径,即将宿主机上的 nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 路径。
    • :ro - 表示只读权限,意味着挂载到容器内的文件只能被读取而不能被修改。

综上所述,这行配置的作用是将宿主机当前目录下的 nginx.conf 文件以只读的方式挂载到容器内的 /etc/nginx/nginx.conf 路径。这样做的目的是为了让容器能够使用宿主机提供的 Nginx 配置文件,并且确保容器内的进程不能修改这个配置文件。

nginx配置文件如下:

user nginx;  # 设置 Nginx 运行的用户为 "nginx"。
worker_processes auto;  # 自动确定工作进程的数量,通常是根据 CPU 核心数来决定。

error_log /var/log/nginx/error.log warn;  # 将错误日志记录到指定路径,并仅记录警告及以上级别的日志。
pid /var/run/nginx.pid;  # 指定 Nginx 进程 ID 文件的路径。

events {
    worker_connections 4096;  # 设置每个工作进程的最大并发连接数。
}

http {
    include /etc/nginx/mime.types;  # 包含 MIME 类型配置文件。
    default_type application/octet-stream;  # 设置默认 MIME 类型。

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '  # 定义访问日志的格式。
                    '$status $body_bytes_sent "$http_referer" ' 
                    '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main;  # 将访问日志记录到指定路径,并采用上面定义的日志格式。
    sendfile on;  # 启用高效文件传输。
    keepalive_timeout 65;  # 设置保持连接的超时时间。

    upstream adobe {  # 定义了一个名为 "adobe" 的负载均衡组,包含三个服务器。
        server minio2:19000;
        server minio3:19000;
        server minio4:19000;
    }

    upstream console {  # 定义了一个名为 "console" 的负载均衡组,同样包含三个服务器,并使用 ip_hash 进行基于 IP 的会话保持。
        ip_hash;
        server minio2:19001;
        server minio3:19001;
        server minio4:19001;
    }

    # HTTP 服务器块,用于重定向 HTTP 到 HTTPS
    server {
        listen 80;  # 监听 80 端口,用于将 HTTP 请求重定向到 HTTPS。
        server_name 192.168.1.243;  # 设置服务器名称,这里是 IP 地址。
        
        return 301 https://$host$request_uri;  # 将 HTTP 请求重定向到 HTTPS。
    }

    # HTTPS 服务器块
    server {
        listen 443 ssl;  # 监听 443 端口,用于 SSL。
        listen [::]:443 ssl;  # 监听 IPv6 地址的 443 端口,用于 SSL。
        server_name 192.168.1.243;  # 设置服务器名称,这里是 IP 地址。

        ssl_certificate /etc/nginx/ssl/server1.crt;  # SSL 证书文件路径。
        ssl_certificate_key /etc/nginx/ssl/server1.key;  # SSL 私钥文件路径。
        ssl_session_timeout 5m;  # SSL 会话缓存的有效时间。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  # 支持的 SSL/TLS 版本。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;  # 支持的加密套件。
        ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件列表。

        # To allow special characters in headers
        ignore_invalid_headers off;  # 允许特殊字符出现在 HTTP 头中。
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;  # 允许上传任意大小的文件。
        # To disable buffering
        proxy_buffering off;  # 关闭代理缓冲。
        proxy_request_buffering off;  # 不对请求体进行缓冲。

        location / {  # 定义根路径的处理规则。
            proxy_set_header Host $http_host;  # 设置 Host 头。
            proxy_set_header X-Real-IP $remote_addr;  # 设置客户端真实 IP。
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置客户端 IP 列表。
            proxy_set_header X-Forwarded-Proto $scheme;  # 设置协议类型。

            proxy_connect_timeout 300;  # 设置连接超时时间。
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;  # 使用 HTTP/1.1 版本。
            proxy_set_header Connection "";  # 清空 Connection 头,避免代理服务器使用 close 或者 keep-alive。

            # For WebSocket support
            proxy_set_header Upgrade $http_upgrade;  # 设置升级协议头。
            proxy_set_header Connection "upgrade";  # 设置连接类型为升级。

            chunked_transfer_encoding off;  # 禁用分块传输编码。

            proxy_pass http://adobe;  # 指定代理目标。
        }
    }

    # 另一个服务器块监听 9091 端口
    server {
        listen       9091;
        listen  [::]:9091;  # 监听 IPv6 地址的 9091 端口。
        server_name  192.168.1.243;

        # To allow special characters in headers
        ignore_invalid_headers off;  # 允许特殊字符出现在 HTTP 头中。
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;  # 允许上传任意大小的文件。
        # To disable buffering
        proxy_buffering off;  # 关闭代理缓冲。
        proxy_request_buffering off;  # 不对请求体进行缓冲。

        location / {  # 定义根路径的处理规则。
            proxy_set_header Host $http_host;  # 设置 Host 头。
            proxy_set_header X-Real-IP $remote_addr;  # 设置客户端真实 IP。
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置客户端 IP 列表。
            proxy_set_header X-Forwarded-Proto $scheme;  # 设置协议类型。
            proxy_set_header X-NginX-Proxy true;  # 设置代理标识。

            # This is necessary to pass the correct IP to be hashed
            real_ip_header X-Real-IP;  # 指定使用哪个头作为真实 IP。
            proxy_connect_timeout 300;  # 设置连接超时时间。

            # To support websocket
            proxy_http_version 1.1;  # 使用 HTTP/1.1 版本。
            proxy_set_header Upgrade $http_upgrade;  # 设置升级协议头。
            proxy_set_header Connection "upgrade";  # 设置连接类型为升级。

            chunked_transfer_encoding off;  # 禁用分块传输编码。

            proxy_pass http://console;  # 指定代理目标。
        }
    }

    # 另一个服务器块监听 9090 端口
    server {
        listen       9090;
        listen  [::]:9090;  # 监听 IPv6 地址的 9090 端口。
        server_name  192.168.1.243;

        # To allow special characters in headers
        ignore_invalid_headers off;  # 允许特殊字符出现在 HTTP 头中。
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;  # 允许上传任意大小的文件。
        # To disable buffering
        proxy_buffering off;  # 关闭代理缓冲。
        proxy_request_buffering off;  # 不对请求体进行缓冲。

        location / {  # 定义根路径的处理规则。
            proxy_set_header Host $http_host;  # 设置 Host 头。
            proxy_set_header X-Real-IP $remote_addr;  # 设置客户端真实 IP。
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置客户端 IP 列表。
            proxy_set_header X-Forwarded-Proto $scheme;  # 设置协议类型。

            proxy_connect_timeout 300;  # 设置连接超时时间。
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;  # 使用 HTTP/1.1 版本。
            proxy_set_header Connection "";  # 清空 Connection 头,避免代理服务器使用 close 或者 keep-alive。
            chunked_transfer_encoding off;  # 禁用分块传输编码。

            proxy_pass http://adobe;  # 指定代理目标。
        }
    }
}

解释和说明:

  1. Global Configuration (全局配置):

    • 设置了运行 Nginx 的用户、错误日志的位置、PID 文件的位置等基本配置项。
  2. Events Block (事件块):

    • 设置了每个工作进程的最大并发连接数。
  3. HTTP Configuration (HTTP 配置):

    • 包含了 MIME 类型配置文件。
    • 定义了访问日志的格式。
    • 启用了高效文件传输。
    • 设置了保持连接的超时时间。
  4. Upstream Blocks (上游配置):

    • 定义了两个负载均衡组 adobe 和 console,分别包含三个服务器,并为 console 组启用了基于 IP 的会话保持。
  5. Server Blocks (服务器配置):

    • HTTP 重定向到 HTTPS:
      • 侦听80端口,并将所有HTTP请求重定向到HTTPS。
    • HTTPS 服务器块:
      • 侦听443端口,用于SSL,并启用了 SSL 证书和密钥,以及 SSL 会话缓存、协议版本和加密套件等配置。
      • 两个服务器块分别代理到 adobe 和 console 上游组,并支持 WebSocket。

通过以上配置,Nginx 将能够支持 HTTPS,并将 HTTP 请求重定向到 HTTPS,同时代理到不同的后端服务。

分别在242,243,244上创建目录和上传相关配置文件

然后分别启动

docker-compose up -d

参考:sudo yum install tree 安装tree命令   sudo yum install lrzsz 安装rz命令

-----------------------------------------------

安装完毕 登录验证

http 登录 用户名 minio 密码 minio@123

---------------------------------------------------------------------------------------

https登录 未成功 需要重新生产ssl文件----这段貌似没用 请忽略
在本地修改

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf

openssl rsa -in server1.key -out server1_rsa.key

输入密码123456

mv server1_rsa.key server1.key
---------------------------------------------------------------------------------------------------------------------

docker-compose stop

重新启动

docker-compose up -d

https://192.168.1.243/

也可以正常访问了

-----------------------------------------

参考:Minio搭建文件服务器的学习
1、创建Bucket

点击 prod记录后 将private改为public

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDP问卷调查

在数字化时代,CDP(Customer Data Platform,客户数据平台)作为连接企业与客户数据的关键桥梁,正逐渐成为企业营销策略中不可或缺的一环。为了更深入地理解CDP在企业中的应用现状、挑战与未来趋势,我们精心设…

A股探底强势反攻,量价齐声太漂亮

今天的A股探底回升,太阳线反攻,太漂亮了!具体原因是这样的,盘面上出现2个重要变化,一起来看看: 1、今天两市低开高走,证券、人形机器人等板块掀起涨停潮,究竟是昙花一现还是有望迎来…

VMware虚拟机安装及虚拟机下安装ubuntu(附安装包)

VMware虚拟机安装及虚拟机下安装ubuntu 0 前期准备1 VMware安装2 VMware虚拟机下安装ubuntu2.1 配置虚拟机2.2 安装虚拟机ubuntu 3 在虚拟机中卸载Ubuntu参考 0 前期准备 1、VMware Wworkstation Pro安装包下载 官网-添加链接描述 百度网盘分享: 链接: VMware 提取…

【ThingsBoard初体验】本地编译踩坑记录

前言 这只是我自己的踩坑记录,以尽快启动项目为主,暂时不对编译出现的问题做深入分析。 第一次接触物联网项目,对于文章出现的问题,如果能帮到其他小伙伴,那是我的荣幸。 大佬们有更好的解决办法,也希望能够…

TypeError: Components is not a function

Vue中按需引入Element-plus时,报错TypeError: Components is not a function。 1、参考Element-plus官方文档 安装unplugin-vue-components 和 unplugin-auto-import这两款插件 2、然后需要在vue.config.js中配置webPack打包plugin配置 3、重新启动项目会报错 T…

消息中间件分享

消息中间件分享 1 为什么使用消息队列2 消息队列有什么缺点3 如何保证消息队列的高可用4 如何处理消息丢失的问题?5 如何保证消息的顺序性1 为什么使用消息队列 解耦、异步、削峰 解耦 不使用中间件的场景 使用中间件的场景 异步 不使用中间件 使用中间件 削峰 不使…

【redis】redis高可用 哨兵模式 一主二从三哨兵部署教程

哨兵模式:自动主从同步、自动选举主节点;基本可以满足大部分业务场景; 在针对大规模数据和高并发请求的场景、数据不能丢失,才需要用到集群模式。 本文教程基于redis3 , centos 8 stream操作系统,理论上来说 redis3也好…

利用 Python 制作图片轮播应用

在这篇博客中,我将向大家展示如何使用 xPython 创建一个图片轮播应用。这个应用能够从指定文件夹中加载图片,定时轮播,并提供按钮来保存当前图片到收藏夹或仅轮播收藏夹中的图片。我们还将实现退出按钮和全屏显示的功能。 C:\pythoncode\new\…

http协议深度解析——网络时代的安全与效率(1)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面: 本章目的: …

【Python学习手册(第四版)】学习笔记11.1-赋值语句(分解赋值、序列赋值、解包等)及变量命名规则详解

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要对赋值语句的各种形式做详解,以非常通俗易懂的语言、循序渐进的方式,分别对单个、元组及列表分解、序列赋值、序列解包、多重目标…

LinuxCentos中ELK日志分析系统的部署(详细教程8K字)附图片

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…

Android发布Library至mavenCentral遇到 Received status code 401

一、由于我的AppUpdate 库最新的版本还是去年发布的,所以想着发布一个版本,可没想到什么都没有改动的情况下竟然返回401;检查了半天发现用户名和密码也没有错,百思不得解! 二、最后没想到竟然是sonatype那边改了&#…

常见的Markdown编辑器推荐!

工欲善其事,必先利其器。一款好用的 Markdown 编辑器能极大地提高我们的写作体验,本篇博客就来介绍一些好用的编辑器。 ‍ ‍ Markdown 编辑器的分类 根据 Markdown 编辑器的使用环境,可以简单分为四类: 在线编辑器&#xff…

类和对象(中 )C++

默认成员函数就是用户不显示实现,编译器会自动实现的成员函数叫做默认成员函数。一个类,我们在不写的情况下,编译器会自动实现6个默认成员函数,需要注意,最重要的是前4个,其次就是C11以后还会增加两个默认成…

SpringBoot 优雅实现超大文件上传

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传&…

hadoop学习笔记2-hdfs

3.HDFS 3.1HDFS两类节点 namenode:名称节点datanode:数据节点 1.namenode 1)namenode用来存储元数据,接收客户端的读写请求,namenode的元数据会分别保存在磁盘和内存中,保存到内存是为了快速查询数据信…

一文让你学会python:面向对象

面向对象编程(OOP) 一.类与实例 1.类: 是对现实世界描述的一种类型,是抽象的,是实例的模板,类名采用大驼峰,定义方式为 class 类名: pass 。 2.实例: 根据类创建的具体对象&…

昇思25天学习打卡营第25天 | Pix2Pix实现图像转换

Pix2Pix实现图像转换 Pix2Pix概述 Pix2Pix是一种基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks)的图像转换模型,由Phillip Isola等人在2017年提出。它能够将语义/标签图像转换为真实图片、灰度图转换为彩色图、航空…

永劫无间:排位赛游戏攻略大全!VMOS云手机辅助攻略!

在《永劫无间》中,排位赛和金乌玩法是提升实力和展示技巧的绝佳途径。以下是详细的攻略建议,帮助玩家在游戏中取得更好的成绩。 排位赛 英雄们齐聚“聚窟洲”,为争夺“不朽面具”展开激烈的战斗。排位赛是玩家展示实力的重要平台&#xff0c…

六方云笔试总结

1. (1)题目 外部变量,指的是处于函数外部的全局静态变量,所以选c (2)知识点 1. static (1)函数外部的全局变量 当一个变量在函数外部定义并使用static关键字修饰时,这…