ロードバランスイベントサービストラフィック

このページでは、イベントサービス用のロードバランサのサンプル構成について説明します。ロードバランスのイベントサービスのトラフィックに関するコンセプトと要件についても紹介します。

ロードバランスのイベントサービスのトラフィックの概要

イベントサービスクラスタのメンバー間で負荷を分散するためには、ロードバランサを設定する必要があります。単一ノードのイベントサービスデプロイの場合、ロードバランサの使用はオプションですが、あとでイベントサービスクラスタにスケールアップする際の作業を最小限に抑えることができるため、使用することをお勧めします。

ロードバランサを構成するには、ロードバランサがラウンドロビン方式でトラフィックを配信する宛先であるサーバプールに、イベントサービスのクラスタメンバーを追加します。イベントサービスの各ノードのプライマリポート(デフォルトでは 9080)に対するルーティングルールを構成します。プライマリノードであるかどうかにかかわらず、イベントサービスクラスターのすべてのメンバーをルーティングルールに含める必要があります。クラスタのサイズを大きくすると、ここで説明しているロードバランサのルールの変更が必要になることに注意してください。

下図はサンプルデプロイのシナリオです。この例では、ロードバランサはコントローラとイベントサービスのすべてのクライアント、および分析エージェントに対するトラフィックを転送します。

サンプルのデプロイメントシナリオ

手順について

以下の手順では、ロードバランサをイベントサービス用にインストールおよび構成する方法について説明します。この手順では、Nginx によるロードバランンシングと、ロードバランサで SSL の終了を行う HAProxy によるロードバランシングの 2 つの例を示しています。これらの手順ではCentOS 6.6 Linuxオペレーティングシステム環境でのコマンドの使用例を示しています。

まったく同じ環境は 2 つとないため、使用するロードバランサのタイプ、オペレーティングシステム、および他のサイト特有の要件に合わせて手順を調整してください。

Nginx のサンプル構成

  1. Nginxソフトウェアをインストールします。ほとんどの Linux ディストリビューションで、ディストリビューションのタイプに合ったビルトインのパッケージマネージャ(apt-getyum など)を使用して Nginx をインストールできます。CentOS システムでは、次のように yum を使用して Nginx をインストールできます。
    sudo yum install epel-release
    sudo yum install nginx
  2. 以下の構成を Nginx の構成ディレクトリ内の新規ファイル(例:/etc/nginx/conf.d/eventservice.conf)に追加します。
    upstream events-service-api {
       server 192.3.12.12:9080;
       server 192.3.12.13:9080;
       server 192.3.12.14:9080;
       server 192.3.12.15:9080;
       keepalive 15;
    }
    server {
       listen 9080;
       location / {
          proxy_pass http://events-service-api;
          proxy_http_version 1.1;
          proxy_set_header Connection "Keep-Alive";
          proxy_set_header Proxy-Connection "Keep-Alive";
       }
    }

    この例では、クラスタメンバー上のAPIストアポート用に単一のアップストリームコンテキストがあります。デフォルトでは、Nginxはラウンドロビン方式でホストにトラフィックを配信します。

  3. このマシンでオペレーティングシステム(OS)の以下の設定を確認します。
    • オペレーティングシステムに組み込まれているファイアウォールで受信接続を許可するか、または無効にしても安全が確保される場合はファイアウォールを無効にします。CentOS 6.6 では、以下のコマンドを使用して必要な構成を iptables に挿入します。

      sudo iptables -I INPUT -p tcp --dport 9080 -j ACCEPT

      ファイアウォールを無効にするには、次のコマンドを実行します。

      sudo service iptables save
      sudo service iptables stop
      sudo chkconfig iptables off
    • 必要に応じて、/etc/selinux/config を編集して SELINUX=disabled を設定し、selinux セキュリティ施行を無効にしますこの設定を反映するためにコンピュータを再起動します。
  4. Nginx を起動します。
    sudo nginx

    Nginxが起動すると、トラフィックがアップストリームサーバーに誘導されるようになります。不明なディレクティブに関するエラーが発生する場合は、最新バージョンの Nginx を使用していることを確認します。

HAProxyのサンプル構成:ロードバランサでのSSLの終了

イベントサービスクラスタの前にあるロードバランサで SSL を終了することによって、イベントサービスマシンでの SSL 処理の負担を軽減できます。そうした場合、ロードバランサとイベントサービスマシン間の接続は保護されないため、ロードバランサとイベントサービスマシンが内部の安全なネットワーク内に置かれているデプロイにのみ適しています。

以下の手順では、ロードバランサで SSL の終了をセットアップする方法について説明しています。これらの手順ではロードバランサの例として HAProxy を使用しています。手順の概要は次のとおりです。

次図は、構成手順に反映されるサンプルデプロイを示しています。

サンプルのデプロイシナリオ

はじめに

これらの手順を実行するには以下が必要です。

  • ロードバランサマシンでの root ユーザーアクセス権限
  • ロードバランサマシンにインストールされている OpenSSL
  • ロードバランサマシン上の HAProxy ソフトウェア(HAProxy バージョン 1.5 以降)

ステップ1:HAProxyソフトウェアのインストール

ロードバランサマシンにHAProxyをまだインストールしていない場合はインストールします。インストール方法は使用しているオペレーティングシステムおよび使用されているパッケージマネージャによって異なります。たとえば、Linux で yum パッケージマネージャを使用している場合は、次のコマンドを入力します。

sudo yum install haproxy

ステップ2:セキュリティ証明書の作成

セキュリティ証明書により、ロードバランサとイベント サービス クライアント(アプリケーション分析エージェントも含む)間の接続が保護されます。自己署名証明書または認証局(CA)署名済み証明書を使用して、ロードバランサとクライアント間の接続を保護できます。それぞれのシナリオでの手順を以下に示しています。

実稼働環境での使用においては、自己署名証明書ではなく、サードパーティ CA または独自の内部 CA により署名された証明書を使用することをお勧めします。

ロードバランサマシンでの自己署名証明書の作成

  1. ロードバランサマシンのコマンドラインプロンプトで、証明書リソース用のディレクトリを作成してそのディレクトリに移動します。
    sudo mkdir -p /etc/ssl/private
    cd /etc/ssl/private/
  2. 次のコマンドを実行し、証明書を有効にしたい日数(たとえば、1 年の場合 365)で <number_of_days> を置き換え、証明書を作成します。
    sudo openssl req -x509 -nodes -days <number_of_days> -newkey rsa:2048 -keyout ./events_service.key -out ./events_service.crt
  3. プロンプトに従って証明書を作成します。Common Nameには、外部DNSにより識別されるロードバランサマシンのホスト名(つまり、エージェントがイベントサービスへの接続に使用するホスト名)を入力します。これは、証明書に関連付けられるドメインです。
  4. 以下のようにして、証明書アーティファクトをPEMファイルに入れます。
    chmod 600 events_service.crt events_service.key
    cat events_service.crt events_service.key > events_service.pem
    chmod 600 events_service.pem

認証局署名済み証明書の作成およびインストール

  1. ロードバランサマシンのコマンドラインプロンプトで、証明書リソース用のディレクトリを作成してそのディレクトリに移動します。
    sudo mkdir -p /etc/ssl/private
    cd /etc/ssl/private/
  2. 秘密鍵に基づいて証明書署名リクエスト(CSR)を作成します。例:
    openssl req -new -sha256 -key /etc/ssl/private/events_service.key -out /etc/ssl/private/events_service.csr
  3. events_service.csr ファイルをサードパーティ CA または独自の内部 CA に送信して署名を取得します。署名済み証明書を受信したら、その証明書と CA のルート証明書をインストールします。
  4. 認証局から返された証明書の形式によっては、証明書とキーをPEM形式に変換する必要があります。次に例を示します。
    chmod 600 <ca_crt> events_service.key
    cat <ca_crt> <intermediate_ca_crt_if_any> events_service.key > events_service.pem
    chmod 600 events_service.pem 

    このコマンドでは、<ca_crt> を認証局から返された証明書で置き換えます。また、中間 CA 証明書がある場合は、PEM ファイルの作成時にそれも含めます。

ステップ3:ロードバランサの構成

  1. HAProxy の構成ファイル /etc/haproxy/haproxy.cfg を編集用に開きます。
  2. ファイルの末尾に次の構成を挿入します。プレースホルダアドレスを、クラスターマシンのホスト名または IP アドレスに置き換えます。ポートは、イベントサービスノードのプライマリリスニングポートである必要があります。
     frontend events_service_frontend
          bind *:9443 ssl crt /etc/ssl/private/events_service.pem
          mode tcp
          reqadd X-Forwarded-Proto:\ https
          default_backend events_service_backend
    
          backend events_service_backend
          mode tcp
          balance roundrobin
            server node1 192.3.12.12:9080 check
            server node2 192.3.12.13:9080 check
            server node3 192.3.12.14:9080 check
  3. HAProxy ロードバランサを起動します。
    sudo service haproxy restart

ステップ4:エージェントの構成

分析エージェントを実行する各マシンで以下の手順を実行します。

  1. Secure Copy(scp)または好みのファイル転送方法を使用してエージェントを実行しているマシンのホームディレクトリ(以下の手順では $HOME で表されている)に、署名済み証明書 events_service.crt のコピーを転送します。
  2. 証明書ファイルを、エージェントが使用するトラストストアのディレクトリにコピーします。
    cp $HOME/events_service.crt $JAVA_HOME/jre/lib/security/
  3. そのディレクトリに移動して既存の cacerts.jks ファイルのバックアップを作成します。
    cd $JAVA_HOME/jre/lib/security/
    cp cacerts.jks cacerts.jks.old
  4. 証明書を Java キーストアにインポートします。
    • 署名済み証明書を使用する場合は、その証明書を次のようにインポートします。

      keytool -import -trustcacerts -v -alias events_service -file /path/to/CA-cert.txt -keystore cacerts.jks
    • 自己署名証明書を使用する場合は、次のように証明書をインポートします。

      keytool -import -v -alias events_service -file events_service.crt -keystore cacerts.jks

    プロンプトが表示されたら、トラストストアのパスワード(デフォルトは changeit)を入力し、証明書を信頼するかどうかの質問に「yes」と入力します。

  5. インポートした証明書がトラストストアに存在することを確認します。
    keytool -list -keystore cacerts.jks -alias events_service
  6. 分析エージェントのインストールフォルダに移動し、conf/analytics-agent.properties を編集して HTTP エンドポイントのプロパティ値を変更します。
    http.event.endpoint=https://<External_DNS_hostname_Load_Balancer>:9080
  7. 次のプロパティ名とパスを設定します。
    https.event.trustStorePath=<absolute path to trust store>
    https.event.trustStorePassword=<base64 encoded password>
  8. 分析エージェントを起動します(すでに実行中の場合は再起動します)。
  9. エージェントの正常性を確認します。これは Web ブラウザで正常性確認の URL(http://<analytics_agent_host>:9091/healthcheck?pretty=true)に移動することで可能です。

    エージェントが正常に動作していれば、healthyフィールドが次の例のようにtrueに設定されています。

    "analytics-agent / Connection to https://<External_DNS_hostname_Load_Balancer>:9443/v1" :
    { "healthy" : true }

ステップ5:コントローラの構成

まだ行っていない場合は、セキュアな接続も使用してロードバランサを介したコントローラからイベントサービスへの接続を構成します。

  1. Secure Copy(scp)または好みのファイル転送方法を使用してコントローラを実行しているマシンのホームディレクトリ(以下の手順では $HOME で表されている)に、署名済み証明書 events_service.crt のコピーを転送します。
  2. コントローラのトラストストア(コントローラのスタートアップパラメータ -Djavax.net.ssl.trustStoreで指定)が置かれているディレクトリに移動します。
  3. 既存の cacerts.jks ファイルのバックアップを作成します。
    cp cacerts.jks cacerts.jks.old
  4. 証明書を Java キーストアにインポートします。
    • 署名済み証明書を使用する場合は、その証明書を次のようにインポートします。

      keytool -import -trustcacerts -v -alias <ca_cert_name> -file /path/to/CA-cert.txt -keystore cacerts.jks
    • 自己署名証明書を使用する場合は、次のように証明書をインポートします。

      keytool -import -v -alias events_service -file events_service.crt -keystore cacerts.jks

    プロンプトが表示されたら、トラストストアのパスワード(デフォルトは changeit)を入力し、証明書を信頼するかどうかの質問に「yes」と入力します。

  5. インポートした証明書がトラストストアに存在することを確認します。
    keytool -list -keystore cacerts.jks -alias events_service
  6. コントローラを再起動します。
  7. 管理コンソールで、コントローラ設定 appdynamics.on.premise.event.service.url を検索します。
  8. その値をロードバランサの URL の値 https://<External_DNS_hostname_Load_Balancer>:9443/v1 に設定します。
これで、分析UIにアクセスできることと、データが表示されていることを確認できるようになりました。