ロードバランサ(Server Load Balancer)とは、外部から送られくるデータ、リクエストを複数の装置に振り分けて負荷の分散を行うことをいいます。最近 Web サーバとして人気な ngix のリバースプロキシ機能を利用すると、高負荷なサーバのバックエンドに、複数なサーバを用意して容易に負荷分散を行うことができます。ロードバランサには、いろんな方式が存在します。ここでは、もっともよく利用されているラウンドロビン方式 + 重み付けという方式で負荷の分散を行う方法を紹介します。
静的分散方式: 予め決められた順番どおりにリクエストを振り分ける。最小コネクション方式: クライアントとのコネクション数の少ないサーバに振り分ける。ラウンドロビン方式: 分散対象サーバに均等にリクエストを振り分ける
構成は、3台のサーバに nginx をインストールして、1台のサーバにリバースプロキシの設定を行う設定を行います。
weight 3 192.168.0.2 |-----------> nginx (高スペック) | 192.168.0.1 | Web リクエスト-------> nginx--------------| (リバースプロキシ) | | | weight 1 192.168.0.3 |-----------> nginx (低スペック)
nginx のインストールは以下のコマンドで実行します。
$ sudo apt-get -y install nginx
リーバスプロキシの設定を行い。ngix を再起動します。バックエンドで動かす nginx の設定は必要ありません。
[/etc/nginx/conf.d/backend.conf]
upstream backend { server 192.168.0.2:80 weight=3; <- 各バックエンドのサーバを重み付けして設定します。 server 192.168.0.3:80 weight=1; } server { listen 80; server_name example.com; <- example.com へアクセスしてきたリクエストを backend に振り分けます。 location / { proxy_pass http://backend; <- リーバスプロキシの設定 } }
nginx のリスタートを行います。
$ sudo systemctl restart nginx.service
192.168.0.1(example.com) へ4回ブラウザよりアクセスしてバックエンドのサーバのアクセスログを参照します。
192.168.0.2 へは、3回、192.168.0.3 へは、1回とアクセスが振り分けられたことがわかります。
$ sudo tail -f /var/log/nginx/access.log [192.168.0.2] 192.168.0.1 - - [21/Nov/2018:08:42:15 +0900] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 192.168.0.1 - - [21/Nov/2018:08:42:16 +0900] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 192.168.0.1 - - [21/Nov/2018:08:42:19 +0900] "GET / HTTP/1.0" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" [192.168.0.3] 192.168.0.1 - - [21/Nov/2018:08:42:17 +0900] "GET / HTTP/1.0" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"