現場で一人でいるのは戦士ではありません:フェールオーバークラスターを作成する方法

野心的なインターネットプロジェクトの立ち上げとメディアでの成功したPRの後、同社は多くの訪問者の流入を期待することがよくあります。 残念ながら、私たちの世界は完璧ではありません。そのため、このサイトは、「habraeffekt」というサークルで呼ばれるビジターの流れに対応できず、速度が低下し始めます。 したがって、会社はお金と評判の両方を失います。 このような場合、プログラマは通常、管理者を非難し、管理者はプログラマを非難します。 それは悪循環です。



画像 アプリケーションの速度が低下し始めたらどうしますか? 1つの方法は、 クラスタアーキテクチャに変換することです。 残念ながら、これを行う方法を説明する指示や記事はあまりありません。 そのため、 GlassFishに基づいてフェールオーバークラスターを作成する方法の簡単な例を公開することにしました。 このプロセスなどはJelasticで自動化されていますが、何らかの理由でクラウドホスティングに切り替えることができない場合は、この記事が役立ちます。

順番に始めましょう:



準備する


フェイルセーフクラスターを作成するには、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のユーティリティを使用して、主にコマンドラインから実行されます

  1. GlassFishディストリビューションをダウンロードする

    wget download.java.net/glassfish/3.1.1/release/glassfish-3.1.1.zip





    開梱します。
  2. 管理ドメイン(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





  3. クラスターを実行します。

    ./asadmin start-cluster c1



  4. マシンn2にある新しいインスタンスを追加します(コマンドはn2で物理的に実行されます)。

    /asadmin –host n1 –port 4848 create-local-instance –cluster c1 i3

    ./asadmin –host n1 –port 4848 create-local-instance –cluster c1 i4




  5. 管理コンソールで、新しく作成されたインスタンスを見つけ、そのタイプをSSHに変更し、[ノードホスト]フィールドの値をn2に変更します。 この場合、マシンn2にSSH経由でアクセスするためのユーザー名とパスワードを指定する必要があります。 クラスターを開始します。 すべてのインスタンスが機能していることがわかります。


画像






負荷分散とHA


実際、アプリケーションをクラスターにデプロイする準備はすべて整いましたが、これでは十分ではありません。 ロードバランシングとHAは保証されません。

ユーザーがアプリケーションを操作しやすくするために、ロードバランサーをインストールして構成する必要があります。



一般に、GlassFishは「人気のある」httpサーバーのバランスプラグインを「含んでいます」。 「含む」および「人気のある」という言葉は、引用された無駄ではありません。 このプラグインはGFのオープンソースバージョンには含まれていません。さらに、Oracle iPlanet Web Server、Oracle HTTP Server、Apache HTTP Server、Microsoft IISがサポートされています。 Apacheはかつて良かったということは誰もが知っていますが、現在ではより効率的なソリューションがあります。

候補の中には:NGINX、HAProxy、lighthttpd。

国内メーカーをサポートし、 NGINXを選択します。NGINXは 、ますます市場を獲得します。

  1. NGINXをインストールします。

    #yum install nginx

    #nano /etc/nginx/nginx.conf




  2. 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メソッドを使用して特定のサーバーへのユーザーセッションを保護する最も単純な構成であることは注目に値します
  3. 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




  4. クラスター内の各物理マシンでマルチキャストの動作を確認するには、次の手順を実行します。

    ./asadmin validate-multicast



  5. DAS GlassFish管理コンソールで、n2の記述をn2.cluster.comに変更する必要があります
  6. 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でその結果を試して、投稿へのコメントで意見を共有できます。



All Articles