Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

Nginx 1.7.10(リバースプロキシ)&Apache(Webサーバ)を使用したロードバランシング(負荷分散)

こんにちは、鯨井貴博@opensourcetechです。

 

今回は、Nginx1.7.10を使用してロードバランシングを行ってみようと思います。

なお、バックエンドには、Apacheを3台使用して構成しています。

 

構成説明

Client-------Nginx(192.168.11.150)------Apache(192.168.11.151)

                                                             Apache(192.168.11.152)

                                                             Apache(192.168.11.153)

 

 

まず、バックエンドのApacheを構築します。

OSとしては、virtualbox上にCentOS6.6_x64を使用しています。

yum install httpd

f:id:opensourcetech:20150213170459p:plain

rpm -q httpd(インストール確認)

f:id:opensourcetech:20150213170505p:plain

続いて、apacheの設定をします。

vi /etc/httpd/conf/httpd.conf

今回は、apacheをVirtualhostとして設定して3台に見せかけています。

f:id:opensourcetech:20150213170508p:plain

 

また、各Virtualhostのindex.htmlとして、

以下のような簡単な内容を作成しました。

f:id:opensourcetech:20150213170511p:plain

 

/etc/init.d/httpd startでapacheを起動。

f:id:opensourcetech:20150213170515p:plain

 

iptablesを編集し、TCP80の通信を許可しておきます。

iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT

iptables -L --line-numbers

f:id:opensourcetech:20150213170518p:plain

 

また、SELinuxについても有効化されている場合、

無効化などの対応をしておきます。

setenforce 0

getenforce

f:id:opensourcetech:20150213170521p:plain

 

ちなみに各Virtualhostへクライアントからアクセスした場合、

以下のように背景色が異なるコンテンツにアクセスします。

f:id:opensourcetech:20150213170525p:plain

f:id:opensourcetech:20150213170535p:plain

f:id:opensourcetech:20150213170542p:plain

 

 

続いて、Nginxを構築します。

まず、Nginx mainline用のレポジトリファイルを追加して、

yum install nginx

f:id:opensourcetech:20150213171116p:plain

f:id:opensourcetech:20150213171119p:plain

 

rpm -q nginxと/usr/sbin/nginx -Vにて、

インストール後の確認をしておきます。

f:id:opensourcetech:20150213171124p:plain

 

Nginxの設定を/etc/nginxディレクトリ内のnginx.confに行います。

vi /etc/nginx/nginx.conf

f:id:opensourcetech:20150213171135p:plain

 

編集内容としては、

以下のようにupstreamブロックにバランシング対象のサーバを設定します。

※デフォルトでは、ラウンド・ロビンで負荷分散します。

f:id:opensourcetech:20150213171141p:plain

f:id:opensourcetech:20150213171145p:plain

 

/etc/init.d/nginx startでNginxの起動、

netstat -tan | grep 80で起動確認をします。

f:id:opensourcetech:20150213171152p:plain

 

また、Apache同様にiptablesにてTCP80の通信を許可しておきます。

iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT

iptables -L --line-numbers

f:id:opensourcetech:20150213171159p:plain

 

 

ロードバランシングの動作確認については、

xamppなどに含まれているApache Bench(abコマンド)を使用します。

https://www.apachefriends.org/jp/index.html

f:id:opensourcetech:20150213171234p:plain

 

WindowsのDoS promptから

ab.exe -n 100 http://192.168.11.150とします。

※Path(パス)にご注意下さい。

f:id:opensourcetech:20150213171240p:plain

 

tcpdump等で取得したパケットキャプチャを見ると、

確かに負荷分散(デフォルトのラウンド・ロビン)しています。

f:id:opensourcetech:20150213171312p:plain

 

 また、weight=2などとすることで重み付けも可能です。

f:id:opensourcetech:20150213171331p:plain

パケットキャプチャを見ると、

きちんと重み付けがされていますね。

f:id:opensourcetech:20150213171340p:plain

 

ラウンド・ロビン(round-robin)の他にも、

クライアントIPによってサーバを固定するip_hashや、

最少コネクションのサーバを使用するleast_connもあります。

f:id:opensourcetech:20150213171400p:plain

f:id:opensourcetech:20150213171404p:plain

 

 また、

max_fails=3 fail_timeout=10sとすることで、

10秒間に3回の通信失敗があった場合、

そのサーバが動作していないとNginxに判断させることがも出来ます。

backupを設定し、他のサーバが動作しなくなるなった場合のみ負荷分散対象とすることも出来ます。

f:id:opensourcetech:20150213171414p:plain

 

通常サーバが動作している状態のパケットキャプチャ

f:id:opensourcetech:20150213171421p:plain

 

backupのみ動作している状態のパケットキャプチャ

f:id:opensourcetech:20150213171428p:plain

 

 

 

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

Opensourcetech by Takahiro Kujirai