トラフィックの多い Web サイトでは負荷分散を行う必要があります。ここでは、Nginx サーバーでの負荷分散の設定方法を紹介します。参考になれば幸いです。困っている生徒たちよ。
ロード バランシング
まず、ロード バランシングとは何かを簡単に理解しましょう。文字通りに理解すると、N 台のサーバーが負荷を均等に共有することが説明できます。特定のサーバーが高負荷によりダウンし、特定のサーバーがアイドル状態になっている状況。したがって、負荷分散の前提は、複数のサーバーで実現できること、つまり 3 台以上のサーバーで十分であるということです。
テスト環境
サーバーがないため、このテストでは指定されたドメイン名を直接ホストし、VMware に 3 つの CentOS をインストールします。
テスト ドメイン名: a.com
A サーバー IP: 192.168.5.149 (メイン)
B サーバー IP: 192.168.5.27
C サーバーIP :192.168.5.126
導入アイデア
A サーバーをメイン サーバーとして使用し、ドメイン名は A サーバー (192.168.5.149) に直接解決され、Aサーバーは、B サーバー (192.168.5.27) と C サーバー (192.168.5.126) に負荷分散されます。
ドメイン名の解決
実際の環境ではないため、ドメイン名はテスト用の a.com であるため、a.com の解決ホストのファイル設定でのみ実行できます。
開く: C:WindowsSystem32driversetchosts
最後に
192.168.5.149 を追加します a.com
保存して終了し、コマンド モードを開始して ping しますセットアップが成功したかどうかを確認します。
スクリーンショットから、a.com は 192.168.5.149IP に正常に解決されました。
A サーバーの nginx.conf 設定
開くnginx.conf 、ファイルの場所は nginx インストール ディレクトリの conf ディレクトリにあります。
次のコードを http セクションに追加します
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; } server{ listen 80; server_name a.com; location / { proxy_pass http://a.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
nginx を保存して再起動します
B および C サーバーの nginx.conf 設定
nginx.conf を開いて次のコードを追加しますhttp セクションへのコード
server{ listen 80; server_name a.com; index index.html; root /data0/htdocs/www; }
保存して再起動nginx
Test
a.com にアクセスするとき、処理にどのサーバーを使用するかを区別するために、異なるインデックスを書き込みます。サーバー B とサーバー C にそれぞれコンテンツがあり、区別するための .html ファイルです。
ブラウザを開いて a.com にアクセスします。更新すると、すべてのリクエストがメイン サーバー (192.168.5.149) によってサーバー B (192.168.5.27) とサーバー C (192.168.5.126) に割り当てられていることがわかります。 . 負荷分散効果を実現しました。
サーバーの 1 つがダウンした場合はどうなりますか?
特定のサーバーがダウンした場合、アクセスに影響はありますか?
まず例を見てみましょう. 上記の例に基づいて、マシン C サーバー 192.168.5.126 がダウンしていると仮定します (ダウンタイムをシミュレートすることは不可能なので、C サーバーをシャットダウンします)そしてもう一度訪れてください。
アクセス結果:
Cサーバー(192.168.5.126)がダウンしていましたが、Webサイトへのアクセスには影響がなかったことが分かりました。こうすることで、特定のマシンが負荷分散モードでダウンしているためにサイト全体をドラッグダウンすることを心配する必要がなくなります。
b.com も負荷分散を設定する必要がある場合はどうすればよいでしょうか?
a.comの設定と同じでとても簡単です。次のように:
b.com のメイン サーバー IP が 192.168.5.149 であり、負荷が 192.168.5.150 および 192.168.5.151 マシンに分散されていると仮定します。 b.com から IP で 192.168.5.149 に送信します。
次のコードをメイン サーバー (192.168.5.149) の nginx.conf に追加します。
upstream b.com { server 192.168.5.150:80; server 192.168.5.151:80; } server{ listen 80; server_name b.com; location / { proxy_pass http://b.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
を再起動します。 5.150 および 192.168 。5.151 マシンに nginx を設定し、nginx.conf を開き、最後に次のコードを追加します。
server{ listen 80; server_name b.com; index index.html; root /data0/htdocs/www; }
保存して nginx を再起動します
次の手順を完了すると、実装できます。 b.com の負荷分散構成。
メインサーバーはサービスを提供できないのでしょうか?
上記の例では、メイン サーバーの負荷分散を他のサーバーに適用しました。そのため、純粋に転送機能としてサーバーを使用して無駄にならないように、メイン サーバー自体をサーバー リストに追加できますか? 、はい、サービスの提供にも携わっています。
上記の 3 台のサーバーの場合:
A サーバー IP: 192.168.5.149 (メイン)
B サーバー IP: 192.168.5.27
C サーバー IP: 192.168.5.126
ドメイン名をサーバー A に解決し、サーバー A からサーバー B とサーバー C に転送します。その後、サーバー A は転送機能のみを実行します。次に、サーバー A に任せます。サイトサービスも提供します。
まず分析してみましょう。メイン サーバーを上流に追加すると、次の 2 つの状況が発生する可能性があります:
1. メイン サーバーは他の IP に転送され、他の IP サーバーは正常です. Processing;
2. メインサーバーはそれを自分のIPに転送し、その後メインサーバーにIPを割り当てに行きますが、常にローカルマシンに割り当てられると無限ループが発生します。
この問題を解決するにはどうすればよいですか?ポート 80 は負荷分散処理の監視に使用されているため、このサーバーでは a.com へのアクセス要求を処理するためにポート 80 を使用できなくなり、新しいポートを使用する必要があります。そこで、メイン サーバーの nginx.conf に次のコードを追加しました。
server{ listen 8080; server_name a.com; index index.html; root /data0/htdocs/www; }
nginx を再起動し、ブラウザに「a.com:8080」と入力して、アクセスできるかどうかを確認します。結果は正常にアクセスできました。
正常にアクセスできたので、メインサーバーを上流に追加できますが、次のようにポートを変更する必要があります。コード:
upstream a.com { server 192.168.5.126:80; server 192.168.5.27:80; server 127.0.0.1:8080; }
由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。
重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。
主服务器也能正常加入服务了。
最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。
二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。
更多Nginx相关技术文章,请访问Nginx教程栏目进行学习!
以上がnginxで負荷分散を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。