Skip to main content

 

 

 

 
Language:

 

 

 

 
 
OutSystems

高可用性を備えたOutSystemsのキャッシュ無効化

This article applies to:OutSystems 11

RabbitMQをクラスタとして機能するように構成すると、フォールトトレランス、高可用性、データレプリケーションなどのメリットが得られます。アプリケーションでキャッシュ無効化サービスを常に利用できるようにするには、RabbitMQクラスタを使用する必要があります。

このガイドは、基本的なRabbitMQクラスタの設定し、これを使用してOutSystemsアプリケーションで使用されるキャッシュ無効化メカニズムの高可用性を確保するためのものです。また、TCPロードバランサを構成して、OutSystemsのキャッシュ無効化がRabbitMQの単一ノードの障害を許容できるようにする方法についても説明します。

RabbitMQクラスタの詳細については、RabbitMQの公式ドキュメントをご覧ください。

分散型RabbitMQクラスタを作成する

この例では、「ServerA」と「ServerB」という独立したサーバーで2つのノードが実行されている単純なRabbitMQクラスタを作成します。

手順1.各マシンにRabbitMQをインストールする

この手順は、このガイドの対象外です。RabbitMQをインストールして構成する方法の詳細については、公式ドキュメントをご覧ください。

2つの独立したマシンにRabbitMQをインストールした時点では、どちらのノードももう一方の存在をまったく認識していません。

上記の図では、両方のサーバーをインストールした後、キャッシュ無効化サービスのためにOutSystemsプラットフォームが「ServerA」のアドレスで構成されたものとします。

手順2.2つのノードを単一のクラスタに集約する

次に示すコマンドにあるrabbit@ServerBというアドレスは、«「ServerB」で実行されているrabbitという名前のRabbitMQブローカ»を意味します。RabbitMQブローカのデフォルトの名前はrabbitですが、構成することができます。

両方のノードを単一のクラスタに集約するには、以下の手順を実行します。

  1. 「ServerA」の<RabbitMQインストールフォルダ>\sbinフォルダでコマンドラインを開きます。
    Configuration ToolでRabbitMQをインストールした場合、インストールフォルダは<OutSystemsのインストールフォルダ>\Platform Server\thirdparty\RabbitMQ Server\rabbitmq_server-<バージョン>です。

  2. ServerBを正しいホスト名に置き換え、以下のコマンドを実行します。

    rabbitmqctl -n rabbit@ServerB stop_app
    rabbitmqctl -n rabbit@ServerB join_cluster rabbit
    rabbitmqctl -n rabbit@ServerB start_app
    

    注記: ホスト名は大文字と小文字が区別されます

    これらのコマンドによって、以下の処理が実行されます。
    — 「ServerB」のrabbitという名前のRabbitMQブローカが停止されます。
    — 「ServerB」のRabbitMQブローカと、同じrabbitという名前を持つ「ServerA」のRabbitMQブローカがクラスタで結合されます。
    — 「ServerB」のRabbitMQブローカが再起動されます。

これらのコマンドを実行すると、RabbitMQクラスタが使用できるようになります。

デフォルトでは、単一のRabbitMQインスタンスが実行されているかのようにRabbitMQノード間でデータが共有されます。ノード間でデータとキューをレプリケートする方法をカスタマイズするには、「関連リソース」セクションのリンクをご覧ください。

OutSystemsのキャッシュ無効化をフォールトトレラントにする

前のセクションでは、「ServerA」と「ServerB」という2つのノードでRabbitMQクラスタを構成する方法について説明しました。

ただし、OutSystemsモジュールは引き続き単一のRabbitMQノード「ServerA」と通信します。このノードとの通信が何らかの理由で失敗した場合、キャッシュ無効化も動作しなくなります。

OutSystemsモジュールをRabbitMQノードの障害に対してフォールトトレラントにするには、構成されたキャッシュ無効化サービスのアドレスへのすべての接続を管理するTCPロードバランサを構成する必要があります。ロードバランサは、OutSystemsモジュールとRabbitMQクラスタとの仲介役として機能します。

注記: 動的DNS構成を行うなど、ロードバランサソリューションの代替となる手段もあります。このような構成は、このガイドの対象外です。

例: NGINXをロードバランサとして設定する

HAProxyやMicrosoft Network Ba​​lancerなど、TCPをサポートする任意のロードバランサを使用できます。この例では、NGINXをクラスタのロードバランサとして使用します。

この例に従い、以下の手順を実行してNGINXで簡単なロードバランサを作成します。

1.ロードバランサとして機能するNGINXをサーバーにインストールします。

2.NGINX構成ファイル(<NGINXのインストールフォルダ>\conf\nginx.confに保存)の内容を、以下の内容に置き換えます。

events {
    worker_connections 1024;
}

stream {
    upstream rabbits {
        server <ServerA>:5672;
        server <ServerB>:5672;
    }

    server {
        listen        5672;
        proxy_pass    rabbits;
        proxy_timeout 120s;
        proxy_connect_timeout 5s;
    }
}

<ServerA><ServerB>を、各サーバーの適切な完全修飾ホスト名に置き換えます。NGINXによる負荷分散の処理方法の構成の詳細については、RabbitMQの公式ドキュメントをご覧ください。

3.インストールフォルダに移動し、以下のコマンドを実行してNGINXを開始します。

start nginx

4.Configuration Toolを開いてキャッシュ無効化サービスの構成を更新し、先ほど作成したNGINXロードバランサを使用するためにそのアドレスをサービスアドレスとして使用するようにします。

5.開発インフラのすべてのモジュールに設定を再適用します。

前の手順を実行した後、OutSystemsモジュールからの接続がロードバランサによってRabbitMQクラスタ内の各ノードに分散されるようになりました。

高可用性ロードバランサ

高可用性ロードバランサを構成する方法については、このガイドでは説明しません。このトピックの詳細については、DigitalOceanの「An Introduction to HAProxy and Load Balancing Concepts」(「High Availability」セクション)をご覧ください。HAProxyを中心に説明されていますが、どのロードバランサにも同じ原則が適用されます。