最近、Nginxばっかやな。けどこの耐久レースはまだ続くぜw
今回はNginxでロードバランス構成を検証するで
ロードバランスとは
load(負荷)balace(均衡を保つ)という意味から大体察すると思うけど、
一つのサーバにアクセスが集中するとサーバのCPUやメモリの使用率が上昇して、処理が重くなったり、サーバが止まってしまい、アクセスがしばらくできなくなってしまうこともありうるのね
それをアクセスを複数のサーバに分散させることで、一つのサーバにアクセスが集中しないように負荷を調整するのがロードバランスっていう
構築
今回のプロジェクトはこちら、https://github.com/smithshiro/nginx_load_balancer_sample.git
docker-compose.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
version: '3' services: load_balancer_nginx: image: nginx:latest volumes: - ./docker/load_balancer_nginx/default.conf:/etc/nginx/conf.d/default.conf ports: - 10088:80 depends_on: - origin1_nginx - origin2_nginx - origin3_nginx origin1_nginx: image: nginx:latest volumes: - ./docker/origin_nginx/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/html origin2_nginx: image: nginx:latest volumes: - ./docker/origin_nginx/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/html origin3_nginx: image: nginx:latest volumes: - ./docker/origin_nginx/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/html |
ロードバランサ用のNginxと実ファイルを返すオリジンサーバのNginx3つを立ち上げて
ロードバランサを入り口として、末端のオリジンたちにリクエストが届けっていう構成である
load_balancer_nginxのdefault.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
upstream origins { server origin1_nginx:80 weight=1; server origin2_nginx:80 weight=1; server origin3_nginx:80 weight=1; } server { listen 80; server_name localhost; access_log /var/log/nginx/load_balancer_access.log; location / { proxy_pass http://origins; } } |
ロードバランス機能を提供する新しいディレクティブが出てきたので紹介
upstream
コンテキスト | http |
説明 | アップストリームサーバのグループを定義する |
デフォルト値 | なし |
オリジンサーバたちをoriginsとして、location内のproxy_passで指定し、リクエストをオリジンたちに横流しできるってわけだぁ
origin_nginxのdefault.conf
1 2 3 4 5 6 7 8 |
server { listen 80; access_log /var/log/nginx/origin_access.log; location / { root /var/www/html; } } |
い・つ・も・の
とくにこれ以上言うまい
検証
愚直だけど、オリジン3つのコンテナ内部に入ってログファイルを監視した
左からオリジン1,オリジン2,オリジン3の順ね
アクセスをすると、オリジン1 -> オリジン2 -> オリジン3 -> オリジン1 ...
のループでアクセスが回っているのが確認できた
まあ、静的ページの負荷分散ならこれでもある程度使えそうだねw
けど、リクエストごとに別のサーバに投げることで、以前のリクエストでサーバに保持されたセッション情報が次のリクエストでは引き継ぐことができなかったりする懸念もあるので
セッション管理はRedisサーバを立ち上げて、共通管理するとかにした方が良さそうだなとも感じた
まあ、もっと凝ったインフラもぼちぼち作っていくからいずれなー
nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。
nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。