メインコンテンツまでスキップ

Config ComputeGroups

分離されたストレージとCompute Groupクラスタにおいて、Compute Groupはオブジェクトストレージからのデータインポートとデータキャッシュを担当し、クエリパフォーマンスを向上させます。Compute Groupは互いに分離されています。

最小限のCompute Group設定

Compute Groupは同一のタスクを実行するBEノードの集合です。DorisDisaggregatedClusterリソースを設定する際、各Compute Groupには名前としても機能する一意の識別子を割り当てる必要があり、一度設定すると変更できません。最小限のCompute Group設定は3つのコンポーネントで構成されます:uniqueIdimagereplicas。例:

spec:
computeGroups:
- uniqueId: ${uniqueId}
image: ${beImage}
replicas: 1

ここで、${beImage}はBEサービスをデプロイするために使用されるイメージです。Apache Doris公式リポジトリから提供されるイメージを使用してください。${uniqueId}はコンピュートグループの一意識別子および名前であり、[a-zA-Z][0-9a-zA-Z_]+パターンに一致する必要があります。replicasフィールドは、コンピュートグループ内のBEノード数を指定します。

複数のコンピュートグループの設定

DorisDisaggregatedClusterリソースは、複数の独立したコンピュートグループのデプロイをサポートします。以下の例では、cg1cg2という2つのコンピュートグループを含む設定を示しています:

spec:
computeGroups:
- uniqueId: cg1
image: ${beImage}
replicas: 3
- uniqueId: cg2
image: ${beImage}
replicas: 2

この例では、コンピュートグループ cg1 には3つのレプリカがあり、コンピュートグループ cg2 には2つのレプリカがあります。コンピュートグループは分離されていますが、各グループ内のBEノードは分離クラスター全体で同じイメージを使用することが推奨されます。

コンピュートリソースの設定

分離クラスターのデフォルトデプロイメントサンプルでは、BEサービスにリソース制限はありません。DorisDisaggregatedCluster リソースは、Kubernetes の resources.requests and resources.limits を使用してCPUとメモリリソースを指定します。例えば、コンピュートグループ cg1 のBEノードに8つのCPUコアと8Giのメモリを割り当てるには、以下の設定を使用します:

spec:
computeGroups:
- uniqueId: cg1
requests:
cpu: 8
memory: 8Gi
limits:
cpu: 8
memory: 8Gi

この設定を適切なDorisDisaggregatedClusterリソースに適用してください。

アクセス設定

デフォルトでは、computeグループは外部にサービスを公開しません。Doris OperatorはDorisDisaggregatedClusterリソース内のcomputeグループのプロキシとしてServiceを提供します。ClusterIPNodePortLoadBalancerの3つのサービス公開モードがサポートされています。

ClusterIP

KubernetesはデフォルトでClusterIPサービスタイプを使用し、これによりクラスタ内の内部アドレスが提供されます。

ステップ1:ServiceタイプをClusterIPとして設定

DorisはデフォルトでKubernetes内のClusterIPモードを使用するよう設定されており、追加の設定は不要です。

ステップ2:Serviceアクセスアドレスの取得

クラスタをデプロイ後、以下のコマンドを使用してcomputeグループに公開されたServiceを確認してください:

kubectl -n doris get svc

サンプル出力は以下の通りです:

NAME                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                               AGE
test-disaggregated-cluster-cg1 ClusterIP 10.152.183.154 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 2d

この出力は、doris namespace 内の uniqueIdcg1 である compute group の Service を示しています。

NodePort

Kubernetes クラスター外部から Doris への外部アクセスが必要な場合、NodePort サービスタイプを使用できます。NodePort は2つの設定方法をサポートしています:静的ホストポートマッピングと動的ホストポート割り当て。

  • 動的ホストポート割り当て: 明示的なポートマッピングが提供されていない場合、Kubernetes は pod が作成される際に自動的に未使用のホストポート(デフォルト範囲:30000–32767)を割り当てます。
  • 静的ホストポートマッピング: ポートマッピングが指定されており、ホストポートが利用可能な場合、Kubernetes はそのポートを割り当てます。静的割り当ての場合、ポートマッピングを計画する必要があります。Doris は外部との相互作用のために以下のポートを提供します:
Port NameDefault PortDescription
Web Server Port8040BE 上の HTTP サーバーポート、BE 情報を表示するために使用されます。

静的設定

compute group cg1 の場合、静的 NodePort 設定は以下の通りです:

spec:
computeGroups:
- uniqueId: cg1
service:
type: NodePort
portMaps:
- nodePort: 31012
targetPort: 8040

この設定では、コンピュートグループcg1のBEリスニングポート8040がホストポート31012にマップされています。

Dynamic Configuration

コンピュートグループcg1の動的NodePort設定は以下の通りです:

spec:
computeGroups:
- uniqueId: cg1
service:
type: NodePort

LoadBalancer モード

LoadBalancer service タイプは、クラウドベースの Kubernetes 環境で適用可能であり、クラウドプロバイダーのロードバランサーによって提供されます。 computeGroup.service タイプを LoadBalancer に設定します。以下のように:

spec:
feSpec:
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/load-balancer-type: "external"

カスタムスタートアップ設定

  1. スタートアップ情報を含むカスタムConfigMapの作成 デフォルトのデプロイメントでは、各コンピュートグループのBEサービスは、イメージに埋め込まれたデフォルト設定ファイルで起動します。Doris Operatorは、Kubernetes ConfigMapを使用してカスタムスタートアップ設定ファイルをマウントします。以下はBEサービス用のConfigMapの例です:

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: be-configmap
    labels:
    app.kubernetes.io/component: be
    data:
    be.conf: |
    # For JDK 17, these JAVA_OPTS serve as the default JVM options
    JAVA_OPTS_FOR_JDK_17="-Xmx1024m -DlogPath=$LOG_DIR/jni.log -Xlog:gc*:$LOG_DIR/be.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.security.krb5.debug=true -Dsun.java.command=DorisBE -XX:-CriticalJNINatives -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED"
    file_cache_path = [{"path":"/opt/apache-doris/be/file_cache","total_size":107374182400,"query_limit":107374182400}]
    deploy_mode = cloud

デカップルドクラスターのBEサービスのスタートアップ設定には、file_cache_path設定を含める必要があります。必要な形式については、Doris decoupled configuration for be.confを参照してください。

  1. ConfigMapをデプロイする 以下のコマンドを使用して、スタートアップ設定を含むカスタムConfigMapをKubernetesクラスターにデプロイします:

    kubectl -n ${namespace} -f ${beConfigMapFileName}.yaml

ここで、${namespace}DorisDisaggregatedCluster がデプロイされる名前空間であり、${beConfigMapFileName} はカスタムConfigMapを含むファイルの名前です。

  1. ConfigMapを使用するためにDorisDisaggregatedClusterリソースを更新する 以下に示すように、必要な場所にConfigMapをマウントするためにリソースを変更します:

    spec:
    computeGroups:
    - uniqueId: cg1
    configMaps:
    - name: be-configmap
    mountPath: "/etc/doris"
Note

起動設定は /etc/doris ディレクトリにマウントする必要があります。

永続ストレージ設定

デフォルトのデプロイメントでは、BEサービスはキャッシュとしてKubernetes EmptyDir を使用します。EmptyDirは非永続ストレージモードであり、サービスの再起動後にキャッシュされたデータが失われることを意味し、クエリパフォーマンスが低下する可能性があります。

サービスの再起動後にキャッシュされたデータが保持され、クエリ効率が低下しないようにするため、キャッシュ用に永続ストレージを設定する必要があります。BEサービスのログは、標準出力と起動設定の LOG_DIR パラメータで指定されたディレクトリの両方に出力されます。さらに、StreamLoadインポートプロセスは /opt/apache-doris/be/storage を一時ストレージの場所として使用します。予期しないサービス再起動によるデータ損失を防ぐため、このディレクトリにも永続ストレージをマウントする必要があります。

永続ストレージの例

以下は、必要なデータディレクトリに永続ストレージをマウントするための設定例です:

spec:
computeGroups:
- uniqueId: cg1
persistentVolumes:
- mountPaths:
- /opt/apache-doris/be/log
persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Gi
- mountPaths:
- /opt/apache-doris/be/storage
persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Gi
- persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi

この設定では、カスタムストレージ設定を使用してログディレクトリに300Giの永続ボリュームがマウントされます。もう一つの300Giの永続ボリュームが、WALとStreamLoadインポートに使用されるディレクトリにマウントされます。キャッシュディレクトリは、ストレージテンプレートから作成された500Giの永続ボリュームでマウントされます。

Note
  • mountPaths配列が空のままの場合、現在のストレージ設定はテンプレートとして扱われます。ユーザーが起動設定でfile_cache_pathを指定すると、オペレーターは自動的にディレクトリパスを解析してマウントします。

  • クラウドディスクのパフォーマンスを最大化するために、4つのディレクトリを設定し、4つの永続ボリュームをマウントすることを推奨します。

ログ永続化の無効化

ログの永続化が不要で、ログを標準出力にのみ出力する場合は、以下のように設定します:

spec:
computeGroups:
- uniqueId: cg1
logNotStore: true