前のトピック: JBOSS、JBOSS64: JBoss アプリケーション サーバ

次のトピック: Web サーバ アプライアンス

ROR: Ruby-on-Rails アプリケーション サーバ

Ruby-on-Rails アプリケーション サーバ

早見表

カタログ

システム

カテゴリ

アプリケーション サーバ

ユーザ ボリューム

あり

最小 メモリ

160 MB

OS

Linux

制約

なし

機能の概要

ROR は、Ruby および Ruby-on-Rails の Web フレームワークに基づいた Web サーバ アプライアンスです。 Ruby-on-Rails に関する主なドキュメントは http://wiki.rubyonrails.org を参照してください。 Ruby-on-Rails では、設定より規則を重視する美しいコードを書くことができます。 Ruby-on-Rails はスタンドアロン Web サーバまたはアプリケーション サーバとして機能可能です。

ROR は静的な Web コンテンツを処理し、ユーザ設定可能なコンテンツ ボリュームからの Web アプリケーションを自動的に展開します。 ドキュメントへのパスは設定可能です。その結果、複数の Web サーバ間、および異なるコンテンツを処理する他のアプライアンス間の両方またはいずれか一方で同じボリュームを共有できます。

ROR は次の 2 つの異なるモードで作動できます。Apache/mod_passenger または Apache/mongrel_cluster。 どちらの Rails バックエンドにも長所があります。Phusion Passenger は Rails アプリケーションに対して非常に高いパフォーマンスと有益な再配備機能を提供し、Mongrel は実績のある本稼働時の安定性を備えています。

WEBx サーバと同様、ROR には、コンテンツ ボリューム上のスクリプトから外部サービスにアクセスするための汎用出力端子が 3 つあります。 db 端子はさまざまなデータベースへのアクセスに使用されます。fs 端子は共有ファイル ストレージ(NFS を使用)へのアクセスに使用されます。aux 端子は SMTP サーバへ電子メールメッセージを送信するために作成されています。

log 端子は、ROR がログ ファイルを格納できる共有ファイルシステムに ROR を接続するために使用します。

サーバの設定はさまざまなプロパティを使用して定義されます。 これらのプロパティは簡単な設定方法でさまざまな使用状況のほとんどに対応できるように設計されていて、通常は、デフォルト以外の値に設定する必要はほとんどありません。

名前

最新バージョン

OS

Ruby バージョン

Ruby-on-Rails バージョン

Phusion Passenger

Mongrel/Mongrel_Cluster

ROR

1.1.4-1

CentOS 5.5

Ruby 1.8.6

2.3.4

2.2.11

1.1.5/1.0.5

境界

リソース

リソース

最小

最大

デフォルト

CPU

0.1

16

0.3

メモリ

160 MB

32G

512 MB

帯域幅

1 Mbps

2 Gbps

250 Mbps

注: メモリの量は ROR 上の予想されるロードおよび配備されたアプリケーションのメモリ要件に基づいて設定する必要があります。

端子

名前

方向

プロトコル

説明

in

in

HTTP

Web クライアントから送られる HTTP リクエストを処理します。 HTTP/1.1 および HTTP/1.0 をサポートします。

db

out

任意

データベース サーバへのアクセス。 使用状況は、コンテンツ ボリューム上の任意のスクリプト(存在する場合)によって定義されます。 この端子は使用されない場合は未接続のままとなることがあります。

fs

out

NFS

NFS を介して読み取り/書き込みファイル アクセスを提供する、共有ファイル ストレージのネットワーク ファイルシステムへのアクセス。 使用状況は、コンテンツ ボリューム上の任意のスクリプト(存在する場合)によって定義されます。 コンテンツ ボリューム上のソフトウェアは、マウントされたリモート ファイルシステムを、アプライアンスのファイルシステム スペースの /mnt/fs であるとみなします。 この端子は使用されない場合は未接続のままとなることがあります。 接続されたサーバには NFS の上にエクスポートされた /mnt/data という名前の読み取り/書き込み共有アクセス権が必要です。

log

out

CIFS

アクセスとエラー ログを格納するための、CIFS ベースのネットワーク ファイルシステムへのアクセス。 この端子は使用されない場合は未接続のままとなることがあります。 接続されたサーバは、匿名のログインを許可し、share という名前の読み取り/書き込みエクスポート共有を持っている必要があります。

aux

out

任意

電子メールを送信するための SMTP サーバへのアクセス。
この端子は使用されない場合は未接続のままとなることがあります。

net

out

任意

サブネット アクセス用のゲートウェイ出力です。
この端子は使用されない場合は未接続のままとなることがあります。

mon

out

CCE

MON アプライアンスへパフォーマンスとリソースの使用状況統計を送信します。
この端子は使用されない場合は未接続のままとなることがあります。

デフォルト インターフェースは有効です。 これは、SSH を介した診断およびトラブルシューティングを目的としています。 このアプライアンスの今後のバージョンでは SSH アクセスが無効になる可能性があります。

ユーザ ボリューム

ボリューム

説明

content

Rails アプリケーションおよびアプリケーション データのストレージ用の読み取り専用または読み取り/書き込みボリューム。 このボリュームは content_on_fs プロパティが off に設定されている場合にのみ使用されます。

プロパティ

プロパティ名

タイプ

説明

hostname

文字列

Web サイトのホスト名。 デフォルト: localhost

admin_email

文字列

サーバ管理者の電子メール アドレス。 ROR は、自動生成されたページに表示するためにこの名前を使用します。 デフォルト: root@localhost

app_base

文字列

ドキュメントのルート ディレクトリ。 Rails アプリケーション ルート ディレクトリの典型的な構造は、このフォルダ(app/、config/、db/、doc/、lib/、log/、public/、script/ など)内に作成する必要があります。 app_base が空の文字列に設定される場合、コンテンツ ボリュームのルート ディレクトリが使用されます。 注: コンテンツ ボリューム上にこのディレクトリがすでに存在する必要があります。 デフォルト:(

content_on_fs

文字列

コンテンツが fs 端子のファイルシステムに関連があるか、コンテンツ ボリューム上にあるかを指定します。 デフォルト: off(コンテンツ ボリューム上)

ror_backend

文字列

Apache/Mongrel_Cluster または Apache/Passenger モードの使用を切り替えます。 ror_backend が mongrel に設定されている場合、Mongel_Cluster バックエンドは Phusion Passenger の代わりに ROR アプリケーションを処理します。 デフォルト: passenger

ror_mode

文字列

ROR 操作モード。 ログ記録、データベース選択および他の環境オプションに影響します。 値は次のとおりです。production、development。 デフォルト: production

ror_port

整数

ROR Web サーバが受信 HTTP リクエストをリッスンするポート。 デフォルト: 80

timezone

文字列

アプライアンスで使用されるタイムゾーンを指定します。 このプロパティが空の場合、タイムゾーンは変更されず、現状のものが使用されます。 サポートされているタイムゾーンのリストはここで参照できます。 デフォルト:(

高度な ROR プロパティ

通常は設定する必要のない追加のプロパティです。 標準以外の状況で ROR を調整するために使用できます。

プロパティ名

タイプ

説明

ror_instances_per_app

整数

単一のアプリケーションで同時にアクティブであることが可能な、アプリケーション インスタンスの最大数。 値 0 は単一アプリケーションが使用できるインスタンスの数に制限は置かれないことを意味します。つまり、ror_rails_max_pool_size のグローバル制限のみが適用されます(「Phusion Passenger」モードのみ。「Mongrel」モードでは 0 は 2 と同等)。 デフォルト: 0

ror_rails_use_global_queue

文字列

グローバル キューの使用を on または off にします。 グローバル キューが off になれば、Phusion Passenger は公平な負荷分散を使用します。 デフォルト: off

ror_rails_high_performance

文字列

デフォルトでは、Phusion Passenger は mod_rewrite および他のほとんどの Apache モジュールと互換性があります。 ただし、Phusion Passenger に互換性を持たせるには労力を要します。 ror_rails high_performance をオンにすると、他の Apache モジュールとの互換性が削減される代わりに Phusion Passenger の速度が少し向上します。 デフォルト: off

ror_rails_max_pool_size

整数

同時にアクティブであることが可能な Ruby on Rails または Rack アプリケーション上のインスタンスの最大数。 この数値が大きいと、メモリ使用量も増える一方で、同時 HTTP クライアント処理能力が向上します。 Passenger モードのみで有効です。 デフォルト: 6

ror_rails_max_requests

整数

アプリケーション インスタンスが処理するリクエストの最大数。 多くのリクエストを処理した後、アプリケーション インスタンスはシャット ダウンし、Phusion Passenger によって再起動されます。 0 の値は、最大値がないことを意味します。したがってアイドル タイムアウトに到達したとき、アプリケーション インスタンスはシャット ダウンされます。 アプリケーションがメモリをリークしている場合、このオプションは便利です。 特定の数のリクエストの後にシャットダウンすることによって、メモリがすべてオペレーティング システムによって解放されることが保証されます。 Passenger モードのみで有効です。 デフォルト: 0

ror_mongrel_start_port

整数

mongrel_cluster によって使用される、ポート範囲内の開始ポート番号。 デフォルト: 3000

Apache の詳細プロパティ

通常は設定する必要のない追加のプロパティです。 標準外の状況で ROR を調整するために使用できます。

プロパティ名

タイプ

説明

max_connections

整数

許可される同時接続の最大数。 この数に到達すると、新しい接続は引き続き受け入れられますが、別の接続が閉じられるまでその処理は遅延されます。 max_connections 値は 256 より大きい値には設定できません。
デフォルト: 128

persistent_connections

文字列

クライアントが同じ接続上で複数のドキュメントをリクエストすることを ROR が許可するかどうかをコントロールします。 有効な値は on と off です。 HTTP/1.1 を正しくサポートせず、HTTP/1.0 にフォールバックしないクライアントに関する問題が発生した場合にのみ、永続的接続を無効にする必要が生じる場合があります。 デフォルト: on

idle_timeout_sec

整数

リクエストや応答がない場合にクライアント接続を開いたままにしておく、秒単位のタイムアウト。 このプロパティは、persistent_connections が on の場合のみ使用されます。 このタイムアウトを短くすると、使用されていない接続をすみやかに切断することに役立ちます。 デフォルト: 15

data_timeout_sec

整数

データ送信が開始されたが完了していないときに、さらにデータを受信または送信する場合の秒単位のタイムアウト。 このタイムアウトがあると、ROR が転送中に遅延を許可する一方で使用されていない接続を切断することを可能にします。 デフォルト: 300

info_level

文字列

ROR が自身に関する情報を Web クライアントにどれだけ開示するかをコントロールします(HTTP 応答および自動的に生成されたページ)。 有効な値は、full(最大限の情報)、os、minor、major、prod(最小限の情報)です。 セキュリティ対策として、最小限の情報を公開することが推奨されます。 デフォルト: prod

ロギング プロパティ

プロパティ名

タイプ

説明

logs_enabled

文字列

ログ記録を完全に有効または無効にします。 デフォルト: off

logs_base_dir

文字列

ROR のログが格納されるディレクトリ。 logs_enabled が「off」に設定される場合、このプロパティは無効です。 デフォルト: /

error_log_filename

文字列

log 端子でアクセス可能なファイルシステムに関連する、エラー ログ用のファイル名。 名前にはディレクトリ名が含まれる場合があります。 例については、access_log_filename を参照してください。 これが空の値に設定される場合、または logs_enabled が off である場合、エラー ログは、ROR インスタンス自体のルート ファイルシステム上のファイルに書き込まれます。 logs_enabled が off に設定される場合、このプロパティは無効です。 デフォルト:(

error_log_level

文字列

エラー ログに書き込まれるメッセージの重大度レベル。 有効な値は debug、info、notice、warn、error、crit、alert および emerg です。 debug ではほとんどのメッセージが書き込まれ、emerg では緊急メッセージのみが書き込まれます。 デフォルト: warn

access_log_filename

文字列

log 端子でアクセス可能なファイルシステムに関連する、アクセス ログ用のファイル名。 たとえば access_log。 名前にはディレクトリ名(たとえば /srv1_logs/access_log、/logs/srv1_access_log)が含まれる場合があります。 空の場合、アクセス ログは作成されません。 ディレクトリが存在しない場合はディレクトリが作成されます。 logs_enabled が off に設定される場合、このプロパティは無効です。 デフォルト:(

注:

追加の gems のインストールが必要な場合は、app_base/gems フォルダに置いてください。 これらの追加の gems はすべて RAM ディスクへインストールされ、/mnt/gems としてマウントされます。 さらに、ENV['GEM_HOME'] = '/mnt/gems' プロパティを config/enviroment.rb に設定して Rails アプリケーションからこのレポジトリが見えるようにしてください。 ディスクのサイズは自動的に計算されます。 アプライアンス用のメモリを割り当てる際にはこの点を思い起こしてください。

外部データベース

ROR は現在、Rails アプリケーション用の外部データ格納に、MySQL、PostgreSQL、Microsoft SQL Server のいずれかをサポートします。 Rails アプリケーション設定ファイル(database.yml)内にアダプタおよびデータベース ユーザ認証情報を正しく定義することは十分ですが理想的ではありません。

Microsoft SQL Server は rails-sqlserver アダプタ プロジェクト(http://rails-sqlserver.lighthouseapp.com/projects/20277-sql-server-05-adapter/tickets)の使用によってサポートされています。

rails-sqlserver アダプタ設定(application/config/database.yml)の例:

production:
  adapter: sqlserver
  mode: odbc

dsn: Driver=FreeTDS;Server=db;Database=YOUR_DATABASE_NAME;Uid=USER_LOGIN;Pwd=USER_PASSWORD

カスタム カウンタ

ROR アプライアンスは mon 端子を介して以下のカスタム カウンタをレポートします。 これらのカウンタは ROR カウンタ グループに属します。

カウンタ名

説明

Total hits

ヒット数の合計

Total bytes

バイト数合計

Active requests

アクティブなリクエスト数

Idle servers

アイドル サーバの数

Rails memory

Rails によって使用されるメモリ合計(Passenger モードのみ)

Rails applications

現在有効なアプリケーション インスタンスの数(Passenger モードのみ)

Active applications

現在プロセス処理中のアプリケーション インスタンスの数(Passenger モードのみ)

Idle applications

現在リクエストを処理していない、つまりアイドルなアプリケーション インスタンスの数*(Passenger モードのみ)。

Rails sessions

現在すべてのアプリケーションインスタンスのキュー内の、処理待ちの HTTP クライアントの数を示します(Passenger モードのみ)。

Rails requests

すべてのインスタンスが現時点で処理したインスタンスの数を示します(Passenger モードのみ)。

注: 一定の時間が経過したらアイドルなアプリケーション インスタンスをシャット ダウンすることを data_timeout_sec で設定できます(値を 0 に設定すると、アイドル時間でアプリケーション インスタンスがシャット ダウンされることはありません)。 inactive の値は count - active と同等です。

起こり得るスタートアップ エラー

アプライアンスの起動に失敗した場合、以下の内容のエラーがシステム ログに記録される場合があります。

エラー メッセージ

説明

エラー: ログは有効ですが、log 端子は接続されていません。

log 端子は接続されていませんが、 logs_enabled または enable_access_log が yes に設定されています。

エラー: content_on_fs は「off」ですが、ローカルのコンテンツ ボリュームがありません。

content_on_fs は off に設定されます。このことは、データ ボリュームをローカルにマウントする必要があるが、ROR はコンテンツ ボリュームをマウントできないことを示しています。 最も可能性の高い原因は、コンテンツ ボリュームがフォーマットされないか、ROR プロパティ内に定義されていないことです。

エラー: nfs 共有のマウントに失敗しました。

ROR が nfs 共有をマウントできません。 最も可能性が高い原因は、fs が接続されていないか、ROR が NAS(または fs 端子へ接続される任意のアプライアンス)の前に開始されたことです。

ダッシュボード メッセージ

メッセージ

説明

データ ストレージのディスク空き容量が 5% 未満です。

fs 端子を介してアクセスされたデータ ボリュームのディスク空き容量が 5% 未満です。 ボリューム サイズを増加することをお勧めします。

データ ストレージのディスク空き容量が 1% 未満です。

fs 端子を介してアクセスされたデータ ボリュームのディスク空き容量が 1% 未満です。 ただちに対処する必要があります。データ損失の危険があります。

コンテンツ ボリュームのディスク空き容量が 5% 未満です。

アプライアンス上のコンテンツ ボリュームのディスク空き容量が5% 未満です。 ボリューム サイズを増加することをお勧めします。

コンテンツ ボリュームのディスク空き容量が 1% 未満です。

アプライアンス上のコンテンツ ボリュームのディスク空き容量が1% 未満です。 ただちに対処する必要があります。データ損失の危険があります。

パフォーマンス

ログ記録がオンになっている場合(logs_enabled = on)は ROR のパフォーマンスが影響を受ける場合があります。 以下の表は、Apache Web サーバのバージョン 2.0 および 2.2 に付随する Apache Benchmark ユーティリティでログが無効の場合に実行されるベンチマーク結果(rps、requests per second の単位で指定)を示しています。 Apache Benchmark の詳細は Apache の Web サイトを参照してください。 次の設定がベンチマークに使用されました。"bw 500M mem=2G cpu=2"。

一致

rps

1 クライアント一致

1700-2100 rps

10 クライアント一致

7100-7500 rps

100 クライアント一致

7700-8100 rps

典型的な使用状況

以下の図は、ROR アプライアンスの典型的な使用例を示しています。 ROR は、コンテンツ ボリュームからのアプリケーションを処理します。

ROR 使用状況例 2

使用されるアプライアンス:

プロパティ名

hostname

www.mysite.org

サイトのホスト名。

app_base

MyApp

 

content_on_fs

off

ROR は、すべてのコンテンツにユーザ ボリューム コンテンツを使用します。

timezone

EST

EST タイム ゾーン。

ror_port

80

HTTP プロトコル用の標準的なポート。

クライアント リクエストはクライアント ゲートウェイ上に送られます。 ゲートウェイは AppServer ROR サーバへリクエストを転送し、このサーバでリクエストが処理されます。

データベース、ログ、モニタリングを使用する 2 層アプリケーション

以下の図は、ネットワーク ストレージ上でデータベース、ログ、モニタリングおよびコンテンツを使用する ROR アプライアンスの典型的な使用例を示しています。

ROR 使用状況例 2

使用されるアプライアンス:

プロパティ設定の例:

プロパティ名

hostname

www.mysite.org

サイトのホスト名。

app_base

MyApp

 

content_on_fs

on

ROR はすべてのコンテンツに fs 端子を通じてリモート ストレージを使用します。

timezone

EST

EST タイム ゾーン

ror_port

80

HTTP プロトコル用の標準的なポート。

max_connections

200

同時ユーザは最大 200 です。

logs_enabled

yes

エラー ログを有効にします。

logs_base_dir

MyApp_Log_Dir

 

error_log_level

情報

 

error_log_filename

error_log

エラー ログ名です。

access_log_filename

access_log

アクセス ログ名。

クライアント リクエストはクライアント ゲートウェイ上に送られます。 ゲートウェイは AppServer サーバへリクエストを転送し、このサーバでリクエストが処理されます。 コンテンツとログはストレージ アプライアンス上にあります。 カウンタは mon アプライアンスにレポートされます。

注: RoR アプリケーションは、さまざまなタイプのデータベースを使用できます。 ROR では、どのデータベース アプライアンスでも db 端子へ接続することができます。

拡張性のある RoR 対応の Web サイト

以下の図は、負荷分散機能を持つ ROR アプライアンスの典型的な使用例を示しています。

ROR 使用状況例 3

使用されるアプライアンス:

AppServer1 と AppServer2 の両方に対するプロパティ設定の例

プロパティ名

content_on_fs

off

ROR は、すべてのコンテンツにユーザ ボリューム コンテンツを使用

timezone

EST

EST タイム ゾーン

他の設定にはそれぞれデフォルト値があります。

クライアント リクエストはクライアント ゲートウェイ上に送られます。 ゲートウェイは lb ロード バランサへリクエストを転送します。これは AppServer1 と AppServer2 のいずれかにリクエストを転送します。

アプライアンス内でオープン ソース/サードパーティ ソフトウェアを使用

ROR は、LUX5 の基本インストールに加えて、以下のオープン ソース サード パーティ パッケージを使用します。

RPM

ソフトウェア

バージョン

変更

ライセンス

apr

1.2.7-11

なし

Apache Software License 2.0

apr-util

1.2.7-7.el5

なし

Apache Software License 2.0

e2fsprogs

1.39-20.el5

なし

GPLv2

e2fsprogs-libs

1.39-20

なし

GPLv2

freetds

0.64-11.el5.centos

なし

GPLv2

glibc

2.5-34

なし

LGPL

glibc-common

2.5-34

なし

LGPL

httpd

2.2.3-22.el5.centos

なし

Apache Software License 2.0

keyutils-libs

1.2-1

なし

LGPL

krb5-libs

1.6.1-31.el5_3.3

なし

MIT、自由に配布可能

libgcc

4.1.2-44.el5

なし

GPLv2

libgomp

4.3.2-7.el5

なし

GPLv2

libselinux

1.33.4-5.1.el5

なし

パブリック ドメイン(著作権なし)

libselinux-python

1.33.4-5.1.el5

なし

パブリック ドメイン(著作権なし)

libstdc++

4.1.2-44.el5

なし

GPLv2

mailcap

2.1.23-1.fc6

なし

パブリック ドメイン(著作権なし)

mysql

5.0.45-7.el5

なし

GPLv2

nfs-utils

1.0.9-40

なし

GPLv2

openldap

2.3.43-3.el5

なし

OpenLDAP

openssl

0.9.8e-7.el5

なし

BSD-like

perl-DBI

1.52-2.el5

なし

GPL

pkgconfig

0.21-2.el5

なし

GPLv2

postgresql

8.1.11-1.el5_1.1

なし

BSD

postgresql-libs

8.1.11-1.el5_1.1

なし

BSD

ruby

1.8.6.383-4

なし

Ruby License/GPL - COPYING を参照

ruby-devel

1.8.6.383-4

なし

Ruby License/GPL - COPYING を参照

ruby-irb

1.8.6.383-4

なし

Ruby License/GPL - COPYING を参照

ruby-libs

1.8.6.383-4

なし

Ruby License/GPL - COPYING を参照

ruby-rdoc

1.8.6.383-4

なし

Ruby License/GPL - COPYING を参照

unixODBC

2.2.11-7.1

なし

LGPL

ソースからのインストール

ソフトウェア

バージョン

変更

ライセンス

2000-2005-adapter

2.2.22

なし

MIT

mysql-ruby

2.8.2

なし

Ruby License

rubygems

1.3.6

なし

Ruby License

GEMs

ソフトウェア

バージョン

変更

ライセンス

actionmailer

2.3.4

なし

MIT

actionpack

2.3.4

なし

MIT

activerecord

2.3.4

なし

MIT

activeresource

2.3.4

なし

MIT

activesupport

2.3.4

なし

MIT

capistrano

2.5.9

なし

MIT/X Consortium License

cgi_multipart_eof_fix

2.5.0

なし

Ruby License

daemons

1.0.10

なし

Ruby License

dbd-odbc

0.2.5

なし

BSD

dbi

0.4.3

なし

BSD

deprecated

2.0.1

なし

BSD

fastthread

1.0.7

なし

Ruby License

ferret

0.11.6

なし

MIT/X Consortium License

gem_plugin

0.2.3

なし

Ruby License

highline

1.5.2

なし

Ruby License/GPL

mongrel

1.1.5

なし

Ruby License

mongrel_cluster

1.0.5

なし

Ruby License

rake

0.8.4

なし

Ruby License

net-scp

1.0.2

なし

Ruby License/GPL

net-sftp

2.0.3

なし

BSD/Ruby License

net-ssh

2.0.15

なし

BSD/Ruby License

net-ssh-gateway

1.0.1

なし

BSD/Ruby License

net-ssh-multi

1.0.1

なし

BSD/Ruby License

passenger

2.2.11

なし

GPLv2

pg

0.8.0

なし

Ruby License

rails

2.3.4

なし

Ruby License

rake

0.8.7

なし

MIT/X Consortium License

sqlite3-ruby

1.2.5

なし

BSD