docker-compose 搭建 minio 分布式对象存储 最新版(使用教程)

MinIO对象存储服务部署与操作指南

1.简介

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

minio中文文档

2.单机编排

version: '3'
services:
  minio:
    image: minio/minio
    hostname: "minio"
    ports:
      - 9000:9000 # api 端口
      - 9001:9001 # 控制台端口
    environment:
      MINIO_ACCESS_KEY: admin    #管理后台用户名
      MINIO_SECRET_KEY: admin123 #管理后台密码,最小8个字符
    volumes:
      - /docker/minio/data:/data               #映射当前目录下的data目录至容器内/data目录
      - /docker/minio/config:/root/.minio/     #映射配置目录
    command: server --console-address ':9001' /data  #指定容器中的目录 /data
    privileged: true
    restart: always

3.集群编排

version: '3'

# starts 4 docker containers running minio server instances.
# using nginx reverse proxy, load balancing, you can access
# it through port 9000.
services:
  minio1:
    image: minio/minio
    hostname: minio1
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    expose:
      - "9000"
      - "9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server --console-address ":9001" http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio
    hostname: minio2
    volumes:
      - data2-1:/data1
      - data2-2:/data2
    expose:
      - "9000"
      - "9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server --console-address ":9001" http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio3:
    image: minio/minio
    hostname: minio3
    volumes:
      - data3-1:/data1
      - data3-2:/data2
    expose:
      - "9000"
      - "9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server --console-address ":9001" http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio4:
    image: minio/minio
    hostname: minio4
    volumes:
      - data4-1:/data1
      - data4-2:/data2
    expose:
      - "9000"
      - "9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server --console-address ":9001" http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9000:9000"
      - "9001:9001"
    depends_on:
      - minio1
      - minio2
      - minio3
      - minio4

## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
  data1-1:
  data1-2:
  data2-1:
  data2-2:
  data3-1:
  data3-2:
  data4-1:
  data4-2:

4.进入控制台

访问 http://ip:9000 即可进入登录页面
账号密码为编排文件内指定的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD
在这里插入图片描述

点击 Object Browser 进入桶页面 点击 Create Buckets 新建桶
在这里插入图片描述

创建一个名为 test 的对象桶
在这里插入图片描述

点击 Create Folder 可以随意创建路径目录
在这里插入图片描述

我们在 test/upload/images 目录下点击 File 上传文件按钮

选择需要上传的文件 点击上传即可
在这里插入图片描述

点击文件后方 下载 标志按钮可以下载文件
在这里插入图片描述
我们点击下载 将文件下载到桌面
在这里插入图片描述
下载成功 接下来我们将文件进行删除
点击 文件后方 删除 标志按钮
在这里插入图片描述
提示删除成功 文件消失
在这里插入图片描述

<think>我们正在处理一个关于在Ubuntu上使用docker-compose部署MinIO并实现负载均衡的请求。根据提供的引用,我们可以整合出一个方案。MinIO是一个高性能的对象存储服务,支持分布式部署。负载均衡可以通过Nginx实现。方案概述:1.准备多台Ubuntu服务器(至少两台),每台服务器上安装DockerDockerCompose。2.在每台服务器上部署MinIO实例,使用相同的访问密钥和秘密密钥(以确保集群一致性)。3.配置一个Nginx作为负载均衡器,将请求分发到各个MinIO节点。步骤详细说明:步骤1:安装DockerDockerCompose(在所有服务器上执行)引用[3]提供了安装DockerDockerCompose的命令。步骤2:创建MinIO工作目录和数据目录(在所有MinIO节点服务器上执行)例如:mkdir-p/minio/datamkdir-p/minio/config步骤3:编写docker-compose.yml文件(在所有MinIO节点服务器上执行)根据引用[5]的示例,我们可以编写一个docker-compose.yml文件来启动MinIO容器。注意,在分布式模式下,我们需要指定多个节点。但是注意,引用[5]是单机部署,而我们需要分布式部署。根据MinIO官方文档,分布式部署需要至少4个节点(这里我们以4节点为例,但实际中可以根据需要调整,但最少4个节点才能容忍一个节点故障)。每个节点需要知道其他节点的地址。假设我们有4台服务器,IP分别为192.168.121.135,192.168.121.136,192.168.121.137,192.168.121.138。在每个节点上,docker-compose.yml文件类似这样(以节点1为例):```yamlversion:'3.8'services:minio:image:minio/miniocontainer_name:miniorestart:alwaysvolumes:-./data:/data-./config:/root/.minioports:-"9000:9000"-"9001:9001"environment:MINIO_ACCESS_KEY:admin#所有节点相同MINIO_SECRET_KEY:minio@123#所有节点相同command:serverhttp://192.168.121.135/datahttp://192.168.121.136/datahttp://192.168.121.137/datahttp://192.168.121.138/datahealthcheck:test:["CMD","curl","-f","http://localhost:9000/minio/health/live"]interval:30stimeout:20sretries:3```注意:每个节点上,command参数中的地址列表必须包含所有节点的地址(包括自己)。数据目录挂载到/data,每个节点使用自己的数据目录。步骤4:启动所有MinIO节点(在每台服务器上执行)docker-composeup-d步骤5:配置负载均衡器(Nginx)选择其中一台服务器(比如192.168.121.135)作为负载均衡器,或者单独使用一台服务器安装Nginx。在负载均衡器上安装Nginx,然后配置负载均衡。引用[1]和[3]提到了使用Nginx作为负载均衡器。配置Nginx(在/etc/nginx/nginx.conf或/etc/nginx/conf.d/minio.conf):```nginxupstreamminio_servers{#这里使用每个MinIO节点的9000端口(API端口)进行负载均衡server192.168.121.135:9000;server192.168.121.136:9000;server192.168.121.137:9000;server192.168.121.138:9000;}server{listen80;server_nameminio.example.com;#替换为你的域名或IPlocation/{proxy_passhttp://minio_servers;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto$scheme;}}```同时,如果需要控制台(9001端口)的负载均衡,可以再添加一个upstream和控制台端口的配置。步骤6:重启Nginx使配置生效sudosystemctlrestartnginx验证:1.访问负载均衡器的IP或域名(如http://minio.example.com)应该可以访问MinIO服务。2.上传文件,检查各个节点的数据目录是否有文件(分布式存储会在所有节点上存储数据的分片)。注意事项:-分布式MinIO要求所有节点的时间同步(使用NTP服务)。-节点之间的网络需要低延迟和高带宽。-分布式MinIO至少需要4个节点(或者4的倍数)才能提供纠错码(erasurecoding)功能。根据引用[1],他们使用了多机分布式部署,并使用了Nginx作为负载均衡器。我们的方案也是类似的。相关问题:1.如何验证MinIO集群是否正常工作?2.分布式MinIO的数据如何存储和恢复?3.如何扩展MinIO集群(增加节点)?4.如何备份MinIO集群的数据?5.如何监控MinIO集群的性能和状态?以上是一个基本的部署指南。用户可以根据实际情况调整节点数量和配置。</think>### Ubuntu上使用Docker-Compose部署MinIO负载均衡方案 以下是基于多机分布式部署的完整指南,通过Docker-Compose实现MinIO集群和Nginx负载均衡: #### 架构说明 ``` 客户端 → Nginx负载均衡器 → [MinIO节点1] [MinIO节点2] [MinIO节点3] ``` - **负载均衡器**:运行Nginx(单节点) - **存储节点**:运行MinIO(至少3节点) - **数据持久化**:每节点挂载本地存储卷 --- ### 部署步骤 #### 1. 所有节点准备环境 ```bash # 更新系统并安装依赖 sudo apt update && sudo apt upgrade -y sudo apt install curl -y # 安装Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 安装Docker-Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 2. MinIO节点配置(每台服务器执行) ```bash # 创建目录结构 sudo mkdir -p /minio/{data,config} ``` 创建`/minio/docker-compose.yml`: ```yaml version: '3.8' services: minio: image: minio/minio container_name: minio_node restart: always volumes: - /minio/data:/data - /minio/config:/root/.minio ports: - "9000:9000" # API端口 - "9001:9001" # 控制台端口 environment: MINIO_ACCESS_KEY: minioadmin # 所有节点必须相同 MINIO_SECRET_KEY: minioadmin # 所有节点必须相同 command: server http://minio{1...3}/data # 修改为实际节点IP或主机名 networks: - minio_net networks: minio_net: driver: bridge ``` > **关键参数说明**: > - `MINIO_ACCESS_KEY/MINIO_SECRET_KEY`:所有节点必须一致[^3][^5] > - `command: server http://minio{1...3}/data`:需替换为实际节点地址(如`http://192.168.1.10/data http://192.168.1.11/data ...`) #### 3. Nginx负载均衡器配置 在**单独服务器**上创建`/nginx/docker-compose.yml`: ```yaml version: '3.8' services: nginx: image: nginx:alpine container_name: minio_lb ports: - "80:80" - "443:443" volumes: - ./conf.d:/etc/nginx/conf.d networks: - minio_net networks: minio_net: driver: bridge ``` 创建负载均衡配置`/nginx/conf.d/minio.conf`: ```nginx upstream minio_servers { # 添加所有MinIO节点IP server 192.168.1.10:9000; # 节点1 server 192.168.1.11:9000; # 节点2 server 192.168.1.12:9000; # 节点3 least_conn; # 使用最少连接算法 } server { listen 80; server_name minio.example.com; location / { proxy_pass http://minio_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # MinIO特定配置 proxy_buffering off; proxy_request_buffering off; } } ``` #### 4. 启动服务 ```bash # 在所有MinIO节点启动 sudo docker-compose -f /minio/docker-compose.yml up -d # 在Nginx节点启动 sudo docker-compose -f /nginx/docker-compose.yml up -d ``` #### 5. 验证部署 ```bash # 检查节点状态 docker ps | grep minio # 测试负载均衡 curl http://负载均衡器IP ``` 访问控制台:`http://任意MinIO节点IP:9001` 使用相同密钥登录 --- ### 关键注意事项 1. **节点一致性**:所有MinIO节点必须使用相同的访问密钥和区域设置[^3][^5] 2. **网络要求**: - 节点间延迟需<15ms - 防火墙开放端口:9000(API), 9001(控制台), 80/443(Nginx) 3. **存储规划**:建议每个节点使用相同容量的磁盘 4. **域名解析**:建议为负载均衡器配置DNS记录(如`minio.example.com`) > **分布式原理**:MinIO使用纠删码(Erasure Coding)将数据分片存储在不同节点,允许部分节点故障不影响服务[^3] --- ### 性能优化建议 1. **增加节点**:扩展时需4的倍数节点(如4、8、12) 2. **SSL加密**:在Nginx配置HTTPS证书 3. **持久化存储**:使用本地SSD或高性能云磁盘 4. **监控**:集成Prometheus监控MinIO集群指标 --- ### 相关问题 1. 如何验证MinIO集群的数据冗余机制是否生效? 2. 在已有MinIO单机部署上扩展为集群的步骤是什么? 3. MinIO分布式部署的性能瓶颈通常出现在哪里? 4. 如何实现MinIO集群的自动化故障转移? 5. Docker-Compose与Kubernetes部署MinIO集群的主要区别是什么? [^1]: Minio集群docker-compose部署Ngnix均衡负载(多机分布式) [^2]: docker部署(使用docker-compose)手把手教程 [^3]: docker-compose 部署单机、多机minio [^4]: docker-compose 部署mysql8、minio、nginx、redis [^5]: docker-compose Install minio
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的狮子Li

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值