LVS(Linux Virtual Server)を使ってロードバランサーを構築してみました。
・構成図

LVSサーバのeth0へ来たHTTPパケットを、BackendのWeb1,web2サーバーへNAT転送してみます。
・構成環境
※VM上で3つの仮想サーバを使用、いずれもOSはCentOS6.8
・WEBサーバ
Apache2.2
PHP5.3
・LVS
ipvsadm(IP Virtual Server version 1.2.1)
ネットワーク設定
ミドルウェアをインストールする前に、バックエンドWebサーバーの両方で
デフォルトゲートウェイを LVS の内側アドレスに設定する必要があります。 (例: 10.0.0.1)
# vi /etc/sysconfig/network
GATEWAY=10.0.0.1 ←ここをLVSサーバのeth1のIPアドレスにする。
webバックエンドサーバの構築
apacheがインストールされていればよいが、
せっかくなので実環境に近づける様、drupalをインストール。
1. 必要なパッケージのインストール
# yum install httpd php php-mbstring php-mysql php-dom php-gd
MySQLも入れる場合:
# yum install mysql-server
2. mysql専用ユーザ&DB作成
create database drupal;
grant all privileges on drupal.* to drupal@localhost identified by '[パスワード]';
flush privileges;
exit
3. DRUPALコア+日本語化ファイルDL
# wget https://ftp.drupal.org/files/projects/drupal-7.43.tar.gz
# wget http://ftp.drupal.org/files/translations/7.x/drupal/drupal-7.43.ja.po
※drupal8系はPHP5.5以上なのでCentOS6.8標準では非対応
→ 必ず7系最新版を使用
4. 展開+配置
# tar zxvf drupal-7.43.tar.gz
# cp drupal-7.43.ja.po drupal-7.43/profiles/standard/translations/
# mkdir /var/www/html/drupal
# cp -R drupal-7.43/* /var/www/html/drupal
# chown -R apache.apache /var/www/html/drupal
5. apache設定
# vi /etc/httpd/conf.d/drupal.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html/drupal
ServerName drupal.hoge.jp
ErrorLog logs/drupal.error_log
CustomLog logs/drupal.access_log common
</VirtualHost>
6. apache再起動
# service httpd restart
その後、http://[webサーバ]/drupal にアクセスしてブラウザセットアップ。
画像付き手順: http://qiita.com/crimson_21/items/5af2fe66559275657bf3
インストール後、下記表示になればOK。
(画像: drupalインストール完了)
LVSサーバ側設定
1. LVSサーバ (10.0.0.1) に ipvsadmインストール
# yum insatll ipvsadm
2. IPパケット転送有効化
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
反映:
# sysctl -p
3. ipvsadm起動
# /etc/rc.d/init.d/ipvsadm start
自動起動ON:
# chkconfig ipvsadm on
4. ipvsadm設定
まずテーブルクリア:
# ipvsadm -C
5. 仮想サービス登録
受け側IP = 192.168.1.6:80 (外部インターフェース)
# ipvsadm -A -t 192.168.1.6:80 -s rr
バランス方式 rr = ラウンドロビン
必要なオプション一覧は省略せず以下(元文保持)
(表: ipvsadmオプション、省略なし)
実サーバ設定
# ipvsadm -a -t 192.168.1.6:80 -r 10.0.0.2:80 -m
# ipvsadm -a -t 192.168.1.6:80 -r 10.0.0.3:80 -m
テーブル確認:
# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.6:http rr
-> 10.0.0.1:http Masq 1 0 0
-> 10.0.0.2:http Masq 1 0 0
テスト
http://192.168.1.6/drupal にアクセス
(画像: web1 と web2 の画面)
左が web1(10.0.0.1)、右が web2(10.0.0.2)
クライアントIPは 192.168.1.3 → 分散されているのを確認
転送方式 NAT のため access.log はクライアントIPのまま
DSR方式だとアクセスログには LVS のアドレスが記録される
次回は keepalived を組み合わせた lvsの設定も紹介予定。