サービスご利用中のお客さま

VPSならラピッドサイト。VPS(仮想専用サーバー)販売15年の実績!

01) Poundによる複数構成のサーバー負荷分散

このマニュアルページでご案内しているのは、冗長化構成の一例です。
VPSサーバー冗長化の一つの活用方法として、このマニュアルを公開しており、この構成案を推奨しているものではございません。
また、VPSサーバーの冗長化につきましては、設定・運用方法等に関するサポートは行っておりませんので、ご了承頂けますようお願い致します。

サーバーの負荷集中を回避する為に、複数のサーバーを利用して負荷分散をする方法があります。
DNSラウンドロビンでも、複数サーバーの負荷分散は可能ですが、負荷分散の割合を調整したり、分散の条件付けを行ったりする事はできません。
Poundを利用すれば、複数サーバーの分散割合を調整したり、特定のファイルによって接続させるサーバーを指定したりする事が可能です。

複数サーバーの負荷分散設定する方法として、以下の構成についてご案内致します。
(1) Poundを設定したサーバー
(2) EC-CUBEをインストールしたサーバー(web-1)
(3) EC-CUBEをインストールしたサーバー(web-2)
(4) データベース専用に使うサーバー
上記の4台構成は、以下のような挙動の設定が可能です。
Poundを設定した(1)のサーバーにアクセス

(2)web-1か(3)web-2へ接続

この時のサーバーへのアクセスについては、Poundによりプライオリティ(優先順位)が設定済み

(2)web-1と(3)web-2のEC-CUBEで利用するデータベースは、(4)のサーバーを利用



この時、実際に利用するドメイン名は、(1)のPoundのサーバーに設定してあるドメイン名のみになります。
Poundサーバーにアクセスして、web-1かweb-2に振り分けられたとしても、表示されるドメイン名は変わりません。

上記の4台構成を行うための設定手順は以下になります。
1.poundを(1)のサーバーにインストールする。
2.(4)のサーバーに、(2)(3)からアクセス可能なユーザーを作成する。
3.EC-CUBEを(2)(3)のサーバーにインストールする。
(この時、DNSとhttpd.confを編集する必要有り)
4.Poundのログ調整を行う。
5.不要サービスの停止を行う

Poundのインストール

Poundは、yumコマンドを使ってインストールする事が可能です。
# yum install pound

以下インストールログになります。
# yum install pound <Enter>
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for pound to pack into transaction set.
pound-2.4.3-1.el4.rf.i386 100% |=========================| 4.4 kB    00:00
---> Package pound.i386 0:2.4.3-1.el4.rf set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 pound                   i386       2.4.3-1.el4.rf   dag               171 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 171 k
Is this ok [y/N]: y <Enter>
Downloading Packages:
(1/1): pound-2.4.3-1.el4. 100% |=========================| 171 kB    00:01
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: pound                        ######################### [1/1] 

Installed: pound.i386 0:2.4.3-1.el4.rf
Complete!
以上でPoundのインストールは完了です。
この時点では、まだPoundは起動していません。
起動する前に、設定ファイルの編集を行います。

Pound設定ファイルの編集
Poundの設定ファイルは、以下にあります。
/etc/pound.cfg

まず、設定するPoundの構成を決めます。
例えば、「web-1の方をweb-2よりも優先的に接続させたい」とか、「web-1もweb-2も等しい割合で接続させたい」などの優先度を決定しておきます。
また、EC-CUBEなどの様に、画像をアップロードするアプリケーションを使用する場合、画像データを専門に扱うサーバーを決めておく必要があります。
画像データをアップロードする際、Pound動作によって接続サーバーが変動していると、正しく画像データがサーバーに到達せず、画像アップロードが正常に完了しない場合があります。
そのため、画像データを管理するサーバーを指定する設定も必要となります。

4台の構成が以下の場合の設定例をご案内致します。
1) Poundインストールサーバー
IPアドレス=111.00.160.XXX


2) web-1サーバー
IPアドレス=111.88.666.XXX
画像データー用サーバーに設定
優先度:6

3) web-2サーバー
IPアドレス=198.555.22.XXX
優先度:4

4) データベース用サーバー
Poundの設定は不要

※優先度は、数字の大きい方が優先されます。

/etc/pound.cfg 編集
User        "nobody" 
Group       "nobody" 
#RootJail    "/var/pound/jail" 
Alive       30
LogLevel 3

## Main listening ports
ListenHTTP
    Address 111.00.160.XXX ←自身のIPアドレス
    Port    80
#    Client  10
End

#ListenHTTPS
#    Address 1.2.3.4
#    Port    443
#    Cert    "/etc/pound/pound.pem" 
#    Client  20
#End

## Image server ←画像(jpg、gifファイル)の場合に接続させるサーバー指定

Service
    URL ".*.(jpg|gif)" 
    BackEnd
        Address 111.88.666.XXX ←web-1のIPアドレス
        Port    80
    End
End
## Virtual host www.myserver.com
#Service
#    URL         ".*sessid=.*" 
#    HeadRequire "Host:.*www.myserver.com.*" 
#    BackEnd
#        Address 192.168.0.11
#        Port    80
#    End
#    Session
#        Type    URL
#        ID      "sessid" 
#        TTL     120
#    End
#End

## Everybody else
Service
HeadRequire "Host: .*" 
    BackEnd
        Address 111.88.666.XXX ←web-1のIPアドレス
        Port    80
        Priority 6
    End
    BackEnd
        Address 198.555.22.XXX ←web-2のIPアドレス

        Port    80
        Priority 4
    End
End

設定ファイルの記述確認
Poundを起動させる前に、作成した設定ファイルが、正しく動作するかどうかを確認します。
# pound -c -v
starting...
Config file /etc/pound.cfg is OK

OK表示されれば問題ありません。

httpポートの変更
Poundは、80ポートを利用します。
そのため、Pound起動前に、80ポートは使用されていない状態にする必要があります。
デフォルト状態では、80ポートはhttpに使用されていますので、以下のようにhttpd.confファイルを編集して、httpdが利用するポート番号を変更して下さい。
【変更前】
Listen 80

【変更後】
Listen 8080

編集後はApacheを再起動して下さい。
# restart_apache

Poundの起動
Apache再起動後は、Poundを起動させる。
# /etc/init.d/pound start
Starting pound: [ OK ]

Pound起動後、Poundを設定したサーバーににアクセスすると、自動的に 「web-1」か「web-2」に振り分けられる。

Poundの自動起動設定
以下のコマンドを実行するだけ
# chkconfig pound --list
pound 0:off 1:off 2:off 3:off 4:off 5:off 6:off

# chkconfig pound on

# chkconfig pound --list
pound 0:off 1:off 2:on 3:on 4:on 5:on 6:off

外部接続ユーザーとデータベースの作成

両方のwebサーバーからアクセス可能なデータベースユーザーを、(4)のデータベース用サーバーに作成する。

データベース用サーバー(4)に、web-1(111.88.666.XXX)とweb-2(198.555.22.XXX)から接続可能なユーザー「ecdb」を作成する。

データベース用サーバー(4)のmysqlへrootユーザとしてログインし、web-1とweb-2から接続可能なユーザー「ecdb」を作成する。

mysql> GRANT ALL PRIVILEGES ON *.* TO ecdb@111.88.666.XXX ←web-1のIPアドレス
    -> IDENTIFIED BY '任意のパスワード' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO ecdb@198.555.22.XXX ←web-2のIPアドレス
    -> IDENTIFIED BY '任意のパスワード' WITH GRANT OPTION;

正しく作成できたか確認。
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select user, host from user;
+----------+----------------+
| user     | host           |
+----------+----------------+
| ecdb     | 111.88.666.XXX | ←web-1
| root     | 127.0.0.1      |
| ecdb     | 198.555.22.XXX | ←web-2
| root     | example.com    |
| dbjpr333 | localhost      |
| root     | localhost      |
+----------+----------------+
7 rows in set (0.00 sec)
データベース用サーバー(4)のMySQL設定ファイルを編集し、外部からの接続を可能にする。
編集するファイル:/etc/my.cnf
【変更前】
[mysqld]
skip-innodb
max_connections=30
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=127.0.0.1

【変更後】
[mysqld]
skip-innodb
max_connections=30
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#bind-address=127.0.0.1
上記のように「bind-address=127.0.0.1」の前に「#」を追加します。
この作業後は、必ず以下のコマンドでMySQLの再起動を行って下さい。
# /etc/rc.d/init.d/mysql restart

再起動完了後、作成したユーザーで、(2)(3)のサーバー側から、(4)のデータベース用サーバーに接続できるかどうか確認する。

(2)web-1から

[webus333@web-us htdocs]$ mysql -h 111.68.165.XXX -u ecdb -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.90-community MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

(3)web-2から

[webjp333@web-jp htdocs]$ mysql -h 111.68.165.XXX -u ecdb -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.90-community MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

(2)(3)のサーバー側から、(4)のデータベース用サーバーのMySQLへのログインが可能である事を確認できた。

次に、EC-CUBEで利用するデータベースを作成する。
(4)のデータベースサーバーから、作成した「ecdb」ユーザーでMySQLにログインして、EC-CUBE用のデータベース「ec24」を作成する。
# mysql -u ecdb -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.0.90-community MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database ec24;
Query OK, 1 row affected (0.02 sec)
以上で、データベース用サーバーへの外部接続ユーザーとデータベース作成が完了いたしました。

EC-CUBEのインストール

web用サーバーにEC-CUBEをインストールする前に、PoundサーバーのAレコードを編集して、 Poundサーバーのドメイン名がweb用サーバーに向くようにAレコードを修正する。
これは、EC-CUBEのインストール時、ドメイン名相違によるインストール不可を回避する為処理です。
EC-CUBEインストール完了後は、また元のAレコードに戻します。

httpd.confに記述されているServerNameを編集してApache再起動する。
【編集前】
ServerName web-1のドメイン名

【編集後】ServerName Poundサーバーのドメイン名

編集後は、「restart_apache」コマンドでApacheを再起動する。
EC-CUBEのインストール方法は、は通常通りだが、EC-CUBEのweb画面でのインストール時の、データベースを指定する画面では、「サーバー」にはlocalhostではなく、データベース用サーバーのIPアドレスを入力する。

インストール完了後、PoundサーバーのAレコードを、今度はweb-2に向け、web-1同様にhttpd.confも編集する。
その後、scpコマンドで、web-1にインストールしたEC-CUBEをそのままweb-2にコピーする。
※以下のコマンドは、adminユーザーで行うこと
web-1側からの作業

# scp -r /www/htdocs/eccube web-2の管理者ユーザ@198.555.22.XXX:/www/htdocs/

上記コマンドを実行すると、以下のようなメッセージが表示される。

The authenticity of host '198.555.22.XXX (198.555.22.XXX)' can't be established.
RSA key fingerprint is 6e:eb:83:fa:88:11:8f:63:ea:90:f3:27:eb:69:08:c2.
Are you sure you want to continue connecting (yes/no)? yes <Enter>←yesを入力
Warning: Permanently added '198.555.22.XXX' (RSA) to the list of known hosts.
web-2@198.555.22.XXX's password:  <Enter>←web-2の管理者パスワードを入力する

web-2の管理者パスワードを入力し、エンターキーを押すと、ファイルのコピーが開始される。

「web-2」にEC-CUBEのコピーが終わった、オーナー権限を修正しておく
web-2側の作業

# chown -R apache:apache eccube
以上で、web1とweb2のEC-CUBEの設定が完了。

※PoundサーバーのAレコードを直すのを忘れずに。

Poundサーバーのログ処理

Poundのアクセスログは、「/www/logs/access.log」と「/var/log/messages」に記録される。
まず、「access.log」にpoundのアクセスログが記述されないように、httpd.confを編集する

【変更前】
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

【変更後】
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


「/var/log/messages」に記録されるPoundのログを、別にする。
/etc/syslog.confの編集。Poundログは「/var/log/pound」で記録するようにする。
【修正前】
*.info;mail.none;authpriv.none;cron.none -/var/log/messages

【修正後】
*.info;mail.none;authpriv.none;cron.none;local1.none -/var/log/messages

さらに以下を最下行に追加
# Save Pound log to pound
local1.* -/var/log/pound

次にPoundの設定ファイルにも定義を追加する
/etc/pound.cfgを編集


LogLevel 3
LogFacility local1  ←これを追加
取得ログの自動圧縮設定
/etc/logrotate.d/syslogを編集
【修正前】
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron

【修正後】
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/pound

syslogのサービスを再起動
# service syslog restart
Shutting down kernel logger:                               [FAILED]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger: execvp: Permission denied
                                                           [FAILED]

最後の行にFAILEDと表示されますが、再起動に失敗しているという事ではないので、問題ありません。

pound.cfgの編集後は、Apacheの再起動と、pound再起動を行う。
# restart_apache

# /etc/init.d/pound restart

以上で、Poundのログは、/var/log/poundとして保存される。

不要サービスの停止

4台のサーバー構成にして、各サーバーの役割を限定した事で、デフォルトで設定されているサーバーサービスの中で、不要なサービスが生じてきます。
例えば、web用に設定した2台のサーバーは、mailやmysqlが不要となり、データベース専用サーバーではhttpが不要となります。
Poundサーバーは、MySQL、DEVECOTを停止させます。
# /etc/init.d/mysql stop
# chkconfig mysql off
# /etc/init.d/dovecot stop
# chkconfig dovecot off

web専用のweb-1とweb-2は、MySQL、DEVECOTを停止させます。
# /etc/init.d/mysql stop
# chkconfig mysql off
# /etc/init.d/dovecot stop
# chkconfig dovecot off

DB専用のサーバーの場合は、DEVECOT、Apacheのサービスを停止します。
# /etc/init.d/dovecot stop
# chkconfig dovecot off
# /etc/init.d/httpd stop
# chkconfig httpd off

Poundサーバーで利用しているドメインのユーザを作成する場合は、以下のURLでコントロールパネルへアクセス可能です。

http://Poundサーバードメイン:8080/ControlPanel/

上記コントロールパネルからユーザ追加が可能です。

以上で、(1)Poundサーバーにアクセスすると「(2)web-1」「(3)web-2」のどちらかに振り分けられ、利用するデータベースは、(4)データベース専用サーバーを利用する、という4台構成が完了いたします。

ページの先頭へ戻る