Gridea

在 Windows Server 上搭建 MinIO 分布式集群并配置 Nginx 进行负载均衡

在 Windows Server 上搭建 MinIO 分布式集群并配置 Nginx 进行负载均衡
2024-07-20 · 8 min read
minio

随着数据存储需求的不断增长和大量数据的频繁访问,企业需要一个高效、可靠且易于扩展的存储解决方案。MinIO 作为一款高性能的对象存储系统,其速度和可扩展性使其成为许多企业的首选。然而,单节点的存储解决方案在某些高负荷环境下可能无法满足需求,因此部署一个分布式 MinIO 集群成为提升性能和可靠性的必然选择。
本篇教程将带领你在 Windows Server 上搭建一个分布式的 MinIO 存储集群,并通过配置 Nginx 实现负载均衡,从而确保在多节点环境中高效分配客户端请求。无论你是系统管理员、开发人员,还是 DevOps 工程师,本教程将帮助你快速上手,构建一个稳定、高效的存储解决方案。通过这种组合,你将能够充分利用 MinIO 的强大性能和 Nginx 的负载均衡能力,为企业数据存储保驾护航。

准备工作

硬件准备

  • 对于一个功能完备的 MinIO 分布式集群,建议准备至少 5 台服务器,其中 4 台配置为存储服务器,剩余 1 台配置为 Nginx 服务器。本教程中使用的服务器均为 Windows 系统。
  • 4 台存储服务器建议除系统盘外,另外各配置至少 4 块独立的硬盘作为存储盘。
  • 存储服务器集群节点数量和硬盘数量与 MinIO 集群容量的关系可由 纠删码计算器 计算得到。

系统配置

  • 关闭 Windows Defender 防火墙以免防火墙阻止服务器间通信
  • 在每块存储盘中各新建一个名为 minio 的文件夹作为 MinIO 的存储文件夹
  • 磁盘管理 中将存储盘挂载到系统盘分区的目录下,操作方法如下
    • 打开 磁盘管理,定位到存储盘
    • 右键菜单中选择 更改驱动器号和路径,点击 添加 按钮
    • 在弹出的对话框中选择 装入以下空白 NTFS 文件夹中,并选择对应的系统分区的空文件夹路径,例如将四块存储盘分别挂载到 C:\minio\drive{1-4} 文件夹中

安装 MinIO 并配置为 MNMD (多节点多硬盘) 模式

Minio 支持多种部署模式,其中 MNMD 模式是一种适用于多节点多硬盘的部署模式,可以充分利用多节点的存储资源,提高存储性能和可靠性。下面我们将在每台存储服务器上安装 MinIO 并配置为 MNMD 模式。

下载 MinIO

  1. 打开 MinIO 官网 https://min.io/download,选择 Windows 版本的 MinIO Server 下载。也可直接使用此链接下载 MinIO Server 二进制文件。
  2. 将下载的 MinIO Server 二进制文件拷贝到 C:\minio 目录下

MinIO 启动

  1. 在每一台存储服务器的 C:\minio 目录下新建一个名为 start_minio.bat 的批处理文件,内容如下:
@echo off
set MINIO_ROOT_USER=minioadmin
set MINIO_ROOT_PASSWORD=minioadmin
set MINIO_PROMETHEUS_URL=NGINX_SERVER_IP:9090

minio.exe server --console-address ":9001" ^
    STORAGE1_IP/minio/drive{1...4}/minio ^
    STORAGE2_IP/minio/drive{1...4}/minio ^
    STORAGE3_IP/minio/drive{1...4}/minio ^
    STORAGE4_IP/minio/drive{1...4}/minio

pause
  1. STORAGE1_IPSTORAGE2_IPSTORAGE3_IPSTORAGE4_IPNGINX_SERVER_IP 替换为各服务器的 IP 地址
  2. 在每台存储服务器上运行 start_minio.bat 启动 MinIO Server,观察终端输出,确保 MinIO Server 正常启动
  3. 在浏览器中输入 http://STORAGE1_IP:9001,查看 MinIO Server 控制台是否正常打开,如出现控制台登陆页面则表示 MinIO Server MNMD 模式启动成功

配置 Nginx 负载均衡

下载 Nginx

  1. 打开 Nginx 官网 http://nginx.org/en/download.html,选择 Windows 版本的 Nginx 下载。也可直接使用此链接下载 Nginx 压缩包。
  2. 将压缩包解压到 C:\nginx 目录下

配置 Nginx

  1. C:\nginx\conf 目录下的 nginx.conf 文件修改如下:

    此配置文件中定义了两个 upstream,分别用于负载均衡 MinIO Server 的 S3 服务和控制台服务,其中 STORAGE1_IPSTORAGE2_IPSTORAGE3_IPSTORAGE4_IP 分别替换为各存储服务器的 IP 地址。通过访问 http://NGINX_SERVER_IP:9000http://NGINX_SERVER_IP:9001 可以实现对 MinIO Server 的 S3 服务和控制台服务的负载均衡。

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    upstream minio_s3 {
        least_conn;
        server STORAGE1_IP:9000;
        server STORAGE2_IP:9000;
        server STORAGE3_IP:9000;
        server STORAGE4_IP:9000;
    }

    upstream minio_console {
        ip_hash;
        server STORAGE1_IP:9001;
        server STORAGE2_IP:9001;
        server STORAGE3_IP:9001;
        server STORAGE4_IP:9001;
    }

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

        # 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;
        # Disable buffering
        proxy_buffering off;
        proxy_request_buffering off;

        location / {
            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;
            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;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;

            proxy_pass http://minio_s3; # This uses the upstream directive definition to load balance
        }
    }

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

        # 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;
        # Disable buffering
        proxy_buffering off;
        proxy_request_buffering off;

        location / {
            rewrite ^/minio/ui/(.*) /$1 break;
            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;
            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;

            proxy_connect_timeout 300;

            # To support websockets in MinIO versions released after January 2023
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
            # Uncomment the following line to set the Origin request to an empty string
            # proxy_set_header Origin '';

            chunked_transfer_encoding off;

            proxy_pass http://minio_console; # This uses the upstream directive definition to load balance
        }
    }
}

启动 Nginx

C:\nginx 目录下打开命令行,运行 start nginx 启动 Nginx 服务

验证 MinIO 分布式集群

  1. 在浏览器中输入 http://NGINX_SERVER_IP:9001,查看 MinIO Server 控制台是否正常打开,如出现控制台登陆页面则表示 Ngixn 负载均衡配置成功

修改 Nginx 配置

  • 如果需要修改 Nginx 配置,可以在 C:\nginx\conf 目录下的 nginx.conf 文件中进行修改
  • 修改完成后,可以通过运行 nginx -t 命令检查配置文件是否正确,然后运行 nginx -s reload 命令重新加载配置文件

配置 Prometheus 监控

MinIO Server 提供了 Prometheus 监控指标,可以通过配置 Prometheus 监控来实时监控 MinIO Server 的性能和运行状态。下面我们将配置 Prometheus 监控,实现对 MinIO Server 的监控。

下载 Prometheus

  1. 打开 Prometheus 官网 https://prometheus.io/download,选择 Windows 版本的 Prometheus 下载。
  2. 将下载的 Prometheus 压缩包解压到 C:\prometheus 目录下

使用 mc 工具配置 Prometheus

  1. 将 MinIO Client 工具 mc.exe 拷贝到 C:\minio 目录下
  2. 使用以下命令将 mc 连接到 MinIO Server
mc.exe alias set minio http://NGINX_SERVER_IP:9000 minioadmin minioadmin
  1. 生成抓取配置
mc.exe admin prometheus generate minio
mc.exe admin prometheus generate minio bucket
mc.exe admin prometheus generate minio resource
mc.exe admin prometheus generate minio node

将以上四条命令依次执行,生成相应的抓取配置文件。将生成的配置文件拷贝到 Prometheus 的目录下的 prometheus.yml 文件中。

启动 Prometheus

  • C:\prometheus 目录下打开命令行,运行 prometheus.exe 启动 Prometheus 服务
  • 在浏览器中输入 http://localhost:9090,查看 Prometheus 控制台是否正常打开,如出现控制台页面则表示 Prometheus 启动成功
  • 在 Minio 控制台的 Metrics 页面中查看 Prometheus 监控指标是否正常抓取