使用containerd搭建MinIO叢集服務

陌上荼靡發表於2023-03-14

概述

因為在雲伺服器上預設只有一塊磁碟,如果直接在系統盤上安裝MinIO,會被拒絕,所以這裡採用containerd的方式繞過這一限制

操作環境

作業系統

CentOS 7.9

MinIO版本

RELEASE.2023-03-09T23-16-13Z

伺服器host資訊

192.168.10.1 minio1
192.168.10.2 minio2
192.168.10.3 minio3
192.168.10.4 minio4
192.168.10.5 nginxserver

域名資訊

注意:以下為假定的域名配置,實際部署時替換為自己的真實域名,並提供有效的證書資訊

MinIO後臺域名:console.minio.com

MinIO介面服務域名:api.minio.com

前提條件

首先要確保每臺minio伺服器上已經安裝好了containerd元件,參見在Linux中安裝containerd作為kubernetes的容器執行時

並且確保在nginxserver主機上安裝了nginx,參見在CentOS中安裝和使用nginx

安裝

在每臺機器上執行以下命令

注意:確保各個minio伺服器之間的防火牆上已經開放了90009001的內網訪問許可權

其中MINIO_ROOT_USERMINIO_ROOT_PASSWORD分別時MinIO後臺訪問的賬號密碼,請自行替換並妥善保管

環境變數MINIO_SERVER_URL的值會影響共享檔案的連結地址,並且會參與簽名計算

mkdir /miniodisk

MINIO_ROOT_USER=minio_admin
MINIO_ROOT_PASSWORD=minio_admin_password
MINIO_VERSION=RELEASE.2023-03-09T23-16-13Z
MINIO_CONTAINER=minio-server

ctr run --net-host -d \
  --env=MINIO_ROOT_USER=$MINIO_ROOT_USER \
  --env=MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD \
  --env=MINIO_SERVER_URL=https://api.minio.com \
  --mount=type=bind,src=/miniodisk,dst=/data,options=rbind:rw docker.io/minio/minio:$MINIO_VERSION \
  $MINIO_CONTAINER minio server \
  http://minio1:9000/data \
  http://minio2:9000/data \
  http://minio3:9000/data \
  http://minio4:9000/data \
  --console-address ":9001"

此時,我們的MinIO叢集已經搭建成功了

配置nginx

1、因為MinIO後臺使用了WebSocket技術,需要在nginx上配置UpgradeConnection等請求頭來支援WebSocket的轉發,參見MinIO官方nginx示例WebSocket proxying

2、在nginx上使用301強制將http請求重定向到https地址,保證訪問的資料安全

3、修改client_max_body_size預設允許上傳的檔案大小限制,預設值是1M,如果上傳大檔案時會被阻止

4、將ssl_certificatessl_certificate_key指定為你自己的證書檔案路徑

以上操作需要修改/etc/nginx/nginx.conf檔案,新增以下配置資訊

http {
    # 調大客戶端請求體的大小限制,便於MinIO上傳大檔案
    client_max_body_size 10M;

    # websocket
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

     upstream minioapi {
      server minio1:9000;
      server minio2:9000;
      server minio3:9000;
      server minio4:9000;
     }

     upstream minioconsole {
      server minio1:9001;
      server minio2:9001;
      server minio3:9001;
      server minio4:9001;
     }
     
    server {
       listen     80;
       server_name  console.minio.com api.minio.com;
       access_log  /var/log/nginx/http_access.log  main;
       return 301 https://$host$request_uri;
    }

    server {
       listen       443 ssl http2;
       listen       [::]:443 ssl http2;
       server_name  api.minio.com;

       ssl_certificate "/etc/nginx/ssl_cert/api.minio.com.pem";
       ssl_certificate_key "/etc/nginx/ssl_cert/api.minio.com.key";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers on;

       access_log  /var/log/nginx/api_minio_com_access.log  main;
       location / {
           proxy_pass http://minioapi/;
           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_http_version 1.1;
        }
    }

    server {
       listen       443 ssl http2;
       listen       [::]:443 ssl http2;
       server_name  console.minio.com;

       ssl_certificate "/etc/nginx/ssl_cert/console.minio.com.pem";
       ssl_certificate_key "/etc/nginx/ssl_cert/console.minio.com.key";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers on;

       access_log  /var/log/nginx/console_minio_com_access.log  main;
       location / {
           proxy_pass http://minioconsole/;
           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_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
        }
    }
}

配置檔案修改完畢之後,重啟nginx,使配置生效

systemctl restart nginx

配置完成,確保nginxserver伺服器開放了80443埠外網訪問許可權,並且設定好了域名解析後,我們就可以透過https://console.minio.com訪問MinIO後臺了

相關文章