Drupalは複数のWebサーバ・データベースサーバの組み合わせをプラットフォームとして稼働させることができます。
例としてここでは、Webサーバを2台、DBサーバを1台とした時のインストール・設定方法について解説します。
なお、サーバの種類とIPアドレスは下記とします。
表1:テスト環境条件
| サーバの種類 |
IPアドレス |
| Webサーバ(1台目) |
192.168.1.1 |
| Webサーバ(2台目) |
192.168.1.2 |
| データベースサーバ |
192.168.1.3 |
設定手順
はじめに、Webサーバ(1台目)へDrupalコアパッケージをアップロードし、通常のインストール手順でサイトを立ち上げます。
次にWebサーバ(2台目)へDrupalコアパッケージをアップロードします。このコアパッケージ内の設定ファイル(settings.php)は、共有のデータベースサーバ(192.168.1.3)を利用するようにあらかじめ書き換えておきます。
- Webサーバ(1台目)にDrupalサイトを構築する
通常のDrupalインストール手順でDrupalサイトを構築します。
※上記ページ手順8の「データベースの設定」で「高度な設定」の「データベースサーバのホスト名」は、ここでは「192.168.1.3」に設定します。

※インストール時にデータベースサーバとの接続に失敗する場合、Webサーバからデータベースサーバへアクセスするためのデータベースユーザが存在するかを確認してください。ユーザが存在しない場合、下記コマンドでユーザを作成できます。
mysql > grant all on データベース名.* to ユーザ名@ホスト名 identified by 'パスワード';
ここでは、下記のように設定します。
mysql > grant all on drupal_db.* to drupal_user@192.168.1.1 identified by 'drupal_pwd';
- Webサーバ(2台目)用の設定ファイルを用意する
Webサーバ(1台目)のサイト構築時にローカルに保存したDrupalコアパッケージの /sites/default/settings.php を書き換え、共有データベースサーバを利用するように設定します。
まず、settings.phpを開き、下記の箇所を探します。
* Database URL format:
* $db_url = 'mysql://username:password@localhost/databasename';
* $db_url = 'mysqli://username:password@localhost/databasename';
* $db_url = 'pgsql://username:password@localhost/databasename';
*/
$db_url = 'mysql://username:password@localhost/databasename';
この $db_url = の行には、Drupalの利用するデータベースに関する設定を記載します。
下記のルールを参考に適切に書き換えてください。
$db_url = 'データベースのタイプ://データベースユーザ名:パスワード@ホスト名/データベース名';
ここでは、下記のように設定します。
$db_url = 'mysql://drupal_user:drupal_pwd@192.168.1.2/drupal_db';
- Webサーバ(2台目)へDrupalコアパッケージをアップロードする
上記手順で作成した settings.php を含むDrupalコアパッケージを、Webサーバ(2台目)へアップロードします。
- Webサーバ(2台目)でDrupalサイトを確認する
Webサーバ(2台目)のDrupalインストールディレクトリへ、Webブラウザからアクセスします。適切にインストールが行われていれば、Webサーバ(1台目)で閲覧できるサイトと同様のサイトが確認できます。
※この時、データベースサーバとの接続に失敗した旨のエラーが表示された場合や「Site Off-line」の画面が表示された場合、Webサーバからデータベースサーバへアクセスするためのデータベースユーザが存在していな可能性があります。

ユーザが存在しない場合、下記コマンドでユーザを作成できます。
mysql > grant all on データベース名.* to ユーザ名@IPアドレス identified by 'パスワード';
ここでは下記のように設定します。
mysql > grant all on drupal_db.* to drupal_user@192.168.1.2 identified by 'drupal_pwd';
アップロードファイルを同期する
上記設定のみでは、投稿フォームを通じてユーザからアップロードされたファイルがそれぞれのサーバに格納されてしまい、共有することができません。
そのため、ユーザが画像ファイル等のアップロードを行うサイトではファイルの共有を行う必要があります。
ファイルの共有は大きく下記2通りの方法があり、それぞれ次のような特徴があります。
表2:ファイル共有方法比較
|
rsync |
NFS(Network File System) |
| 機能概要 |
2つのディレクトリを比べ、変更があったファイルのみをもう片方のディレクトリへコピーするアプリケーション。 |
ネットワーク上の各機器に接続するハードディスクを、自分の使用している機器と同様に使えるようにするプロトコル/アプリケーション。共有ファイルサーバを設け、それぞれのウェブサーバでマウントする。 |
| メリット |
|
- rsyncに比べて必要となる容量が減るため、導入が容易・安価。
- RAID5等へまとめて保存できる。
|
| デメリット |
- 同期にタイムラグがある。
- コピーを生成するためNFSより大きな保存領域が必要となる。
|
- バックアップサーバを用意していない場合、サーバがダウン時の影響範囲が大きい。
|
ここでは、NFSを利用しファイルの共有を行います。
なお、サーバ側(ファイルを格納する機器)とクライアント側(サーバへマウントする機器)は下記とします。
表3:NFSテスト環境
| NFS サーバ/クライアント種別 |
IPアドレス |
NFS対象ディレクトリ |
| サーバ |
192.168.1.1 |
192.168.1.1/sites/default/files |
| クライアント |
192.168.1.2 |
192.168.1.2/sites/default/files |
サーバ側の設定
サーバ側の設定は下記手順で行います。なお、NFSは既にマシンにインストールされていることを前提としています。またサーバのOSはFedora Core6を想定しています。
- サービスの起動
下記コマンドでNFSサービスを起動します。
# /etc/rc.d/init.d/nfs start
- マウントを許可するディレクトリの設定
/etc/exportsファイルに、マウントを許可するディレクトリと、マウントを許可するホスト名を以下の書式で記入します。
ディレクトリ名 マウントを許可するホスト名
ここでは、以下のように記載します。
# /var/www/html/sites/default/files 192.168.1.2(rw)
※ "rw" は読み書きを許可するという意味のオプション
- サービスの再起動
下記コマンドでサービスを再起動します。
# /etc/rc.d/init.d/nfs restart
- NFSデーモンの自動起動
下記コマンドで、OSのリブート時にNFSを自動起動するよう設定します。
# chkconfig nfs on
クライアント側
- マウントする
下記コマンドでサーバ側の共有ディレクトリをマウントします。
# mount ホスト名:ディレクトリ名 マウントポイント
ここでは、次のコマンドを実行します。
# mount 192.168.1.1:/var/www/html/sites/default/files /var/www/html/sites/default/files
- 起動時に自動的にマウントするように設定する
/etc/fstabファイルを開き、下記を挿入します。
192.168.5.178:/var/www/html/gim/files /var/www/html/takahara/files nfs auto,rw,user
※サーバ/クライアントのユーザ名・ユーザID・グループIDは、パーミッションの問題から同期する必要があります。詳しくは、下記記載の関連サイトや、専門書籍等をご覧ください。
関連サイト
Linux NFS-HOWTO
NFSのトラブルシューティング等、詳細情報が閲覧できます。
この記事のトラックバックURL(あなたの記事にはこのページへのリンクを含めて下さい):
http://www.webgogo.jp/trackback/649