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の設定も紹介予定。