
順番に始めましょう:
準備する
フェイルセーフクラスターを作成するには、GlassFishサーバー用の2台のマシンn1およびn2が必要です(1台にはDASおよび2台のGFサーバーがインストールされます)。 ロードバランシング用のlb1マシン。 DBMS用のDB1マシン。 すべての車が互いに「見える」ようにします(ping)。
すべてのソフトウェアはLinux上で実行されます。 CentOSで事前に準備された仮想マシンのイメージを使用します。 GlassFishはSSHを使用してリモートノードを管理するため、各クラスターマシンにSSHサーバーをインストールする必要があります。 また、SSHで作業できるようにするには、各OSに個別のアカウントが必要です。 すべてのマシンに対して同じ名前を付けることを提案します:glassfish。
# adduser glassfish
# passwd glassfish
GlassFishは非標準ポートを使用します。ブラウザの管理コンソールを使用してポートを操作するには、ファイアウォールで適切なルールを設定するか、完全に無効にする必要があります。 私は後者を行うことを提案します:
# service iptables save
# service iptables stop
# chkconfig iptables off
もちろん、JVMなしではできません。
多数の設定が必要なので、私はきちんといじる必要があることをすぐに警告します。

クラスター構成
クラスタ設定は、GlassFish asadmin deliveryのユーティリティを使用して、主にコマンドラインから実行されます
- GlassFishディストリビューションをダウンロードする
wget download.java.net/glassfish/3.1.1/release/glassfish-3.1.1.zip
開梱します。 - 管理ドメイン(domain1)のインスタンスを開始します。
./asadmin start-domain domain1
GlassFishはデフォルトで管理ドメインへのリモート接続を禁止しています。 また、DASが存在するノードを除くクラスターのすべてのノード(ノードエージェント)は、それと対話できません。
典型的なエラー:
Failed to rendezvous with DAS on n1:4848. Please check if this server is running, that the host and port are correct, and that this server is configured to allow remote access.
これを回避するには、次を実行します。
./asadmin enable-secure-admin
そして、管理ドメインを再起動します。
クラスター自体を作成します。
./asadmin create-cluster c1
。
同じ物理マシン上にあるアプリケーションサーバーの2つのインスタンスを作成します。
./asadmin create-local-instance --cluster c1 i1
./asadmin create-local-instance --cluster c1 i2
- クラスターを実行します。
./asadmin start-cluster c1
- マシンn2にある新しいインスタンスを追加します(コマンドはn2で物理的に実行されます)。
。/asadmin –host n1 –port 4848 create-local-instance –cluster c1 i3
./asadmin –host n1 –port 4848 create-local-instance –cluster c1 i4
- 管理コンソールで、新しく作成されたインスタンスを見つけ、そのタイプをSSHに変更し、[ノードホスト]フィールドの値をn2に変更します。 この場合、マシンn2にSSH経由でアクセスするためのユーザー名とパスワードを指定する必要があります。 クラスターを開始します。 すべてのインスタンスが機能していることがわかります。

負荷分散とHA
実際、アプリケーションをクラスターにデプロイする準備はすべて整いましたが、これでは十分ではありません。 ロードバランシングとHAは保証されません。
ユーザーがアプリケーションを操作しやすくするために、ロードバランサーをインストールして構成する必要があります。
- 1つのURLのみに連絡しました。
- それらの要求は、クラスターサーバーのすべてのインスタンスに均等に分散されました。
- 特定の数のインスタンスに障害が発生した場合、ユーザーは通常モードでアプリケーションを引き続き使用できます。
- 一般的に、クラスターの内部「キッチン」については知りませんでした。
一般に、GlassFishは「人気のある」httpサーバーのバランスプラグインを「含んでいます」。 「含む」および「人気のある」という言葉は、引用された無駄ではありません。 このプラグインはGFのオープンソースバージョンには含まれていません。さらに、Oracle iPlanet Web Server、Oracle HTTP Server、Apache HTTP Server、Microsoft IISがサポートされています。 Apacheはかつて良かったということは誰もが知っていますが、現在ではより効率的なソリューションがあります。
候補の中には:NGINX、HAProxy、lighthttpd。
国内メーカーをサポートし、 NGINXを選択します。NGINXは 、ますます市場を獲得します。
- NGINXをインストールします。
#yum install nginx
#nano /etc/nginx/nginx.conf
- NGINXを構成して、スティッキーセッションのサポートを使用して、同じ重みの4つのサーバーに対するラウンドロビンリクエストのバランスを取ります(構成の一部を以下に示し、サーバーを起動します)。
upstream backend {
ip_hash;
server 192.168.0.1:28080 max_fails=5 fail_timeout=15s;
server 192.168.0.1:28081 max_fails=5 fail_timeout=5s;
server 192.168.0.2:28082 max_fails=5 fail_timeout=5s;
server 192.168.0.2:28083 max_fails=5 fail_timeout=5s;
}
これは、ip_hashメソッドを使用して特定のサーバーへのユーザーセッションを保護する最も単純な構成であることは注目に値します - HAが機能するには、ホストn1とn2に共通の親ドメインが必要です。 たとえば、cluster.com。 これを行うには、両方のマシンの/ etc / hostsファイルを次のように変更します。
n1:
127.0.0.1 localhost
127.0.1.1 n1.cluster.com
127.0.0.1 n1.cluster.com
192.168.0.2 n2.cluster.com
n2:
127.0.0.1 localhost
127.0.1.1 n2.cluster.com
127.0.0.1 n2.cluster.com
192.168.0.1 n1.cluster.com
- クラスター内の各物理マシンでマルチキャストの動作を確認するには、次の手順を実行します。
./asadmin validate-multicast
- DAS GlassFish管理コンソールで、n2の記述をn2.cluster.comに変更する必要があります
- GlassFishがクラスターインスタンス間でHttpセッションを複製するには、アプリケーションのWeb記述子に適切な指示(<distributable />タグ)が含まれ、アプリケーションのデプロイ時にAvalaibilityフラグを設定する必要があります。
DBのインストールと構成
この例では、 PostgreSQLを使用します 。
DBMSをインストールし、新しいユーザーとデータベースを作成します。
# yum install postgresql-8.4
# service postgresql initdb
# service postgresql start
PostgreSQLでは、デフォルトでローカル接続のみが許可されています。 これを修正するには、許可されたサブネットを指定する必要がある設定ファイル/var/lib/pgsql/data/pg_hba.confを修正する必要があります: host allすべて192.168.0.0/24 md5
さて、それだけです! これで、最終的にアプリケーションをデプロイできます(たとえば、jforumを使用します)。

正直に言うと、これらすべての設定の後、私の脳はほとんど「沸騰」しました。 上記のJelasticのプロセス全体を自動化し、数回のクリックに変えるには、多くの労力が必要でした。

jelastic.comでその結果を試して、投稿へのコメントで意見を共有できます。