研究メモ MinIo Object Storage - Docker 分散クラスタ構築 ピットを踏む!

記事ディレクトリ

1。概要

1.1 意味

MinIO は Go 言語をベースにした高性能オブジェクト ストレージ サービスで、Github で 39,000 以上のスターを獲得しています。Apache License v2.0 オープンソース プロトコルを採用しており、写真、ビデオ、ログ ファイル、バックアップ データ、コンテナ/仮想マシン イメージなどの大容量の非構造化データの保存に非常に適しています。この記事では、MinIO を使用して、写真を保存するオブジェクト ストレージ サービスを構築します。

MinIO は、クラウドネイティブおよびコンテナ化されたアプリケーション向けに設計された、高性能の分散オブジェクト ストレージ サービスです。次の主な特徴と機能があります。

  1. オブジェクト ストレージ: MinIO は、シンプルかつ強力なオブジェクト ストレージ インターフェイスを提供し、数 KB から数 TB までのあらゆるサイズのファイルを保存および取得できます。
  2. 高性能: MinIO は、高性能オブジェクト ストレージ サービスとして設計されています。並列分散アルゴリズムを使用してデータのアップロードとダウンロードを高速化し、マルチスレッドとストリーミングを通じて高速アクセス速度を提供します。
  3. 拡張性: MinIO は水平拡張をサポートし、ニーズに応じてストレージ容量と処理能力を増加できます。MinIO インスタンスを追加して分散ストレージ クラスターを構築し、高いデータ可用性とフォールト トレランスを実現できます。
  4. 高い互換性: MinIO は AWS S3 API と互換性があるため、既存の S3 ツールやライブラリを変更せずに使用して MinIO と対話できます。
  5. セキュリティ: MinIO は、データ暗号化、アクセス制御、認証、ネットワーク送信暗号化などのさまざまなセキュリティ機能を提供します。保存されたデータを保護するために、ニーズに応じて適切なセキュリティ ポリシーを構成できます。
  6. 高可用性: MinIO は、データの冗長性とフェイルオーバーをサポートする高可用性アーキテクチャを備えています。ノードに障害が発生した場合、ストレージ クラスターは自動的に回復し、可用性を維持します。
  7. オープンソースで無料: MinIO は、Apache License 2.0 に基づいてライセンス供与されたオープンソース ソフトウェアです。MinIO は自由に使用、変更、配布できます。

MinIO は、プライベート クラウドの構築、静的コンテンツの保存と配布、バックアップとアーカイブなどのシナリオに非常に適しています。使いやすいインターフェイスと豊富な機能を提供し、開発者がオブジェクト ストレージ サービスを簡単に構築および管理できるようにします。

このチュートリアルでは、MinIO を実行しているすべてのホストがRHEL8+ や Ubuntu 18.04+ などの推奨 Linux オペレーティング システムを使用していることを前提としています。

1.2 応用シナリオ

以下の図に示すように、MinIO のアプリケーション シナリオは、プライベート クラウドのオブジェクト ストレージ サービスとしてだけでなく、クラウド オブジェクト ストレージのゲートウェイ層としても使用でき、シームレスに接続したりAmazon S3MicroSoft Azure

ここに画像の説明を挿入します

1.3 特徴

高性能:
高性能ストレージとして、標準的なハードウェア条件下では、読み取り速度と書き込み速度がそれぞれ55Gb/sと に達します35Gb/sまた、MinIO は、オブジェクト ファイルが数 kb から最大 5T までの任意のサイズになることをサポートしています。

スケーラブル:
異なる MinIO クラスターはフェデレーションを形成してグローバル名前空間を形成し、複数のデータセンターにまたがるサポートをサポートします。

クラウド ネイティブ:
コンテナ化、K8S ベースのオーケストレーション、マルチテナントのサポート。

Amazon S3 互換:
Amazon S3 v2/v4 API を使用します。Minio サーバーには、Minio SDK、Minio クライアント、AWS SDK、AWS CLI を使用してアクセスできます。

さまざまなバックエンド ストレージに接続可能:
Minio 独自のファイル システムに加えて、DAS、JBOD、NAS、Google Cloud Storage、Azure Blob Storage もサポートしています。

SDKのサポート:

Lambda コンピューティング:
Minio サーバーは、AWS SNS/SQS 準拠のイベント通知サービスを通じて Lambda 関数をトリガーします。サポートされているターゲットは、Kafka、NATS、AMQP、MQTT、Webhook などのメッセージ キューと、Elasticsearch、Redis、Postgres、MySQL などのデータベースです。

グラフィカルインターフェイスに
は操作ページがあります。

シンプルな機能:
エラーが少なく、すぐに開始できます。

消去コードのサポート:
MinIO は消去コードとチェックサムを使用して、ハードウェア エラーとサイレント データ汚染を防ぎます。最も高い冗長構成では、ディスクの 1/2 が失われた場合でもデータを復元できます。

1.4 基本概念

オブジェクト: Minio に保存されている基本オブジェクト (ファイル、バイト ストリーム、その他など)。

バケット: オブジェクトを保存するために使用される論理空間。各バケット間のデータは互いに分離されています。クライアントにとって、これはファイルを保存する最上位のフォルダーに相当します。

ドライブ: データを保存するディスク。MinlO の起動時にパラメータとして渡されます。Minio のすべてのオブジェクト データは Drive に保存されます。

セット: ドライブの集合です。分散展開では、クラスター サイズに応じて 1 つ以上のセットが自動的に分割されます。各セットのドライブは、異なる場所に分散されます。オブジェクトは Set に保存されます。(例: {1…64} は、サイズ 16 の 4 つのセットに分割されます。)

  • オブジェクトは Set に格納されます
  • クラスターは複数のセットに分割されます
  • セットに含まれるドライブの数は固定されており、デフォルトではクラスター サイズに基づいてシステムによって自動的に計算されます。- SET 内のドライブは可能な限り異なるノードに分散されます。

1.5 イレージャーコード EC (イレージャーコード)

Erasure Code (消去コード) は、データの冗長性とフォールト トレランスに使用されるデータ エンコード技術です。元のデータを複数のデータ ブロックに分割し、追加の冗長データ ブロックを生成することで、データのフォールト トレランスとリカバリを実現します。

消去コードは、データの信頼性と耐久性を向上させるために分散ストレージ システムでよく使用されます。従来のデータ冗長バックアップ方法と比較して、消去コードはストレージ効率が高くなります。

イレイジャーコーディングの主な特徴と利点は次のとおりです。

  1. 冗長性の低下: イレイジャー コーディングでは、元のデータを複数のデータ ブロックに分割し、いくつかの冗長データ ブロックを生成することができるため、従来のバックアップ方法と比較して、必要な冗長性が低くなります。これは、消去コードがより高いストレージ効率でデータの冗長性とフォールトトレランスを提供できることを意味します。
  2. 強力な耐障害性: イレイジャーコーディングは、冗長データブロックの情報の一部に基づいて、失われたまたは破損した元のデータブロックを回復できます。データ損失やハードウェア障害が発生した場合でも、完全なデータを復元できます。異なる消去符号化方式は異なるレベルの耐障害性を提供​​し、特定のニーズに応じて適切な方式を選択できます。
  3. バランスの取れたデータ分散: イレイジャーコーディングは、複数のストレージノードにデータを分散させて、データの分散ストレージを実現します。これにより、データが単一ノードに集中することがなくなり、システムの負荷分散とパフォーマンスが向上します。
  4. ストレージ スペースの節約: イレーズ コーディングは、従来のバックアップ方法と比較して、冗長性が低いデータ フォールト トレランスを提供し、ストレージ スペースを節約できます。特に大規模なデータ ストレージ シナリオでは、イレイジャー コーディングによりストレージ コストを大幅に削減できます。

イレイジャーコーディングは、クラウドストレージ、分散ファイルシステム、大規模データセンターなどの分野を含む幅広い用途に使用されています。データの冗長性と耐障害性において独自の利点があり、大規模なデータ処理とストレージの要件に直面する際の重要な技術手段となっています。

1.6 保管形態

ファイル オブジェクトが MinlO にアップロードされると、対応するデータ ストレージ ディスクに配置され、バケット名がディレクトリ、ファイル名が次のレベルのディレクトリ、ファイル名の下のファイル名がpart.1になります。 xl.meta (旧バージョン、最新バージョンは下記の通り) があり、前者はエンコードデータブロックと検証ブロック、後者はメタデータファイルです。

ここに画像の説明を挿入します

例証します:

  • 消去コードはパリティ方式で保存されます。
  • MinIo の新しいバージョンでは、ファイルの整合性を検証するためにハッシュ コードが保存されます。ハッシュ コードの検証が異なる場合は、ファイルが不完全であることを意味します。

1.7 ストレージソリューション

ここに画像の説明を挿入します

例証します:

MinIO クラスターが構築されると、API インターフェースが提供されます。追加のポートを公開するだけで分散ストレージを実現できます。

ここに画像の説明を挿入します
例証します:

8 ノード、ノードごとに 1 つのハードディスク

ここに画像の説明を挿入します
例証します:

4 ノード、ノードごとに 4 つのディスク

2. 基本的な使用例

2.1 スタンドアロン展開

2.1.2 無消失符号化モード

2.1.2.1 概要

ここに画像の説明を挿入します

例証します:

単一マシンの展開で非消去コーディング モードが開始されると、minio はコピーを作成したり消去コーディング メカニズムを有効にしたりせずに、オブジェクト データごとにデータを data の直下に保存します。したがって、このモードはサービス インスタンスであってもディスクであっても「シングル ポイント」であり、高可用性の保証はなく、ディスクの損傷はデータの損失を意味します。

2.1.2.2Linux方式

ステップ 1: MinIO サービスをインストールする

次のタブでは、RPM、DEB、またはバイナリを使用して 64 ビット Linux オペレーティング システムに MinIO をインストールする例を示します。RPM および DEB パッケージは、必要なシステム パスに MinIO を自動的にインストールし、サービスを作成します。MinIO は、RPM または DEB を使用してルーティングをインストールすることを強く推奨します。管理を使用するデプロイメントを更新するには、「systemctl 管理の MinIO デプロイメントの更新」を参照してください。

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230527055619.0.0.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

例証します:

上記の手順は、AMD 64 ビット システム アーキテクチャのシステムで実行されます。

ステップ 2: MinIO サービスを開始する

システム端末またはシェルから次のコマンドを実行して、このフォルダーを使用してローカル MinIO インスタンスを起動します。このパスは、ローカル マシン上の別のフォルダー パスに置き換えることができます。~/minio

mkdir ~/minio
minio server ~/minio --console-address :9090

例証します:

このコマンドを使用して MinIO サービスを開始し、Path パラメーターを指定してサーバーが実行されているフォルダーを識別します

プログラムが正常に起動すると、コンソールに次の内容が表示されます。

ここに画像の説明を挿入します

例証します:

  • デフォルトのログイン パスワードとログイン ユーザーが次のとおりであることがわかります。minioadmin

知らせ:

  • 上記の手順は通常の実行プロセスですが、この時点で警告が表示されることがわかります。

    ここに画像の説明を挿入します

  • 警告の内容は、コントローラーのポートが静的に固定されているのではなく動的であり、現時点ではポートを手動で指定する必要があることを示しています。初期アカウントのパスワードを変更する必要がある場合は、追加で指定する必要があります。次の部分をご覧ください。

補充:

  • デフォルトのユーザー名とパスワードを変更するには、デフォルトのユーザー名とパスワード minioadmin:minioadmin を使用できます。

    export MINIO_ROOT_USER=root
    export MINIO_ROOT_PASSWORD=qweasdzxc
    
  • デフォルトの構成ディレクトリは ${HOME}/.minio ですが、–config-dir コマンドを使用して構成ディレクトリをカスタマイズできます。

    minio server --config-dir /mnt/config /mnt/data
    
  • コンソールのリスニング ポートは動的に生成され、静的ポートは –console-address ":port" で指定できます。

    minio server --console-address ":9090" /mnt/data
    

    ここに画像の説明を挿入します

ステップ 3: ブラウザを MinIO サービスに接続する

Web ブラウザでhttp://127.0.0.1:9000を開いて、 MinIO コンソールにアクセスしますサーバー コマンド出力の一部として指定されたネットワーク アドレスを入力することもできます。たとえば、出力例のコンソール: http://192.0.2.10:9090 http://127.0.0.1:9090は、コンソールに接続するための 2 つの可能なアドレスを示しています。

ここに画像の説明を挿入します

2.1.2.3Dockerメソッド

ステップ 1: システムの指定ポートの占有状況を確認する

sudo netstat -tuln | grep 9000
sudo netstat -tuln | grep 9090

例証します:

  • 指定された 9000 ポートと 9090 ポートを確認して、次の Docker ポート マッピングの準備をします。
  • 使用形式: sudo netstat -tuln | grep

以下に示すようにポートの占有が発生した場合は、Docker のマッピングされたポートを適切に置き換える必要があります。

ポートが占有されていない場合、メッセージは返されません。

ここに画像の説明を挿入します

ステップ 2: MinIO サービスを開始する
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name=minio \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /home/data:/data -v /home/config:/root/.minio \
minio/minio server /data \
--console-address ":9000" \
--address ":9090"

知らせ:

  • minio のデフォルト起動は動的ポートなので、ここでは固定ポートを設定する必要があります。--console-address ":9000" --address ":9090"
  • トラップに乗ります。ここでは、MinIO サービスの S3-API インターフェイス ポートをシステム ホストにマップする必要があります。

例証します:

  • docker run: Docker で新しいコンテナを実行するために使用されます。
  • -d: コンテナがバックグラウンド (デーモン) モードで実行されていることを示します。
  • -p 9000:9000: ホストのポート 9000 をコンテナのポート 9000 にマップし、ホストから MinIO サービスにアクセスできるようにします。
  • -p 9090:9090: ホストのポート 9090 をコンテナのポート 9090 にマップし、ホストから MinIO サービスの S3-API インターフェイスにアクセスできるようにします。
  • --name=minio: コンテナの名前を「minio」と指定します。
  • --restart=always: 起動時にコンテナが自動的に再起動するように設定します。
  • -e "MINIO_ROOT_USER=root": MinIO root ユーザーを「root」に設定します。
  • -e "MINIO_ROOT_PASSWORD=qweasdzxc": MinIO root ユーザーのパスワードを「qweasdzxc」に設定します。
  • -v /home/data:/data: ホストの「/home/data」ディレクトリをコンテナの「/data」ディレクトリにマウントして、MinIO データを保存します。
  • -v /home/config:/root/.minio: ホストの「/home/config」ディレクトリをコンテナの「/root/.minio」ディレクトリにマウントし、MinIO設定ファイルを保存します。
  • minio/minio: MinIO を使用した Docker イメージ。
  • server /data: MinIOサーバーのデータディレクトリを「/data」として指定します。
  • --console-address ":9000": MinIO コンソールのアドレスを「:9000」として指定すると、このアドレスを介して MinIO Web インターフェイスにアクセスできるようになります。
  • --address ":9090": MinIO サーバーのアドレスを「:9090」として指定し、このアドレスを通じて MinIO の API インターフェイスにアクセスできるようにします。
ステップ 3: リスニングポート情報の表示

ここに画像の説明を挿入します

システム上のネットワーク接続とリスニングポート情報を表示します。

netstat -tpnl

例証します:

ご覧のとおり、リッスンしているポートはすでに存在します。

ステップ 4: ブラウザを MinIO サービスに接続する

Web ブラウザでhttp://127.0.0.1:9000を開いて、 MinIO コンソールにアクセスしますサーバー コマンド出力の一部として指定されたネットワーク アドレスを入力することもできます。たとえば、出力例のコンソール: http://192.0.2.10:9090 http://127.0.0.1:9090は、コンソールに接続するための 2 つの可能なアドレスを示しています。

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします (img-75QJ5Qwx-1686235487719) (MiNIO.assets/image-20230605111810325.png)]

2.1.3 イレイジャーコーディングモードの場合

2.1.3.1 概要

Minio は、消去コーディングとチェックサムを使用して、ハードウェア障害やサイレント データ破損からデータを保護します。たとえハードドライブの半分 (N/2) を失ったとしても、データを回復することができます。

ここに画像の説明を挿入します

イレイジャーコーディングは、失われたデータや破損したデータを回復するための数学的アルゴリズムであり、Minio はリードソロモン符号を使用してオブジェクトを N/2 データと N/2 パリティ ブロックに分割します。これは、12 個のディスクの場合、オブジェクトは 6 つのデータ ブロックと 6 つのパリティ ブロックに分割されることを意味します。(保存されているデータ ブロックであるかパリティ ブロックであるかに関係なく) 任意の 6 つのディスクを失っても、回復することは可能です。残りのディスクからデータを削除します。

例証します:

イレイジャー コーディング モードを使用しない単一マシンの展開で開始します。このモードでは、複数のローカル ディスク パラメーターが minio サーバー インスタンスに渡されます。複数のディスク パラメータが検出されると、minio サーバーは自動的に消去コード モードを有効にします。消去コードにはディスク数の要件があります。要件が満たされない場合、インスタンスの起動は失敗します。消去コードを有効にした後、少なくとも 4 つのエンドポイント (スタンドアロン モード、つまりローカル ディスク上のディレクトリ) を minio サーバーに渡す必要があります。

ここに画像の説明を挿入します

例証します:

ファイルが10M未満の場合は、ファイル形式で保存されます。ファイルが 10M より大きい場合、ファイル オブジェクトはブロックに保存されます。

2.1.3.2 操作手順

ステップ 1: MinIO サービスを開始する
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name=minio \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /home/minio/data1:/data1 \
-v /home/minio/data2:/data2 \
-v /home/minio/data3:/data3 \
-v /home/minio/data4:/data4 \
-v /home/minio/data5:/data5 \
-v /home/minio/data6:/data6 \
-v /home/minio/data7:/data7 \
-v /home/minio/data8:/data8 \
minio/minio server /data{1...8} \
--console-address ":9000" \
--address ":9090"

知らせ:

  • minio のデフォルト起動は動的ポートなので、ここでは固定ポートを設定する必要があります。--console-address ":9000" --address ":9090"
  • トラップに乗ります。ここでは、MinIO サービスの S3-API インターフェイス ポートをシステム ホストにマップする必要があります。

例証します:

  • docker run: Docker で新しいコンテナを実行するために使用されます。
  • -d: コンテナがバックグラウンド (デーモン) モードで実行されていることを示します。
  • -p 9000:9000: ホストのポート 9000 をコンテナのポート 9000 にマップし、ホストから MinIO サービスにアクセスできるようにします。
  • -p 9090:9090: ホストのポート 9090 をコンテナのポート 9090 にマップし、ホストから MinIO サービスの S3-API インターフェイスにアクセスできるようにします。
  • --name=minio: コンテナの名前を「minio」と指定します。
  • --restart=always: 起動時にコンテナが自動的に再起動するように設定します。
  • -e "MINIO_ROOT_USER=root": MinIO root ユーザーを「root」に設定します。
  • -e "MINIO_ROOT_PASSWORD=qweasdzxc": MinIO root ユーザーのパスワードを「qweasdzxc」に設定します。
  • -v /home/data:/data: ホストの「/home/data」ディレクトリをコンテナの「/data」ディレクトリにマウントして、MinIO データを保存します。
  • -v /home/config:/root/.minio: ホストの「/home/config」ディレクトリをコンテナの「/root/.minio」ディレクトリにマウントし、MinIO設定ファイルを保存します。
  • minio/minio: MinIO を使用した Docker イメージ。
  • server /data: MinIOサーバーのデータディレクトリを「/data」として指定します。
  • --console-address ":9000": MinIO コンソールのアドレスを「:9000」として指定すると、このアドレスを介して MinIO Web インターフェイスにアクセスできるようになります。
  • --address ":9090": MinIO サーバーのアドレスを「:9090」として指定し、このアドレスを通じて MinIO の API インターフェイスにアクセスできるようにします。

補足:格納ディレクトリを確認してください

ここに画像の説明を挿入します

  • mc クライアント ツールを通じて、ディスク ファイルのチェック コードとソース ファイル情報がフォト バケット内の 8 つのディスクに保存されていることがわかります。
ステップ 2: ブラウザを MinIO サービスに接続する

ここに画像の説明を挿入します

例証します:

このインターフェースが表示されると、MinIo サービスを正常に使用できるようになります。

2.2 分散クラスターの展開

2.2.1 概要

2.2.1.1 意味

Distributed Minio を使用すると、複数のハード ドライブ (異なるマシン上にある場合でも) をオブジェクト ストレージ サービスに組み合わせることができます。ハードディスクは異なるノードに分散されているため、分散型 Minio は単一障害点を回避します。

ここに画像の説明を挿入します

2.2.1.2 一般的な方法

分散ストレージの重要なポイントはデータの信頼性、つまり損失や損傷のないデータの整合性を確保することです。信頼性を達成するという前提のもとでのみ、一貫性、高可用性、および高性能を追求する基盤が存在します。ストレージ分野では、データの信頼性を確保するための方式として、一般に冗長方式と検証方式の2種類があります。

冗長性
冗長性の方法は、保存されたデータのコピーを作成するという最も単純かつ直接的な方法です。データが失われたり損傷したりした場合、バックアップ内容を使用してデータを復元できます。コピーの数がデータの信頼性を決定します。 。これにはコストも考慮する必要があり、レプリカデータが多ければ多いほどデータの信頼性は高まりますが、より多くの機器が必要になりコストも高くなります。信頼性により、1 つのデータの損失が許容されます。現在、Hadoop のファイル システム (3 コピー)、Redis クラスター、MySQL のアクティブ/スタンバイ モードなど、多くの分散システムがこの方法で実装されています。

検証
検証方法では、チェック コードの数学的計算を使用して、紛失または破損したデータを検証および復元します。なお、ここには2つの機能があり、1つは検証です。データのチェックサムを計算することで、データが完全であるかどうか、破損や改ざんがないかを確認できます。TCPプロトコルなどのデータの送信や保存によく使用されます。 ; 2 つ目はリカバリと復元です。データとチェック コードや数学的計算を組み合わせることで、失われたデータや破損したデータを復元できます。これにより、RAID テクノロジやスタンドアロン ハードディスク ストレージのイレイジャ コーディングなど、データの信頼性を確保しながら冗長性を削減できます .(Erasure Code)技術など MinIO はイレイジャーコーディング技術を使用しています。

2.2.1.3 利点

データ保護
Distributed Minio は消去コードを使用して、複数ノードのダウンタイムとビットの腐敗を防ぎます。分散 Minio には少なくとも4 台のハードディスクが必要で、分散 Minio を使用すると消去コード機能が自動的に導入されます

高可用性
: スタンドアロンの Minio サービスには単一障害点がありますが、N 台のハードディスクを備えた分散型 Minio の場合、N/2 台のハードディスクがオンラインである限り、データは安全です。ただし、新しいオブジェクトを作成するには、少なくとも N/2+1 個のハードディスクが必要です。
たとえば、16 ノードの Minio クラスターにはノードごとに 16 台のハードディスクがあり、8 台のサーバーがダウンしてもクラスターの読み取りは可能ですが、データの書き込みには 9 台のサーバーが必要です。

一貫性
Minio は分散モードおよびスタンドアロン モードで、すべての読み取りおよび書き込み操作は読み取り後書き込み一貫性モデルに厳密に従います。

2.2.1.4 注意事項

分散 Minio インスタンスを開始するには、ハードディスクの場所をパラメータとして minio サーバー コマンドに渡すだけでよく、その後、他のすべてのノードで同じコマンドを実行する必要があります。

  • 分散 Minio のすべてのノードは、これらのノードが接続を確立できるように、同じアクセス キーと秘密キーを持つ必要があります。これを実現するには、minicserver コマンドを実行する前に、アクセス キーと秘密キーを環境変数にエクスポートする必要があります。新しいバージョンでは MINIO_ROOT_USER&MINIO_ROOT_PASSWORD を使用します。
  • 分散 Minio が使用するディスクはクリーンで、データが含まれていない必要があります。
  • 分散 Minio のノード間の時間差は 3 秒を超えることはできず、NTP を使用して一貫した時間を確保できます。
  • Windows 上で分散 Minio を実行するのは実験段階です。ご安心ください。

2.2.2 基本的な使用例

実験 3: Docker クラスター モードを開始する

前提:

このチュートリアルでは、MinIO を実行しているすべてのホストが、RHEL8+ や Ubuntu 18.04+ などの推奨 Linux オペレーティング システムを使用していることを前提としています

ステップ 1: ファイル ディレクトリを作成する
cd /opt
mkdir minio
ステップ 2: リソース ディレクトリをマウントする
sudo mount /dev/sda3 /opt/minio

例証します:

  • 事前にリソースディレクトリを確認してください

    lsblk
    

    ここに画像の説明を挿入します

ステップ 3: 起動時の自動マウントを設定する
sudo nano /etc/fstab
/dev/sda3 /info/minio ext4 defaults 0 0
ステップ 4: Docker の起動

知らせ:

  • すべてのノードは 3 秒以内に完了する必要があります
  • すべてのノードのリソースは空である必要があります
  • すべてのノードのホスト名は異なっていて、順序どおりである必要があります。

4 つの仮想マシンでそれぞれ次のコマンドを実行します。

sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host1" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host2" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host3" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host4" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \

例証します:

  • ここでは、1 ノードに 8 台のハードディスクを搭載する構成とします。
  • 搭載されるハードディスクの数が 2 ~ 16 であることに注意してください。
  • MinIo オブジェクト ストレージ サービスが分散クラスターを使用して構築されている場合、MinIo 内でイレイジャー コーディング モードが自動的にオンになります。

補充:

前提として、各仮想マシンは相互に ping できる必要があります。

知らせ:

  • 初期ファイルにファイルが含まれている場合は、次のプロンプトが表示されます。

    ERROR Unable to initialize backend: /data1 drive is already being used in another erasure deployment. (Number of drives specified: 16 but the number of drives found in the 1st drive's format.json: 4)
    

    例証します:

    このとき、マウントパスが必要なリソースを削除するか、マウントディレクトリを変更してください。

知らせ:

  • 他のホストに問題がある場合は、次のプロンプトが表示されます。

    API: SYSTEM()
    Time: 08:07:08 UTC 06/06/2023
    Error: Read failed. Insufficient number of drives online (*errors.errorString)
           6: internal/logger/logger.go:258:logger.LogIf()
           5: cmd/prepare-storage.go:246:cmd.connectLoadInitFormats()
           4: cmd/prepare-storage.go:304:cmd.waitForFormatErasure()
           3: cmd/erasure-server-pool.go:103:cmd.newErasureServerPools()
           2: cmd/server-main.go:810:cmd.newObjectLayer()
           1: cmd/server-main.go:611:cmd.serverMain()
    Waiting for a minimum of 2 drives to come online (elapsed 16s)
    

    例証します:

    現時点で他のノードのログを表示する

知らせ:

知らせ:

  • マウントされているハードディスクの容量が足りない場合は、以下のプロンプトが表示されます。

    Error: Unable to initialize backend: failed to load rebalance data: Storage resources are insufficient for the read operation .minio.sys/rebalance.bin, retrying in 4.452062213s (*fmt.wrapError)
    

    例証します:

    ハードディスクの容量を増やし、ハードディスクが正常にマウントされているか確認し、ハードディスクのマウントパスを変更する必要があります。

ステップ 5: MinIo を使用する

ここに画像の説明を挿入します

知らせ:

  • 通常の使用中にノードがダウンすると、次のプロンプトが表示されます。

    Storage resources are insufficient for the write operation .minio.sys/tmp/d74be3f0-856f-4532-802b-871b44204f2a/92c33006-b79a-4560-bd65-0f40cb810d63/part.1
    

    例証します:

    この時点で、ノードサービスを使用して確認してください

ステップ 6: ロードバランサを作成する

前提条件: Nginx サービスがコンピューターにインストールされている必要があります。詳細については、ログを確認してください。

1. nginxのdefault.conf設定ファイルを変更する

upstream minio{
    server 10.13.165.121:9000;
    server 10.13.165.122:9000;
    server 10.13.165.125:9000;
    server 10.13.165.199:9000;
}
upstream console{
    ip_hash;
    server 10.13.165.121:9090;
    server 10.13.165.122:9090;
    server 10.13.165.125:9090;
    server 10.13.165.199:9090;
}

server {
    listen       8000;
    listen  [::]:8000;
    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_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;
    }
}

server {
    listen       8080;
    listen  [::]:8080;
    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_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;

        proxy_pass http://console;
         
     }
}

例証します:

上記はNginx設定ファイルの例ですが、各設定項目の意味を以下に説明します。

  • listen: Nginx がリッスンするポート番号を指定します。ここでは 9000 です。IPv6 を使用して、[::]:9000IPv6 リクエストと IPv4 リクエストを同時にリッスンすることを示します。

  • server_name: このサーバー ブロックのドメイン名またはホスト名を定義します。ここに設定するlocalhostと、要求されたドメイン名が localhost のリクエストが処理されることになります。

  • ignore_invalid_headers: 無効なリクエスト ヘッダーを無視するかどうかを制御します。デフォルトは でoff、無視しないことを示します。

  • client_max_body_size: クライアントリクエストボディの最大サイズを定義します。0 に設定すると、ファイル サイズの制限がないことを意味します。

  • proxy_buffering: プロキシ バッファリングを有効にするかどうかを制御します。デフォルトは でoff、無効であることを意味します。

  • location /: Nginx のリクエスト処理場所を定義します。ここはルート ディレクトリです/すべてのリクエストがこの場所の構成に従って処理されることを示します。

  • proxy_set_header: リクエスト ヘッダーに、HostX-Real-IPX-Forwarded-Forなどのいくつかの変数値を設定しますX-Forwarded-Proto

  • proxy_connect_timeout: バックエンドサーバーとの接続を確立するためのタイムアウトを設定します。

  • proxy_http_version: バックエンドサーバーとの通信に使用される HTTP プロトコルのバージョンを指定します。

  • proxy_set_header Connection "";: リクエスト ヘッダーのフィールドをConnection空に設定し、接続が維持されないことを示します。

  • chunked_transfer_encoding: チャンク転送エンコーディングを有効にするかどうかを制御します。デフォルトはoff無効です。

  • proxy_pass: プロキシによって転送されるターゲット サーバーのアドレスを指定します。ここでは、指定されたバックエンド サーバーhttp://minioにリクエストを転送することを意味します。minio

minio上記の構成により、Nginx はポート 9000 でリクエストをリッスンし、処理用に指定されたバックエンド サーバーにリクエストを転送します。同時に、リクエストヘッダー、タイムアウト期間、HTTP プロトコルのバージョンなどを設定してリクエストをカスタマイズすることもできます。

2.Nginxを起動する

docker run \
-p 8000:8000 \
-p 8080:8080 \
--name nginx \
--restart=always \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/log:/var/log/nginx \
-v /opt/nginx/html:/usr/share/nginx/html \
-d nginx:latest

例証します:

これまでのところ、nginx が構築されています。http://10.13.165.121:8080/、http://10.13.165.121:8000/ にアクセスしてプロキシを正常に実行します。

ここに画像の説明を挿入します

3.インターフェースの使用法

3.1 accessKeyとsecretKeyの取得

1.ユーザーの作成
ここに画像の説明を挿入します

2. キーを作成する

ここに画像の説明を挿入します

ログ

参考ドキュメント:

みにお | 高性能、Kubernetes ネイティブ オブジェクト ストレージ

Minio SDK - Python クライアント API ドキュメント - 《Minio Cookbook 中国語版》 - 书栈网 · BookStack

minio/minio-py: Python 用 MinIO クライアント SDK (github.com)

完全な例 - Java Photo API サービス - 「Minio Cookbook 中国語版」 - BookStack.com · BookStack

minio/minio: AI 用の高性能オブジェクト ストレージ (github.com)

知らせ:

ドキュメントを参照する場合、これは落とし穴です。中国語ドキュメントの更新が間に合わないため、英語ドキュメントを参照する必要があります。

Docker で Nginx をインストールする

ステップ 1: ディレクトリを作成する

# 创建挂载目录
mkdir -p /opt/nginx/conf
mkdir -p /opt/nginx/log
mkdir -p /opt/nginx/html

ステップ 2: 実行権限を追加する

chmod 777 nginx

ステップ 3: コンテナーの生成

docker run --name nginx -p 9001:80 -d nginx

ステップ 4: nginx.conf ファイルをコピーする

docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf

ここに画像の説明を挿入します

ステップ 5: conf.d フォルダーをコピーする

docker cp nginx:/etc/nginx/conf.d /opt/nginx/conf/conf.d

ここに画像の説明を挿入します

ステップ 6: html フォルダーをコピーする

docker cp nginx:/usr/share/nginx/html /opt/nginx/

ここに画像の説明を挿入します

ステップ 7: コンテナーを削除する

# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx

ステップ 8: コンテナーを再実行する

docker run \
-p 8080:80 \
--name nginx \
--restart=always \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/log:/var/log/nginx \
-v /opt/nginx/html:/usr/share/nginx/html \
-d nginx:latest

ステップ 9: ブラウザ経由で nginx にアクセスする

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/D_boj/article/details/131117462