首页 > 其他分享 >集群版 Minio 的部署和使用

集群版 Minio 的部署和使用

时间:2024-02-09 09:22:05浏览次数:21  
标签:http Minio 部署 server nginx 集群 proxy 9000 minio

单机版的 Minio 虽然有纠删码的部署方式,可以防止磁盘损坏导致文件丢失,但是单机毕竟性能有限。集群版 Minio 必须使用纠删码的部署方式,至少使用 4 块硬盘进行部署。最简单的部署方式是使用 2 个 docker 容器,每个容器使用 2 个磁盘或目录。本篇博客使用 docker-compose 在单台虚拟机上模拟部署伪集群,使用 4 个 docker 容器,每个容器中使用一个目录作为磁盘。

如果在不同的机器上部署真正的 Minio 集群,需要注意以下几点:

  • 集群中每个 Minio 节点必须具有相同的账号和密码,通过 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 进行初始化
  • 集群中每个 Minio 节点之间的时间,相差不能超过 3 秒,可以使用 NTP 服务器保持时间一致。
  • 集群中每个 Minio 节点中挂载的磁盘最好是没有任何数据的磁盘。

集群版 Minio 部署

首先创建好目录 /app/minio-cluster,在里面创建目录和文件,具体结构如下:

image

编写 docker-compose.yml 文件内容如下:

version: "3.5"
services:
  minio1:
    image: minio/minio
    container_name: minio1
    privileged: true
    restart: always
    environment:
      # web管理后台用户名
      MINIO_ROOT_USER: jobs
      # web管理后台密码
      MINIO_ROOT_PASSWORD: jobs@123
    networks:
      - minio_net
    volumes:
      # 文件存储目录映射
      - /app/minio-cluster/data1:/data
    # 运行 minio 服务启动命令,/data 参数是 docker 容器内部的数据目录
    # 由于 web 管理后台是动态端口,因此必须指定为固定的端口
    command: server --console-address ":9001" http://minio{1...4}:9000/data

  minio2:
    image: minio/minio
    container_name: minio2
    privileged: true
    restart: always
    environment:
      MINIO_ROOT_USER: jobs
      MINIO_ROOT_PASSWORD: jobs@123
    networks:
      - minio_net
    volumes:
      - /app/minio-cluster/data2:/data
    command: server --console-address ":9001" http://minio{1...4}:9000/data

  minio3:
    image: minio/minio
    container_name: minio3
    privileged: true
    restart: always
    environment:
      MINIO_ROOT_USER: jobs
      MINIO_ROOT_PASSWORD: jobs@123
    networks:
      - minio_net
    volumes:
      - /app/minio-cluster/data3:/data
    command: server --console-address ":9001" http://minio{1...4}:9000/data

  minio4:
    image: minio/minio
    container_name: minio4
    privileged: true
    restart: always
    environment:
      MINIO_ROOT_USER: jobs
      MINIO_ROOT_PASSWORD: jobs@123
    networks:
      - minio_net
    volumes:
      - /app/minio-cluster/data4:/data
    command: server --console-address ":9001" http://minio{1...4}:9000/data

  nginx:
    image: nginx
    container_name: nginx
    privileged: true
    restart: always
    volumes:
      - /app/minio-cluster/nginx.conf:/etc/nginx/nginx.conf
    ports:
      # 转发 api 端口
      - 9000:9000
      # 转发 web 管理界面端口
      - 9001:9001
    networks:
      - minio_net
    depends_on:
      - minio1
      - minio2
      - minio3
      - minio4

# 网络配置
networks:
  minio_net:
    driver: bridge

我们启动 4 个 docker 容器,每个 Minio 容器都是使用 9000 作为 api 端口,9001 作为 Web 管理界面端口。

由于我们需要使用 nginx 对 api 端口和 Web 管理界面端口进行负载均衡对外提供,因此 4 个容器就不再对外暴露端口。

有关 nginx 的配置文件,内容如下:

worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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;

    # include /etc/nginx/conf.d/*.conf;

    upstream minio-api {
        server minio1:9000;
        server minio2:9000;
        server minio3:9000;
        server minio4:9000;
    }

    upstream minio-web {
        server minio1:9001;
        server minio2:9001;
        server minio3:9001;
        server minio4:9001;
    }

    server {
        listen       9000;
        listen  [::]:9000;
        server_name  localhost;

        # To allow special characters in headers
        ignore_invalid_headers off;

        # 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;

        location / {
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;

            # 转发客户浏览器的 ip 地址
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;

            proxy_pass http://minio-api;
        }
    }

    server {
        listen       9001;
        listen  [::]:9001;
        server_name  localhost;

        ignore_invalid_headers off;
        client_max_body_size 0;
        proxy_buffering off;

        location / {
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;

            # 转发客户浏览器的 ip 地址
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;

            proxy_pass http://minio-web;
        }
    }
}

最后在 docker-compose.yml 文件所在目录下,运行 docker-compose up -d 启动服务即可。

然后我们访问 http://192.168.136.128:9001 输入账号 jobs 密码 jobs@123 进入首页展示如下:

image

发现有 4 个服务节点,如下所示:

image

这说明 Minio 集群已经部署成功。剩下的操作就是创建 Bucket 以及上传文件,程序代码与上篇博客的代码一致。

只不过代码中配置的 api 接口地址 http://192.168.136.128:9000 是 nginx 提供的负载均衡地址。

有关 Minio 的 Web 管理界面操作和程序代码细节,请参考上一篇博客单机版 Minio 的部署和使用,这里不再赘述。

这里把上篇博客的源代码下载地址提供出来:https://files.cnblogs.com/files/blogs/699532/springboot_minio.zip

标签:http,Minio,部署,server,nginx,集群,proxy,9000,minio
From: https://www.cnblogs.com/studyjobs/p/18012323

相关文章

  • 基于.NetCore开发博客项目 StarBlog - (31) 发布和部署
    前言StarBlog第一期规划的功能基本完成了,我想着在春节前应该可以把第一期的系列文章完结掉,那么在差缺补漏阶段就剩下开发项目的最后一个环节——部署了。PS:事实上,还有一个很重要但又经常被略过的测试环节我们没有提到,因为时间关系,第一期规划我没有写单元测试和集成测试,在开......
  • helm部署MySQL主从架构8.0
    1.准备原文件1.1.更新chart仓库首先,添加存储库并更新Helm存储库:#更新chart仓库helmrepoaddaliyunhttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartshelmrepoaddstablehttp://mirror.azure.cn/kubernetes/chartshelmrepoaddbitnamihttps://charts.bitnam......
  • Asp-Net-Core学习笔记:5.构建和部署
    从上次开始学习Asp.NetCore以来,一直都是玩一玩,还没有什么机会用来实战,最近单位有个新的小项目,于是我用Asp.NetCore来尝尝新,结果也是非常OK,熟悉之后开发效率感觉和Django基本没差。那么进入正题,本文简单说说Asp.NetCore应用的构建和部署。构建构建是使用build命令,不过一般我......
  • headscale 部署
    1.服务端用户注册headscaleuserscreate${userName}2.客户端命令行申请节点注册tailscalelogin--login-serverhttp://ip:port--advertise-routes=192.168.10.0/24,192.168.11.0/243.网页输入http://ip:port/register/mkey:${mkey}4.服务端确认节点注册heads......
  • Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念
    前言AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。参考之前的文章:对于小项目来说尚可,够用,但是存在几个问题:每次更新花费的时间太长了,无论是Framework-Dependent还是S......
  • 单机版 Minio 的部署和使用
    MinIO基于ApacheLicensev2.0开源协议的对象存储服务,兼容亚马逊S3(SimpleStorageService简单存储服务)云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、静态页面等,一个对象文件可以是任意大小,文件大小最大支持5T。由于采用Golang实现,服务端可以工作在......
  • golang容器部署时区报错
    问题:consttimezone="Asia/Shanghai"funcTimeFormat(datetime.Time,patternstring)string{location,err:=time.LoadLocation(timezone)date.In(location)returndate.Format(pattern)} 1.在本地开发使用了时区是没有问题的,但是部署到服务器上面......
  • 解决kubeadm部署的k8s 集群证书过期
    目录一、查看证书过期时间1.1方式一1.2方式二二、通过命令续期2.1修改集群内所有机器的时间,模拟证书在过期的边缘2.2查看证书有效期2.3备份原有数据2.4备份证书2.5更新证书2.6确认证书有效期2.7更新kubeconfig文件2.8更新客户端证书2.9重启相关的po......
  • go简单部署到ubuntu
    一、概述做了一个简单的服务用来下载文件,这里主要使用来下载apk,然后生成一个二维码给用户下载apk使用。 二、步骤1.在ubuntu上安装go环境并配置环境变量(网上一大堆)2.在Windows交叉打包一个可以运行在ubuntu上的可执行文件。打包命令file_download_service:可......
  • 私有仓库harbor部署
    1.GitHub的官方地址https://github.com/goharbor/harbor 2.下载harbor[root@centos201~]#wgethttps://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz 3.解压软件包[root@centos201~]#tarxfharbor-offline-installe......