クラウド ネイティブ モードでマルチノード Minio 分散ファイル システムを構築および最適化する方法を説明する 20 枚の写真

クラウド ネイティブ モードでマルチノード Minio 分散ファイル システムを構築および最適化する方法を説明する 20 枚の写真

みなさんこんにちは、Bingheです〜〜

Minio は、分散ストレージ システムの構築に適したオープン ソースの高性能オブジェクト ストレージ サーバーです。高い可用性、スケーラビリティ、データ保護メカニズムを備え、Amazon S3 API と互換性があり、ビッグデータ、クラウド コンピューティング、コンテナ化された環境で広く使用されており、アプリケーションに信頼性が高く効率的なオブジェクト ストレージ サービスを提供します。

1. はじめに

分散型 IM インスタント メッセージング システムは、単一チャットおよびグループ チャット機能を提供し、メッセージの送受信ではテキスト、絵文字、画像、ファイル、音声、ビデオなどをサポートする必要があります。では、メッセージ送信プロセス中に画像、ファイル、音声、その他のリソースをどのように保存するのでしょうか?非常に効果的な保存方法は、高性能な分散ファイル システムに保存することです。

他の分散ファイルシステムを比較した後、メッセージ画像、ファイル、音声、その他のリソースを保存するために最終的に Minio を選択しました。これは主に、Minio ファイル システムが高性能、高スケーラビリティ、簡単なインストールと操作、消失訂正符号を備えているためです。具体的な機能についてはオンラインで確認できるので、ここでは詳しく説明しません。

2. 環境の説明

  • サーバーバージョン: CentOS7
  • ホスト名: binghe102
  • IPアドレス: 192.168.106.102
  • docker-compose: v2.17.3
  • ミニオ画像: minio/minio
  • Nginx イメージ: nginx:1.19.2-alpine

3. docker-composeをインストールする

docker-compose 環境のインストールは比較的簡単です。コマンドラインで次のコマンドを実行して、docker-compose をダウンロードしてインストールします。

 curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

ダウンロードとインストールが正常に完了したら、次のコマンドを使用して docker-compose ソフト リンクを作成します。

 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

次に、以下に示すように docker-compose のバージョンを確認します。

 [root@binghe102]# docker-compose version Docker Compose version v2.17.3

インストールされている docker-compose のバージョンが 2.17.3 であることがわかり、docker-compose が正常にインストールされたことがわかります。

4. 設定ファイルを書く

ここでは、4 つの Minio コンテナがインストールされて起動され、Nginx はイメージやファイルなどのリソースにアクセスするための統一されたアドレスを提供します。そのため、docker-compose ベースで Minio コンテナをインストールするための設定を記述するだけでなく、docker-compose ベースで Nginx をインストールするための設定も記述する必要があります。さらに、nginx.conf ファイルも設定する必要があります。

1. コンテナ構成を記述する

Minio ファイル システムと Nginx は両方とも docker-compose に基づいてインストールされます。したがって、コンテナ構成を記述するときに、Minio コンテナと Nginx コンテナのインストールを同じ構成ファイルに記述し、docker-compose-minio.yml という名前を付けます。

ソースコードについては、environment/docker-compose-minio.yml を参照してください。

 version: '3.2' # 所有容器通用的设置和配置x-minio-common: &minio-common image: minio/minio command: server --console-address ":9001" http://minio{1...4}/data expose: - "9000" environment: MINIO_ROOT_USER: binghe MINIO_ROOT_PASSWORD: binghe123 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 # 启动4个docker容器运行minio服务器实例# 使用nginx反向代理9000端口,负载均衡# 可以通过9001、9002、9003、9004端口访问它们的web console services: minio1: <<: *minio-common hostname: minio1 ports: - "9001:9001" volumes: - ./data/data1:/data minio2: <<: *minio-common hostname: minio2 ports: - "9002:9001" volumes: - ./data/data2:/data minio3: <<: *minio-common hostname: minio3 ports: - "9003:9001" volumes: - ./data/data3:/data minio4: <<: *minio-common hostname: minio4 ports: - "9004:9001" volumes: - ./data/data4:/data nginx: image: nginx:1.19.2-alpine hostname: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro ports: - "9000:9000" depends_on: - minio1 - minio2 - minio3 - minio4

上記の構成では、4 つの Minio サービス コンテナーがインストールされて起動され、Minio コンテナーによってホスト マシンにマップされるポートはそれぞれ 9001 ~ 9004 になります。また、上記の構成では、Minio バックエンド管理アカウントが binghe として設定され、パスワードが binghe123 として設定されていることに注意してください。

2. nginx.conf設定を記述する

4 つの Minio コンテナを起動した後、Nginx を使用して外部アクセスの負荷分散を実行します。コンテナ設定ファイルを書き込む際に、コンテナ内の nginx.conf ファイルとホスト内の nginx.conf ファイルとの対応も指定します。したがって、ホスト上の nginx.conf ファイルも設定する必要があります。

ソースコードについては、environment/nginx.conf を参照してください。

 user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; } 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 { server minio1:9000; server minio2:9000; server minio3:9000; server minio4:9000; } 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_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; } } }

5. コンテナを起動する

1. コンテナを作成して起動する

環境ディレクトリをサーバーにアップロードし、サーバーのコマンドラインを環境ディレクトリに切り替えて、以下のコマンドを入力して Minio コンテナと Nginx コンテナを作成して起動します。

 docker-compose -f docker-compose-minio.yml up -d

コンテナを作成して起動するプロセスは次のとおりです。

 [root@binghe102 environment]# docker-compose -f docker-compose-minio.yml up -d [+] Running 17/17 ✔ minio2 Pulled 219.5s ✔ minio3 Pulled 219.5s ✔ minio1 7 layers [⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 219.5s ✔ d46336f50433 Pull complete 45.3s ✔ be961ec68663 Pull complete 45.7s ✔ 44173c602141 Pull complete 46.1s ✔ a9809a6a679b Pull complete 46.2s ✔ df29d4a76971 Pull complete 46.3s ✔ 2b5a8853d302 Pull complete 46.3s ✔ 84f01ee8dfc1 Pull complete 210.3s ✔ minio4 Pulled 219.5s ✔ nginx 5 layers [⣿⣿⣿⣿⣿] 0B/0B Pulled 54.9s ✔ df20fa9351a1 Pull complete 5.3s ✔ 3db268b1fe8f Pull complete 31.6s ✔ f682f0660e7a Pull complete 31.7s ✔ 7eb0e8838bc0 Pull complete 31.7s ✔ e8bf1226cc17 Pull complete 32.1s [+] Running 6/6 ✔ Network environment_default Created 14.3s ✔ Container environment-minio1-1 Started 140.1s ✔ Container environment-minio3-1 Started 140.2s ✔ Container environment-minio2-1 Started 140.1s ✔ Container environment-minio4-1 Started 140.0s ✔ Container environment-nginx-1 Started

2. 起動状態を確認する

起動が完了したら、サーバーのコマンドラインに入力します。   docker ps  図 4-1 に示すように、起動したコンテナーを表示するには、コマンドを使用します。

minio コンテナの STATUS 列に正常ステータスが表示されている場合は、Minio コンテナが正常に作成され、起動されたことを意味します。

6. Minioを設定する

1.ミニオ

ブラウザを開き、図 4-2 に示すように、アドレス バーに http://192.168.106.102:9001 と入力します。

図 4-3 に示すように、アカウント binghe とパスワード binghe123 を入力して Minio にログインします。

ログイン後のページを図4-4に示します。

ご覧のとおり、Minio サービス インスタンスは合計 4 つあります。

ページの右側にあるスクロール バーをスライドすると、[SERVERS] オプションの下に、図 4-5 に示すように、4 つの特定のサービス インスタンス情報が表示されます。

DRIVES オプションに切り替えると、図 4-6 に示すように、4 つのサービス インスタンスの DRIVE 情報が表示されます。

2. バケットを作成する

図 4-7 に示すように、分散 IM インスタント メッセージング システムのメッセージ送信プロセス中に画像、ファイル、音声などのリソースを保存するために、Minio ファイル システムに bh-im という名前のバケットを作成します。

次に、図 4-8 に示すように、[バケット名] 列に bh-im と入力します。

バケットを作成するには、「バケットの作成」ボタンをクリックします。次に、図 4-9 に示すように、[バケット] メニューをクリックしてバケット情報を表示します。

bh-im という名前のバケットが正常に作成されたことがわかります。図 4-10 に示すように、[管理] をクリックします。

図 4-11 に示すように、bh-im バケットの Summary のアクセス ポリシーをプライベートからパブリックに変更します。

変更が完了すると、図4-12のようになります。

3. パフォーマンスを最適化する

バケットを作成したら、Minio ファイル システムの複数のノード間の同期パフォーマンスを最適化しましょう。 [設定]メニュー - [スキャナー]サブメニューを選択し、図4-13に示すように、[遅延乗数]、[最大待機時間]、および[サイクル]の値を設定します。

ご覧のとおり、ここでは、複数の Minio ノード間の同期効率を上げるために、遅延乗数を 10 に、最大待機時間とサイクルを 1 秒に設定しています。

7. Minioのテスト

図 4-14 に示すように、[バケット - 参照] を選択します。

参照ページに入ると、ページは図 4-15 のように表示されます。

ここでは、上向き矢印ボタンをクリックして写真をアップロードします。アップロードが完了すると、図4-16のように表示されます。

次に、図 4-17 に示すように、画像をクリックして詳細を入力します。

写真の詳細ページに入ったら、図 4-18 に示すように、[共有] ボタンをクリックします。

共有ボタンをクリックすると、結果は図 4-19 のようになります。

ご覧のとおり、共有ページでは写真のアクセス リンクが提供されます。ここで、「コピー」ボタンをクリックして画像リンクをコピーします。コピーした画像リンクは以下のようになります。

 http://172.18.0.4:9000/bh-im/2.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=9X4104YB84KCT5XGQKSW%2F20231224%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231224T073947Z&X-Amz-Expires=604800&X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiI5WDQxMDRZQjg0S0NUNVhHUUtTVyIsImV4cCI6MTcwMzQwNDY3MCwicGFyZW50IjoiYmluZ2hlIn0.h611ez9SqsGcw-pEeXLp59_IpotFGmx1LeNzgGQdjJdAiYXm4f0EQ-ADgkxlr3UPIbR6-hQxYR__As_oo02BHg&X-Amz-SignedHeaders=host&versinotallow=null&X-Amz-Signature=4d2128b0da332fbbba8dfedea4ede07051c9376365e76bf12e4e658b8020747f

Minio 分散ファイルシステム内のリソースに均一にアクセスするように Nginx を構成したので、ここでは IP アドレス172.18.0.4192.168.106.102に変更し、ブラウザのアドレス バーで次のリンクを開きます。

 http://192.168.106.102:9000/bh-im/2.jpg

図 4-20 に示すように、ブラウザのアドレス バーで IP アドレスを変更した後、リンク アドレスを開きます。

ご覧のとおり、アップロードした写真はブラウザで正常に表示されています。

この時点で、クラウド ネイティブ モードのマルチノード Minio 分散ファイル システム環境が構築されました。

8. 最後に

これらの実際のシナリオのプロジェクト設計と実装、分散 IM インスタント メッセージング システムに加えて、Iceberg の Knowledge Planet には他に 5 つのプロジェクトがあります。これらのプロジェクトの要件、計画、アーキテクチャ、実装などはすべて実際のインターネットビジネスシナリオからのものであり、大手インターネット企業のビジネスおよびテクノロジー実装計画を真に学び、それを効果的に自分の知識蓄積に変換することができます。

<<:  コンテナの「エッジ」

>>:  クラウドコンピューティング:現代のテクノロジーに不可欠な要素

推薦する

「技術的な流れ」を通じてウェブサイトのユーザーを維持し、ウェブサイトの急速な発展を促進する

技術フローは、中国では常に馴染みのない言葉でした。多くの国内技術が閉鎖的な状態にあるためです。今日は...

ウェブサイト構築に推奨されるクラシック VPS: Kazila - $7/Xen/4 コア/1g メモリ/20g SSD/1T トラフィック

Kazila のプロモーションを見たとき、これを投稿しなければなりませんでした。Kazila、この ...

locvpsロシアcn2 giaハイエンドラインvpsの簡単なテスト、速度は非常に良いです

locvps は、ロシアの vps も提供します。これは、デフォルトでロシアの cn2 gia ライ...

タオバオには独自の「リトルレッドブック」が必要

インターネット製品はユーザーの時間を奪い合うために激しく競争しています。タオバオも非常に不安を抱えて...

タオバオの中小販売業者の生活はますます悲惨になっています!それはすべてあなた自身のせいですか?

誰もが今同じような考えを持っているに違いありません。つまり、タオバオとTmallでビジネスをするのは...

virpus: シアトルの老舗 VPS ベンダー、50% オフ、Xen 仮想化、512M メモリから年間わずか 25 ドルで利用可能

アメリカの老舗 VPS ベンダーである Virpus が、50% 割引のプロモーションを実施していま...

ポップマートは誰のネギを切ったのでしょうか?

ポップマートは「最初のブラインドボックス株」や「最初の流行玩具株」として知られており、数日前に香港証...

CSS関連のSEO対策フロントエンドスタッフがSEO対策コードを書く

SEO の重要性はますます高まっています。SEO はウェブサイトのあらゆるレベルに浸透しています。健...

ModernSolutions: 月額 2.5 ドル、米国 VPS (ロサンゼルス/ダラス)、1G メモリ/1 コア/25g SSD/10T トラフィック/1Gbps 帯域幅

アメリカの企業であるModern Solutionsは、2017年に設立されたと伝えられており、主に...

キーワードがウェブサイトの重みに与える影響についての簡単な説明

今日はせっかくの機会なので、重みとキーワードの重要な関係について私の考えをシェアしたいと思います。 ...

hostmem: 「618 イベント」ロサンゼルス VPS - 30% オフ、年間 9 ドル、KVM/1G メモリ/1 コア/60g ハードディスク/500g トラフィック

hostmem は 618 年半ばのプロモーションを開始しました。QN ロサンゼルス データ センタ...

新しいケータリングの核心はインテリジェントマーケティングです。社交ケータリングの「仁徳経絡」をどう開拓するか?

テキスト | 李星外食産業はほとんどの産業よりも市場規模が大きい。国家統計局が発表したデータによると...

Tmallのダブル11プロモーション手法の簡単な分析

以下のデータを通じて、編集者はダブル11の熱狂に加わり、電子商取引業界の同僚とともにTmallのダブ...

オラクルが最新の財務報告を発表、クラウド事業は依然として「不透明」

世界的に有名なデータ企業オラクルは9月12日、2020年度第1四半期の財務報告を発表した。財務報告に...