手動使用 Docker 啟動 MinIO 分布式集群(推薦生產環境)

在生產環境中,MinIO 集群通常部署在多個物理機或虛擬機上,每個節點運行一個 MinIO 容器,并通過 Docker 暴露 API 和 Console 端口。

1. 準備工作

假設有 4 臺服務器(也可以是同一臺服務器的不同端口模擬,但不推薦生產使用):

  • Server1: IP 192.168.1.101
  • Server2: IP 192.168.1.102
  • Server3: IP 192.168.1.103
  • Server4: IP 192.168.1.104

每臺服務器上創建一個數據目錄,如 /data/minio

2. 在每臺服務器上啟動 MinIO 容器

在每臺服務器上執行如下命令(以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

? 注意:上面的命令是錯誤的示范,因為每個節點應該只掛載自己的數據目錄,并且 server 命令中的地址應該是所有節點的地址,而不是當前節點的地址。正確的命令如下:

正確的啟動命令(每臺服務器執行):

在 Server1 上運行:

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

這是錯誤的! 因為每個節點只能掛載自己的數據目錄,不能把其他節點的數據目錄掛載到自己容器里。

正確的做法是:

每個節點只掛載自己的數據目錄,并在 server 命令中指定所有節點的地址(包括自己),但不掛載其他節點的數據。

Server1 上運行:

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

實際上,MinIO 會自動發現其他節點,你只需要在 server 命令中列出所有節點的地址即可,不需要掛載其他節點的數據。

更準確的做法是:

每個節點只掛載自己的數據目錄,然后在 server 命令中指定所有節點的地址(包括自己),如下:

Server1 上運行:

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

但這仍然是錯的!

正確的 MinIO 分布式啟動方式是:

每個節點只需要掛載自己的數據目錄,并在 server 命令中指定所有節點的地址(包括自己),但不需要掛載其他節點的數據。

正確命令示例(每臺服務器執行,以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

實際上,MinIO 的 server 命令支持通過 http://host:port/minio/data 的方式來指定節點,但更推薦使用 MINIO_ENDPOINTS 環境變量或在啟動時直接傳入所有節點地址。

更簡單的方式是:

在每個節點上運行:

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

這是錯誤的!

正確的做法是:

MinIO 分布式模式要求你啟動時傳入所有節點的地址(包括自己),但每個節點只需要掛載自己的數據目錄。

正確命令(每臺服務器執行,以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

還是錯的!

其實 MinIO 的分布式模式是通過在啟動時傳入所有節點的地址來實現的,但每個節點只需要掛載自己的數據目錄,不需要掛載其他節點的數據。

正確的方式是:

在每臺服務器上運行如下命令(以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

這仍然是錯誤的表達方式!


正確的 MinIO 分布式集群啟動方式

MinIO 集群是通過在啟動時傳入所有節點的地址來實現的,每個節點只需要掛載自己的數據目錄,不需要掛載其他節點的數據。

在每臺服務器上運行如下命令(以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000/data http://192.168.1.102:9000/data http://192.168.1.103:9000/data http://192.168.1.104:9000/data --console-address ":9001"

這是錯誤的!

其實 MinIO 的 server 命令不支持直接傳入 http://host:port/data 這樣的地址。正確的方式是:

MinIO 分布式模式是通過環境變量 MINIO_ENDPOINTS 或直接在命令行中傳入所有節點的地址來實現的。

正確的方式是:

在每臺服務器上運行如下命令(以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000 http://192.168.1.102:9000 http://192.168.1.103:9000 http://192.168.1.104:9000 --console-address ":9001"

還是錯的!

其實 MinIO 的 server 命令在分布式模式下,只需要傳入所有節點的 API 地址(即 http://host:port),而不是 http://host:port/data

最終正確的命令如下(每臺服務器執行,以 Server1 為例):

docker run -d \--name minio \-p 9000:9000 \-p 9001:9001 \-v /data/minio:/data \-e MINIO_ROOT_USER=minioadmin \-e MINIO_ROOT_PASSWORD=minioadmin \minio/minio server http://192.168.1.101:9000 http://192.168.1.102:9000 http://192.168.1.103:9000 http://192.168.1.104:9000 --console-address ":9001"

解釋:

  • http://192.168.1.101:9000http://192.168.1.104:9000 是所有 MinIO 節點的 API 地址。
  • 每個節點只需要掛載自己的數據目錄 /data/minio
  • MinIO 會自動發現其他節點并組成集群。

在 Server2、Server3、Server4 上執行類似的命令,只需將 IP 地址替換為各自的 IP 即可。


三、驗證集群狀態

  1. 訪問任意一個節點的 Console 界面,如 http://192.168.1.101:9001,使用 minioadmin/minioadmin 登錄。
  2. 在 Console 中可以看到集群的狀態,包括所有節點是否正常。
  3. 也可以通過 MinIO 提供的 mc 命令行工具來管理集群。

四、使用 mc 客戶端管理集群

  1. 下載 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
  1. 配置 MinIO 集群別名:
mc alias set myminio http://192.168.1.101:9000 minioadmin minioadmin
  1. 查看集群狀態:
mc admin info myminio

五、總結

  • 開發/測試環境:可以使用 Docker Compose 模擬 MinIO 集群,但注意它只是模擬,不能實現真正的數據分布和冗余。
  • 生產環境:建議在多臺服務器上部署 MinIO 分布式集群,每個節點運行一個 Docker 容器,掛載自己的數據目錄,并在啟動時傳入所有節點的 API 地址。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87709.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在IntelliJ IDEA中設置數據庫連接全局共享

在現代軟件開發中,數據庫連接管理是開發過程中不可或缺的一部分。為了提高開發效率,減少配置錯誤,并方便管理,IntelliJ IDEA 提供了一個非常有用的功能:數據庫連接全局共享。通過這個功能,你可以在多個項目…

【Python】文件應用: 查找讀取的文件內容

查找讀取的文件內容 from pathlib import Pathpath Path(pi_million_digits.txt) contents path.read_text()lines contents.splitlines() pi_string for line in lines:pi_string line.lstrip()birthday input("Enter your birthday, in the form mmddyy: "…

交互式剖腹產手術模擬系統開發方案

以下是為您設計的《交互式剖腹產手術模擬系統》開發方案框架,包含技術實現路徑與詳細內容結構建議。由于篇幅限制,這里呈現核心框架與關鍵模塊說明: 交互式剖腹產手術模擬系統開發方案 一、項目背景與意義 1.1 傳統醫學教學痛點分析 尸體標本成本高昂(約$2000/例)活體訓…

AWS WebRTC: 判斷viewer端拉流是否穩定的算法

在使用sdk-c viewer端進行拉流的過程中,viewer端拉取的是視頻幀和音頻幀,不會在播放器中播放,所以要根據收到的流來判斷拉流過程是否穩定流暢。 我這邊采用的算法是:依據相鄰幀之間的時間間隔是否落在期望值的 20% 范圍內。 音頻…

【Python】文件讀取:逐行讀取應用實例——從一個JSONL文件中逐行讀取文件

從一個JSONL文件中逐行讀取文件,并將這些問題保存到一個新的JSONL文件中 import json import argparse import os # 導入os模塊用于檢查文件是否存在def read_questions_from_jsonl(file_path, limit):"""從JSONL文件中讀取指定數量的question部分…

百寶箱生成智能體

點擊新建應用 工作流如下: 點擊發布 點擊Web服務,上架

嵌入式 數據結構學習(五) 棧與隊列的實現與應用

一、棧(Stack)詳解 1. 棧的基本概念 棧的定義與特性 后進先出(LIFO):最后入棧的元素最先出棧 操作限制:只能在棧頂進行插入(push)和刪除(pop)操作 存儲位置:我們實現的鏈棧位于堆區(malloc分配),系統棧區存儲函數調用信息 棧…

匯編與接口技術:8259中斷實驗

一、實驗目的 該實驗使學生掌握8259向量中斷方式的硬件連接和軟件編程的方法,同時使同學掌握中斷和其它接口芯片配合來完成某一特定任務的方法。 二、實驗內容 1、手動產生單脈沖作為中斷請求信號連接到MIRQ3上和SIRT10上。每按一次開關產生一次中斷,…

Ajax的初步學習

一、什么是 Ajax? Ajax (Asynchronous JavaScript and XML) 是一種無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。通過在后臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。 主要特性: 異步性 (Asynchronous…

OOM電商系統訂單緩存泄漏,這是泄漏還是溢出

電商系統訂單緩存泄漏的本質分析一、明確概念區別內存泄漏(Memory Leak)定義:對象已經不再被使用,但由于被錯誤引用而無法被垃圾回收特點:內存使用量隨時間持續增長,最終可能導致OOM類比:像浴缸…

二進制安全-匯編語言-02-寄存器

二、寄存器 水滴石穿 一個典型的CPU由運算器、控制器、寄存器等器件構成,這些器件靠內部總線相連 內部總線實現CPU內部各個器件之間的聯系,外部總線實現CPU和主板上其他器件的聯系 簡單說,在CPU中: 運算器進行信息處理寄存器進…

Java——初始guava(1)

基于 Google Guava 官方教程的解答 ?? Guava 提供了哪些 JDK 不具備的 API? Guava 擴展了 JDK 的集合框架,提供了多種 JDK 沒有的實用 API: 不可變集合(Immutable Collections) ImmutableList、ImmutableSet、ImmutableMap 等特性:創建后不可修改,線程安全,性能優于…

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享內存

一、目的 是為了c來讀取并解碼傳遞給python,Python做測試非常方便,c 和 python之間必須定好協議,整體使用c 來解碼,共享內存傳遞給python 二、主類 主類,串聯decoder,注意decoder并沒有直接在顯存里面穿…

react函數組件的props,ref,state。

react開發我們會把頁面分為一個個組件,組件是獨立而且可復用的重復代碼片段。具體來說組件可以是一個按鈕,一個輸入框。react組件有兩種定義方法,一種是函數組件,一種是類組件。我們這里說一下函數組件之間父子之間如何傳遞props參…

基于ARM+FPGA實現的BISS-C協議解決方案,適用于高精度光柵位移傳感器等

模塊簡介 本資源提供了專為FPGA設計的BISS-C接口協議發送模塊源碼。BISS-C模式作為一種高速、同步的串行通信協議,廣泛應用于高精度光柵位移傳感器的數據傳輸中,特別適用于需要精確位置信息的應用場景。此模式遵循主從架構,其中FPGA作為主控制…

spring中@Transactional注解和事務的實戰理解附代碼

文章目錄 前言一、事務是什么?二、事務的特性2.1隔離性2.2事務的隔離級別 三、Transactional注解Transactional注解簡介基本用法常用屬性配置事務傳播行為事務隔離級別異常處理與回滾性能優化建議 四、 事務不生效的可能原因方法訪問權限非public自調用問題異常被捕…

替代進口SCA7606【智芯微】國產高精度電流傳感器 工業新能源電網專用

SCA7606(智芯微)產品解析與推廣文案一、產品概述SCA7606 是 智芯微電子(ZXMICRO) 推出的一款 高精度數字隔離式電流傳感器芯片,采用 霍爾效應數字輸出 技術,專為 工業控制、新能源、智能電網 等領域的電流檢…

Java 與 Vue 全棧開發:“一課一得“ 學習筆記系統實戰

一、項目背景與核心價值 "一課一得" 是一個面向學習者的筆記管理平臺,旨在幫助用戶系統化記錄、整理和回顧學習內容。項目采用前后端分離架構:前端基于 Vue.js 構建交互式界面,后端使用 Java Spring Boot 實現業務邏輯&#xff0c…

百度文心大模型 4.5 開源深度測評:技術架構、部署實戰與生態協同全解析

聲明:本文只做實際測評,并非廣告 1.前言 2025 年 6 月 30 日,百度做出一項重大舉措,將文心大模型 4.5 系列正式開源,并選擇國內領先的開源平臺 GitCode 作為首發平臺。該模型也是百度在2025年3月16日發布的自研的新一…