🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

Q&A

1回答

1440閲覧

nginxを用いてリクエストの負荷分散のオリジナル方式を実装したいです

apeirogon0813

総合スコア117

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0グッド

2クリップ

投稿2019/11/26 20:18

nginxによる負荷分散はLVSより比較的容易に実装できるということで,
ある閾値のリクエスト量を超えるまで,サーバ1がレスポンスするようにし,
その閾値を超えた時からはサーバ2にリクエストを送り続けるように,
負荷分散を行うような方式を独自に実装したいのですが,

nginxでは,ラウンドロビンや最小接続数やハッシュなど,もともと備わっている機能でしか負荷分散を行えないのでしょうか?

また,nginx以外に上記の方式を実装できる方法があるならご教示いただけると幸いです.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/27 01:17

興味本位の追記依頼ですが、これ、どういった要件でそのような分散(?)がしたいのでしょうか?なんとなく平時のサーバ2のリソースがもったいない気がします。
guest

回答1

0

nginxでは,ラウンドロビンや最小接続数やハッシュなど,もともと備わっている機能でしか負荷分散を行えないのでしょうか?

Yes.

nginx に限りませんが、ソフトウェアがサポートしていないオリジナルの機能を追加するには、基本的にソフトウェアの改造や拡張が必要です。

nginx だと lua-nginx-module という「lua スクリプトを使って予めフックが用意されている部分の機能を拡張できる」モジュールが用意されているので、lua スクリプトで記載できる内容であれば対応することも可能と思います。

たとえば、特定条件でアクセスするサーバーを変更するのであれば、Nginx+Lua+Redisによる動的なリバースプロキシの実装案 のような例があります。


また、細かい条件が不明ですが、規定値を超えた場合にサーバーを切り替えるだけなら、サーバー1のリクエスト量を監視して超えたら 新しいサーバー2のIP アドレスを参照するように DNS に登録されている IPアドレスを動的に変更するようなスクリプトで対応できるような気がします。

例えば、bind で構築された dns なら、ゾーンに対して予め動的更新できるような設定にしておけば、nsupdate コマンドで、dns の内容を更新できます。

参考:
Dynamic DNSの基礎とnsupdateコマンド

投稿2019/11/26 22:07

編集2019/11/27 00:24
CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apeirogon0813

2019/11/27 00:35 編集

ありがとうございます. やはり,nginxやlinuxのLVSなどはオリジナルの負荷分散方法は困難なのですね. DNSに関しては,DNSラウンドロビンだけかと思っていました. このように,オリジナルの分散を考えるなら,スクリプトで実装した方が,柔軟な負荷分散を構築しやすいのでしょうか?
CHERRY

2019/11/27 01:08

質問タイトルからは、負荷分散やスケーリングかと思ったのですが、「閾値をこえる」「送り続ける」というキーワードで、負荷分散というよりは、「転送量の制限値上限になった際にアクセスを別のサーバーに切り替える」というフェイルオーバー的な要素が強いのかと思ったので、スクリプトで切り替える案を記載しました。
apeirogon0813

2019/11/28 19:16 編集

ご返事が遅くなりすみません。ありがとうございます。 >サーバ1のリクエスト量を監視... とありますが、どのような監視方法があるのかもご教示していただけたら幸いです。 また、細かい条件なのですか、閾値を超えた際に別のサーバ2に切り替えるのですが、サーバ1の閾値を再び超えなくなった場合に、リクエストをサーバ2に切り替えていたものを再びサーバ1に切り替える場合、DNSのnsupdateコマンドでは、不可能でしょうか? また、 lua-nginx-moduleでは可能でしょうか? ご教示よろしくお願いいたします。
CHERRY

2019/11/28 22:53 編集

> どのような監視方法があるのかもご教示していただけたら幸いです。 何を基準にするのかを決めて、その情報がどのように取得するのか等は、サーバーに依存するので、サーバーの情報がない限りわかりません。 仮に root 権限があり、サーバーにソフトウェアの導入や設定が自由に設定できるのであれば、zabbix 等の監視ツールを導入するのが簡単ではないでしょうか。 > リクエストをサーバ2に切り替えていたものを再びサーバ1に切り替える場合、DNSのnsupdateコマンドでは、不可能でしょうか? nsupdate コマンドは、 DNS の登録情報を書き換えるコマンドなので、 IP アドレスを変えたのを戻す(再設定する)のであれば可能です。 > lua-nginx-moduleでは可能でしょうか? どのような処理をするかは、lua スクリプトを自分で書いて決めるので、スクリプトの記載次第で可能です。
apeirogon0813

2019/11/29 06:34

ありがとうございます. webサーバは自分のPCにapacheを入れて代用するので,zabbixを導入してみようと思います. しかし,業者から,サブドメインを借りる予定でDNSサーバは業者のものになると思うので,nsupdateは権威DNSサーバにするので,できるのか不安な状況なのですが,可能なのでしょうか? 不可能なら,lua-nginx-moduleに切り替えようと思います.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問