
Webサービスが成長するにつれて、アクセス集中やトラフィック増加によるサーバーの負荷は避けられない課題です。そんなときに活躍するのが「ロードバランサー(負荷分散装置)」。本記事では、NginxとApacheを用いた基本的なロードバランシングの考え方と設定方法について、サンプルコード付きでわかりやすく解説します。
目次
目次
ロードバランシングとは?負荷分散の基本概念
ロードバランシングとは、複数のサーバーにリクエストを分散する仕組みのことです。これにより、1台のサーバーに負荷が集中せず、システム全体の安定性と可用性が向上します。
主なメリット:
- サーバー障害時の可用性確保(冗長化)
- パフォーマンス向上(高速応答)
- スケーラビリティの確保(柔軟な拡張)
ロードバランシングの方式:
方式 | 説明 |
---|---|
ラウンドロビン | リクエストを順番にサーバーへ割り当てる基本方式 |
IPハッシュ | クライアントIPに基づいて同じサーバーに振り分ける |
最小接続数(least_conn) | 接続数が最も少ないサーバーにリクエストを送る |
Nginxでのロードバランシング設定方法
Nginxは軽量で高性能なWebサーバーであり、ロードバランサーとしての機能も非常に優れています。以下は、ラウンドロビンによるシンプルな設定例です。
1. 複数のバックエンドサーバーを定義
http {
upstream backend_servers {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
2. 負荷分散方式を切り替える例(IPハッシュ)
upstream backend_servers {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}
補足:
proxy_pass
ディレクティブはクライアントリクエストをバックエンドに転送します。ip_hash
を使うと同一クライアントは同一サーバーに接続されます(セッション維持向け)。
Apacheでのロードバランシング設定方法
Apacheでもモジュールを利用することでロードバランサーを構築できます。ここでは mod_proxy
と mod_proxy_balancer
を使用した構成例を紹介します。
1. 必要なモジュールの有効化(Ubuntu/Debian系)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
2. バーチャルホスト設定例
<VirtualHost *:80>
ServerName example.com
<Proxy "balancer://mycluster">
BalancerMember http://192.168.1.201
BalancerMember http://192.168.1.202
</Proxy>
ProxyPreserveHost On
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
</VirtualHost>
ロードバランシングアルゴリズムの切替例
<Proxy "balancer://mycluster">
BalancerMember http://192.168.1.201
BalancerMember http://192.168.1.202
ProxySet lbmethod=bytraffic
</Proxy>
まとめ:NginxとApacheで始める負荷分散の第一歩
Webサービスの安定稼働には、ロードバランシングの導入が不可欠です。
Nginxなら設定ファイルがシンプルでパフォーマンスも良好、Apacheなら既存の構成に統合しやすいという特長があります。
まずは手元のテスト環境でラウンドロビンから始め、徐々にセッション維持やヘルスチェックなどの応用的な仕組みに発展させていくとよいでしょう。
