これは、クラウド アプリケーションとアプリ開発および配信に対するDevOpsアプローチに特化した分散オブジェクト ストレージ サーバーであるMinioのソフトウェア開発者である Nitish Tiwari によるゲスト ブログ投稿です。 Nitish の関心分野には、ソフトウェア ベースのインフラストラクチャ、特にストレージと分散システムが含まれます。
この投稿では、Nitish が、NGINX と NGINX Plus を Minio サーバーのリバース プロキシおよびロード バランサーとして使用する方法について説明します。 この投稿は NGINX と NGINX Plus に等しく適用されますが、簡潔にするために NGINX Plus のみについて言及しています。
ほとんどすべてのアプリケーションにはストレージが必要ですが、アプリケーションによってストレージの必要性や使用方法は異なります。 たとえば、ドキュメント ストアを考えてみましょう。ドキュメント ストアは、規模が小さいときには頻繁な読み取り要求に対応する必要はありませんが、時間の経過とともに拡張する必要があります。 画像ギャラリーなどの別のアプリケーションでは、要求を迅速に満たすとともに、時間とともに拡張する必要があります。
これらの微妙な違いにより、ストレージのセットアップが難しくなります。 しかし、すべてが暗いわけではありません。非構造化データを保存するデフォルトの方法としてオブジェクト ストレージが登場したことで、 HTTP がデフォルトの通信モードとなり、アプリケーションがストレージと通信する方法が標準化されました。
それでも、疑問は残ります。 アプリケーション要件に合わせてカスタマイズされながらも柔軟性のあるオブジェクト ストレージ セットアップを構築するにはどうすればよいでしょうか?
オブジェクト ストレージには HTTP サーバーとクライアントが関係するため、HTTP トラフィックを処理するために、NGINX Plus などの多目的 Web サーバーを前面に配置するのが合理的です。 Minio などの軽量オブジェクト ストレージ サーバーを使用すると、バックエンドでスケーラブルなストレージを提供できます。 このようなシステムの柔軟性が、エンタープライズ グレードのサービスを作成するための鍵となります。
NGINX Plus を使用すると、管理者は着信トラフィックの負荷分散だけでなく、SSL/TLS のキャッシュ、スロットリング、終了、さらにはさまざまなパラメータに基づいてトラフィックのフィルタリングも実行できます。 一方、Minio は、 Amazon S3と互換性のある軽量オブジェクト ストレージ サーバーを提供します。
MinIO はAI ストレージ用に構築されており、写真、ビデオ、ログ ファイル、バックアップ、VM およびコンテナ イメージなどの非構造化データの保存に最適です。 Minio サーバーは、Node.js、Redis、MySQL と同様に、applicationスタックにバンドルできるほど軽量です。 Minio は分散モードもサポートしており、異なるマシン上にある複数のドライブを単一のオブジェクト ストレージ サーバーにプールできます。
この記事では、NGINX Plus のいくつかの機能についてさまざまなユースケースで説明し、それらを Minio と組み合わせて、プロダクション グレードで拡張性と可用性が高く、安定したオブジェクト ストレージ システムを構築する方法を学びます。
NGINX Plus はリバース プロキシ サーバーとしてよく知られています。 しかし、Minio にリバース プロキシが必要なのはなぜでしょうか? いくつかのユースケースを見てみましょう。
mc
)ミラー
コマンドを使用して、Minio による高可用性オブジェクト ストレージ セットアップの一部にすることができます。NGINX Plus は、 proxy_pass
ディレクティブで指定された URL をリッスンしているバックエンド サーバーにリクエストを渡すことで、クライアント トラフィックをリバース プロキシします。 次の構成スニペットでは、スタンドアロンの Minio インスタンスがlocalhost
上で実行されているため、 http://localhost:9000で利用できます。 www.example.comの最上位ディレクトリ ( / ) へのポート 80 経由のすべてのリクエストは Minio に渡されます。 NGINX Plus は、元のリクエストの値をHost
ヘッダーに明示的に設定します。
server { listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
}
複数の Minio サーバーがある場合は、それらをアップストリーム
構成ブロックにリストし、 proxy_pass
ディレクティブでアップストリーム グループを参照することで、サーバー間でトラフィックの負荷を分散します。
アップストリーム minio_servers { サーバーminio-server-1 :9000; サーバーminio-server-2 :9000; }サーバー { listen 80; server_name www.example.com; location / { proxy_set_header Host $http_host; proxy_pass http:// minio_servers ; } }
NGINX または NGINX Plus を Minio のプロキシとして設定する方法の詳細については、 Minio のドキュメントを参照してください。
HTTPS は現在、多くの Web トラフィックのデフォルト プロトコルになっているため、Minio には単なる HTTP サーバーではなく、HTTPS サーバーを導入するのが理にかなっています。 NGINX Plus を HTTPS サーバーとしてセットアップするのは非常に簡単です。 開始するには SSL/TLS 証明書が必要です。Let 's Encrypt は無料の SSL/TLS 証明書を提供し、 NGINX Plus と統合します。
次のステップは、NGINX Plus 構成ファイルを編集することです。 ここでは、 server
ブロックのlisten
ディレクティブにssl
パラメータを指定し、サーバー証明書と秘密鍵を含むファイルを指定する必要があります。
server { listen 80; server_name www.example.com; return 301 https://www.example.com$request_uri; } server { listen 443 ssl ; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }
SSL/TLS 終了の詳細については、 NGINX Plus 管理者ガイドを参照してください。
オブジェクト ストレージ サーバーは速度が速いことでは知られていませんが、クライアントへの応答が遅いということではありません。 NGINX Plus サーバーでキャッシュを有効にすると、頻繁にアクセスされるデータが保存され、リクエストをバックエンド サーバーに転送することなく、すぐにクライアントに返すことができます。
仕組みは以下のとおりです。 NGINX Plus Web キャッシュはクライアントと Minio の間に配置され、要求された各コンテンツ ファイルのコピーを保存します。 クライアントがキャッシュに保存されているコンテンツを要求すると、NGINX Plus は Minio に接続せずにそれを直接返します。 これにより、クライアントへの応答時間が改善され、Minio サーバーの負荷が軽減されます。
proxy_cache_path
およびproxy_cache
ディレクティブを使用して、Minio 用の NGINX Plus キャッシュを設定します。 proxy_cache_path
ディレクティブはキャッシュの場所と構成を設定し、 proxy_cache
ディレクティブはそれをアクティブにします。 詳細については、 「NGINX および NGINX Plus を使用したキャッシュのガイド」を参照してください。
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off ; server { # ... location / { proxy_cache my_cache ; proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }
ビジネス上またはセキュリティ上の理由から、リクエストを制限しなければならない場合があります。 NGINX Plus を使用すると、利用可能な帯域幅、リクエスト数、または接続数を制限できます。
帯域幅を制限するには、 limit_rate
ディレクティブを使用します。 この例では、ダウンロード速度を 1 秒あたり 200 KB に制限します。
サーバー { # ... 場所 /images/ { limit_rate 200k ; # ... } }
リクエストのスロットリングには、 limit_req
およびlimit_req_zone
ディレクティブを使用します。この例では、一意の IP アドレスごとに 1 秒あたり 10 件のリクエストに制限しながら、20 件のリクエストのバーストを許可しています。
limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s ; server { # ... location /images/ { limit_req zone=my_req_limit burst=20 ; # ... } }
接続数を制限するには、 limit_conn
およびlimit_conn_zone
ディレクティブを使用します。 この例では、各固有 IP アドレスの同時接続数を 5 つに制限します。
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; server { # ... location /images/ { limit_conn my_conn_limit 5 ; # ... } }
詳細については、 NGINX Plus 管理者ガイドを参照してください。
この記事では、負荷分散、特に Minio オブジェクト ストレージ サーバーの前での負荷分散のための NGINX Plus の機能の使用方法を説明しました。 NGINX Plus と Minio を組み合わせることで、アプリケーション要件に合わせてカスタマイズされた柔軟なオブジェクト ストレージ サーバーをセットアップできます。
NGINX Plus を使用した負荷分散の詳細については、次のブログ投稿やその他のリソースを参照してください。
NGINX Plus を実際にお試しいただくには、今すぐ30 日間の無料トライアルを開始するか、弊社にお問い合わせの上、使用事例についてご相談ください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"