クラウド ネイティブ モードでマルチノード 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 つのプロジェクトがあります。これらのプロジェクトの要件、計画、アーキテクチャ、実装などはすべて実際のインターネットビジネスシナリオからのものであり、大手インターネット企業のビジネスおよびテクノロジー実装計画を真に学び、それを効果的に自分の知識蓄積に変換することができます。

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

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

推薦する

セルフサービス Web サイト構築システムに参加することを選択するときに注意すべき点は何ですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの中小...

AlibabaはOpenJDKの長期サポート版であるAlibaba Dragonwellをオープンソース化し、コミュニティへの還元を継続します。

3月19日のメディア報道によると、アリババはOpenJDKの長期サポート版であるAlibaba Dr...

6月28日以降の百度の変化の分析

6月28日のBaidu K-station事件は多くのウェブマスターに影響を与えたと思います。A5で...

CCTVに訴えられたJikeアプリにとっては幸運な出来事でしょうか?

CCTVがJikeを訴え、Weiboで話題になった事件は、Jikeにとってはむしろ幸運だった。たった...

装飾会社がO2Oマーケティングを行うべき5つのステップ

1. 所有者が装飾を選択する方法を十分に分析します。 1. 友人による紹介:日常生活では、周りの友人...

今日の話題: 生ぬるい短編ビデオはモバイル インターネットの次の爆発点となり得るか?

A5 Webmaster Network(www.admin5.com)は5月21日、ビデオアプリケ...

Google アナリティクスで顧客からの電話を追跡および分析する方法

9月の深センウェブサイト分析共有イベントで、友人が顧客コールトラッキングの内容について質問しました。...

Baidu ウェブマスターツールからのウェブサイト SEO のいくつかの重要な側面

内部の改訂とアップグレードを経て、Baidu の新しいウェブマスター ツールは非常に使いやすくなり、...

ジャック・マーが約束を破る:タオバオのトラフィック収益化を加速するためにウェブゲームに注力

資金ギャップを維持し、複数の事業を運営するために、タオバオはトラフィックと仮想取引の支払い条件を活用...

ウェブサイトの計画における2つの誤解

最初の誤解は、多くの企業がウェブサイトの計画と構築は非常に簡単なことだと考えていることです。IT 技...

クラウドベースのアプリケーションを保護するための攻撃チェーンアプローチの改善

情報セキュリティの専門家は、サイバー侵入を識別して防止するためのサイバー攻撃チェーン フレームワーク...

入札自体は悪いことではないが、360度は合理的であるべきだ

草の根ウェブマスターとして、私は検索業界の変化に対して無力感を感じています。大手企業間の検索紛争によ...

最適化が難しくなるにつれて、インターネット企業は注文の失敗をどのように回避できるでしょうか?

今日、鄭州のあるインターネット企業とグループチャットをしていたところ、最適化の難易度が増し、コスト投...

スタートアップのOxideはクラウドコンピューティングとローカル展開の利点を組み合わせようとしている

Joyent と Dell のコンピューティング専門家によって設立されたスタートアップ企業 Oxid...

ブログマーケティングを通じて口コミを構築する方法についての母子企業からの3つの啓示

優れたブログは、企業にとって独立した販売チャネルとなり、顧客関係を維持するためのプラットフォームとな...