ロードバランサ(負荷分散装置)入門2
Introduction to LoadBalancer vol.2
(菅野 明洋 : FPTS Field Researcher)
(Akihiro Sugeno : FPTS Field Researcher)
本資料は会合後にディスカッションされた内容をふまえ記載しています。他の会合の状況を踏まえ、多少ブラッシュアップを行っていく予定です。
Comment
■はじめに
■Introduction
この資料では、「映像制作パイプラインとアーティストのテクニック 6」に参加する映像系やゲーム系の参加者間のディスカッションのために、様々なロードバランサーの役割やインフラ構築上のポイントを紹介したいと思います。
また、ロードバランサの仕組みを軽く知ることで設計やトラブルシュートの助けになったら幸いです。
under construction...
■概要
■Overview
他のコンピュータからアクセスされるサーバは、クライアントからのアクセスが集中した際には大きな負荷がかかります。
アクセス集中したサーバの負荷を軽減し、システム全体の処理量を増やすためには同じ役割を持つサーバを複数用意し、アクセスを分散させる仕組みが必要になります。
一例として、Webサーバなどの負荷分散の方法は、Webサーバを複数用意しロードバランサを用いて外部からのアクセスを各Webサーバに転送します。
本項目はオープンソフトウェアのWebサーバプログラムである「Nginx」を使って簡単なロードバランサの構築方法を紹介します。
ロードバランサの概要については「ロードバランサ(負荷分散装置)入門1」にて紹介しております。
under construction...
■概要図
■Design example
上記はロードバランサ(Nginx)の配下にWebサーバを3台セットした例になります。
本項は、3台のWebサーバに転送する前提で説明します。
本項にてロードバランサ配下のWebサーバの構築方法まで後述しませんが簡単なWebサーバ1台用意してお試しください。
under construction...
■Nginxの構築
■Install nginx on CentOS 7's server
- Nginxのリポジトリのインストール
# Nginxリポジトリのインストール
yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- Nginxのインストール
# Nginxのインストール
yum install nginx
# Welcomeページ削除
rm /etc/nginx/conf.d/default.conf
# Nginxの起動
systemctl start nginx.service
- Firewall設定
# 80番ポートの開放
firewall-cmd --add-port=80/tcp --zone=public --permanent
# firewallの設定再読込
firewall-cmd --reload
# Nginxリポジトリのインストール yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# Nginxのインストール yum install nginx # Welcomeページ削除 rm /etc/nginx/conf.d/default.conf # Nginxの起動 systemctl start nginx.service
# 80番ポートの開放 firewall-cmd --add-port=80/tcp --zone=public --permanent # firewallの設定再読込 firewall-cmd --reload
under construction...
■ロードバランサ設定(ラウンドロビン)
■Load balancer setting(round robin)
- ロードバランシング設定
/etc/nginx/conf.d/loadbalancer.confに下記の設定を記述します。
upstream webserver {
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
- Nginxの設定反映
# Nginxの起動
systemctl reload nginx.service
上記の設定を適用するとNginxのロードバランサの実装は完了です。
他の実装例も後述しておりますので、参考になりましたら幸いです。
upstream webserver { server 192.168.0.1; server 192.168.0.2; server 192.168.0.3; } server { listen 80; location / { proxy_pass http://webserver; } }
# Nginxの起動 systemctl reload nginx.service
under construction...
■ロードバランサ設定(他の例)
■Load balancer setting(other examples)
- ロードバランシング設定(IPハッシュ)
/etc/nginx/conf.d/loadbalancer.confに下記の設定を記述します。
同じIPアドレスのクライアントを同じサーバに転送したい場合は、先ほどの設定のupstreamディレクティブに「ip_hash」を付け加えます。
upstream webserver {
ip_hash;
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
- ロードバランシング設定(リーストコネクション)
/etc/nginx/conf.d/loadbalancer.confに下記の設定を記述します。
接続数が少ないサーバへ転送する場合は、先ほどの設定のupstreamディレクティブに「least_conn」を付け加えます。
upstream webserver {
least_conn;
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
- ロードバランシング設定(重み付けラウンドロビン)
/etc/nginx/conf.d/loadbalancer.confに下記の設定を記述します。
特定のサーバのみ多く転送(重み付けラウンドロビン)する場合は、先ほどの設定のupstreamディレクティブのサーバ情報の末尾に「weight=X」を付け加えます。
下記の例は、「192.168.0.1」を3、他は1の割合で転送しています。
upstream webserver {
server 192.168.0.1; weight=3;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
同じIPアドレスのクライアントを同じサーバに転送したい場合は、先ほどの設定のupstreamディレクティブに「ip_hash」を付け加えます。
upstream webserver { ip_hash; server 192.168.0.1; server 192.168.0.2; server 192.168.0.3; } server { listen 80; location / { proxy_pass http://webserver; } }
接続数が少ないサーバへ転送する場合は、先ほどの設定のupstreamディレクティブに「least_conn」を付け加えます。
upstream webserver { least_conn; server 192.168.0.1; server 192.168.0.2; server 192.168.0.3; } server { listen 80; location / { proxy_pass http://webserver; } }
特定のサーバのみ多く転送(重み付けラウンドロビン)する場合は、先ほどの設定のupstreamディレクティブのサーバ情報の末尾に「weight=X」を付け加えます。
下記の例は、「192.168.0.1」を3、他は1の割合で転送しています。
upstream webserver { server 192.168.0.1; weight=3; server 192.168.0.2; server 192.168.0.3; } server { listen 80; location / { proxy_pass http://webserver; } }