LVS(Linux Virtual Server)を使ってロードバランサーを構築してみる。

· 3 min read
LVS(Linux Virtual Server)を使ってロードバランサーを構築してみる。

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