#まず始めに
今回はNginxのロードバランサー(負荷分散)・エラー時の設定についてまとめました。
#ロードバランサー(負荷分散)とは?
Webサイトへのアクセスを振り分ける機械をロードバランサーといいます。
英語の「load(負荷)」+「Balancer(釣り合いをとるためのもの)」が由来で
負荷分散装置とも呼ばれています。
公開当初はさほどアクセスがないサイトでも、急に人気が出てアクセスが集中することも多いです。
そうした場合に備え、ユーザーからのアクセスをさばくWebサーバを複数台用意しておき、システムの処理能力が不足してきた場合には、サーバの台数を増やして処理性能を維持できるようにしておくのが一般的です。
負荷を分散することで、TAT・TPSなどのパフォーマンスの低下防止や
システムダウン時の可用性の向上が得られます。
※TAT(Turn Around Time:応答時間)
※TPS(Transactions Per Second:リクエスト処理率)
#ロードバランスの方法
負荷分散といってもリクエストの振り分け方には様々な方法があります。
Nginxでは下記の方法が設定可能です。
・Round-Robin…アプリケーションへのリクエストはconfの上から順に分配されます。
・Least-Connected…次のリクエストは接続の数がもっとも少ないサーバに割り当てられます。
・Ip-Hash…同じクライアントからのリクエストはサーバーが利用不可の場合を除いて
常に同じサーバに割り当てられます。
#Nginxの設定方法
デフォルトでは上記で説明したRound-Robinの設定となります。
…
http {
upstream test_app {
server test1.example.com;
server test2.example.com;
server test3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://test_app;
}
}
}
…
###Least-Connected
…
upstream test_app {
least_conn;
server test1.example.com;
server test2.example.com;
server test3.example.com;
}
…
###Ip-Hash
…
upstream test_app {
ip_hash;
server test1.example.com;
server test2.example.com;
server test3.example.com;
}
…
また、リクエストの振り分けの比率を設定するが可能です。
…
upstream test_app {
server test1.example.com weight=3;
server test2.example.com;
server test3.example.com;
}
…
上記のような設定だと
test1:test2:test3 = 3:1:1 の比率になります。
Ip-Hashでの設定は不可です。
###可用性の向上
1つの後続サーバがダウンした際にリクエストの振り分け先から外し、リクエスト処理を継続します。
Nginxは独自のヘルスチェックを行うことはなく、リクエストに含んでいます。
リクエストの応答がエラーの場合、該当のサーバを振り分け先から外します。
…
upstream test_app {
server test1.example.com max_fails=3 fail_timeout=30s;
server test2.example.com down;
server test3.example.com backup;
}
…
max_fails…エラーの際にリトライする回数を設定できます。デフォルトは1。
fail_timeout…振り分け先から外した後に再度リクエストを振り分けるダウン期間を設定できます。
デフォルトは10s。
down…該当サーバを振り分け先から外します。
backup…該当サーバ以外のサーバがすべてダウンした時にこのサーバに振り分けます。
Sorryサーバ設定としても活用できます。
#最後に
以上がNginxのロードバランス基本的な設定となります。
他にも細かなエラー時の設定などができるので、そちらは別記事でまとめようと思います。
最後まで読んでいただきありがとうございました。