Running Liferay DXP in Amazon Web Services
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

AWS での自動スケーリング

Liferay の自動スケーリング機能は、Liferay クラスター内のレプリカ (ノード) を自動的に作成および破棄して、パフォーマンスを最適化します。 いつでも起動できるノードの最小数と最大数を選択できます。 自動スケーリングを必要とするアプリケーションのリソース使用量 (CPU とメモリ) を定期的に監視します。

クラスタリングと自動スケーリングには、有効な Liferay クラスタ ライセンスが必要です。

静的クラスタリング

静的クラスタリングは、 replicaCount プロパティを使用して、必要なレプリカの数を手動で設定することで構成されます。

replicaCount: 2

クラスターをスケーリングするように Helm を構成した後、必要なレプリカ数を指定して Kubernetes CLI を使用して次のコマンドを実行します。

kubectl scale statefulset/liferay --replicas=2

外部エージェントを使用してメトリックを確認し、いつどのようにスケーリングするかを決定することで、静的クラスタリングを使用して Liferay を自動的にスケーリングできます。 ただし、自動スケーリングに慣れているユーザーには、動的クラスタリングが推奨されます。

動的クラスタリング

動的クラスタリングを使用したデフォルトの自動スケーリングでは、Kubernetes Metrics Server によって発行されたメトリック (CPU とメモリ) に基づいてクラスターをスケーリングする方法を定義できます。 他のメトリックに基づいてスケーリングするには、 カスタムメトリックを使用した高度な自動スケーリングを参照してください。 動的クラスタリングを構成するには、次の手順に従います。

  1. コンテナ リソースを構成して 、クラスターを自動スケーリングできるように準備します。

  2. autoscaling.enabled ポータルプロパティtrueに設定します。

  3. 次に、 .yaml ファイルで 自動スケーリング Helm プロパティを定義します。 これを行うには、他のいくつかのプロパティを値として渡す必要があります。

  4. enabled プロパティを trueに設定します。

    enabled: true
    
  5. Kubernetes がクラスターをスケーリングできる方法を制限するには、 minReplicasmaxReplicas の数を選択します。

    maxReplicas: 5
    minReplicas: 1
    
  6. スケーリングの基準となるメトリックを選択します。 たとえば、各レプリカの CPU とメモリの使用率を 80% に維持するには、次の値を使用します。 この方法では、レプリカの CPU またはメモリのいずれかが限界に近づいた場合に、負荷を軽減するために新しいレプリカが作成されます。 さらに、CPU とメモリの平均使用率がこれより低い場合、クラスターはリソースを節約するためにレプリカを破棄します。

    metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          averageUtilization: 80
          type: Utilization
    - type: Resource
      resource:
        name: memory
        target:
          averageUtilization: 80
          type: Utilization
    
  7. 最後に、メトリックを検証する頻度、スケーリング前のタイムアウト、リソース使用量の許容範囲などの追加の動作を定義できます。

    behavior:
      scaleDown:
        policies:
        - periodSeconds: 60
          type: Percent
          value: 10
          type: Pods
          value: 1
        stabilizationWindowSeconds: 60
      scaleUp:
        stabilizationWindowSeconds: 300
    

最終的に、 自動スケーリング プロパティは次のようになります。

autoscaling:
  behavior:
    scaleDown:
      policies:
      - periodSeconds: 60
        type: Percent
        value: 10
        type: Pods
        value: 1
      stabilizationWindowSeconds: 60
    scaleUp:
      stabilizationWindowSeconds: 300
  enabled: true
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 80
        type: Utilization
  - type: Resource
    resource:
      name: memory
      target:
        averageUtilization: 80
        type: Utilization
  minReplicas: 1

カスタムメトリックを使用した高度な自動スケーリング

カスタム メトリックを使用した自動スケーリングには、 custom.metrics.k8s.io または external.metrics.k8s.io API を実装する外部アダプターが必要です。 これに対する推奨される解決策は KEDAです。 Kubernetes クラスターからメトリックを収集する方法も必要です。 詳細については、 Kubernetes からのメトリックの表示 を参照してください。

完了すると、必要なメトリック データがシステムに保存され、KEDA スケーラーがデータ ソースとして使用するように構成できるようになります。 次の Helm コマンドを使用して KEDA をインストールします。

  1. liferay-aws-terraform/cloudに移動します。 これは、以前に Liferayをインストールしたディレクトリです。

  2. KEDA helm チャートをインストールします。

    helm repo add kedacore https://kedacore.github.io/charts
    helm repo update
    helm upgrade -i keda kedacore/keda \
        --create-namespace \
        --namespace keda-system
    
  3. 収集されるカスタム メトリックを制御するリソースを定義します。

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      annotations:
        scaledobject.keda.sh/transfer-hpa-ownership: "true"
      name: liferay-scaledobject
      namespace: liferay-system
    spec:
      advanced:
        horizontalPodAutoscalerConfig:
          name: liferay-default
        restoreToOriginalReplicaCount: true
      cooldownPeriod: 300
      maxReplicaCount: 5
      minReplicaCount: 1
      pollingInterval: 30
      scaleTargetRef:
        apiVersion: apps/v1
        kind: StatefulSet
        name: liferay-default
      triggers:
        [...]
    
  4. .yaml ファイルの triggers キーに対して、自動スケーリングの基準となるメトリックを選択します。 たとえば、 Prometheus をコレクターとして使用し 、ライブ ユーザー数がノードあたり 200 に達したときにスケーリングしたい場合:

    triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prometheus-server.prometheus-system:9090
        query: abs(server_live_users{instance="liferay-default-0", job="liferay-system/liferay-default"}) / on(job) group_left() count by (job) (server_live_users{job="liferay-system/liferay-default"})
        threshold: '200'
    
  5. 次のコマンドを使用してリソースをインストールします。

    kubectl apply -n liferay-system -f liferay-scaledobject.yaml
    

現在、ユーザーがログインすると、ノードあたりの数が 200 を超えると、クラスターがスケールアップします。