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

Config FE

FEは、分離されたストレージとコンピュート モードにおいて、主にクエリ解析、プランニング、および関連タスクを担当します。

Compute リソースの設定

Doris Operator repositoryで提供されているデプロイメント サンプルでは、FE サービスはデフォルトでリソース制限がありません。サービスのCPUとメモリ リソースは、Kubernetes のrequests and limitsを使用して設定できます。例えば、FEに8 CPUコアと8Giのメモリを割り当てるには、以下の設定を使用します:

spec:
feSpec:
requests:
cpu: 8
memory: 8Gi
limits:
cpu: 8
memory: 8Gi

デプロイしようとしているDorisDisaggregatedClusterリソースで上記の設定を更新してください。

Followerノード数の設定

Doris Frontend(FE)サービスには、FollowerとObserverという2つのタイプのロールがあります。Followerノードは、SQLパース、メタデータ管理、およびストレージを担当します。ObserverノードはおもにSQLパースを処理してFollowerからクエリおよび書き込みトラフィックの負荷を軽減します。Dorisはメタデータ管理にbdbjeストレージシステムを使用しており、Paxosプロトコルに類似したアルゴリズムを実装しています。

分散デプロイメントでは、分散環境内でメタデータ管理に参加するために複数のFollowerノードを設定する必要があります。

DorisDisaggregatedClusterリソースを使用してcompute-storage disaggregated Dorisクラスターをデプロイする場合、Followerノードのデフォルト数は1に設定されています。以下の設定を使用してFollowerの数を設定できます。以下の例では、3つのFollowerノードを設定しています:

spec:
feSpec:
electionNumber: 3
Note

disaggregated clusterがデプロイされると、electionNumber設定は変更できません。

カスタム起動設定

Doris OperatorはKubernetes ConfigMapを使用してFE起動設定をマウントします。設定するには以下の手順に従ってください:

  1. FE起動設定を含むカスタムConfigMapを作成する
    デフォルトのデプロイメントでは、各FEサービスはイメージに埋め込まれたデフォルト設定ファイルで起動します。カスタムConfigMapを作成することでこれを上書きできます。例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: fe-configmap
    namespace: default
    labels:
    app.kubernetes.io/component: fe
    data:
    fe.conf: |
    CUR_DATE=`date +%Y%m%d-%H%M%S`
    # Log dir
    LOG_DIR = ${DORIS_HOME}/log
    # For jdk 17, this JAVA_OPTS will be used as default JVM options
    JAVA_OPTS_FOR_JDK_17="-Djavax.security.auth.useSubjectCredsOnly=false -Xmx8192m -Xms8192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR -Xlog:gc*:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED"
    # INFO, WARN, ERROR, FATAL
    sys_log_level = INFO
    # NORMAL, BRIEF, ASYNC
    sys_log_mode = NORMAL
    # Default dirs to put jdbc drivers,default value is ${DORIS_HOME}/jdbc_drivers
    # jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers
    http_port = 8030
    rpc_port = 9020
    query_port = 9030
    edit_log_port = 9010
    enable_fqdn_mode=true
    deploy_mode = cloud
  2. ConfigMapをデプロイする
    次を実行して、DorisDisaggregatedClusterリソースが存在するnamespaceにカスタムConfigMapをデプロイします:

    kubectl apply -n ${namespace} -f ${feConfigMapName}.yaml

ここで、${namespace}DorisDisaggregatedClusterリソースの名前空間であり、${feConfigMapName}はConfigMapのファイル名です。

  1. ConfigMapを使用するようにDorisDisaggregatedClusterリソースを更新する
    DorisDisaggregatedClusterリソースで、以下に示すようにfeSpec.configMaps配列を使用してConfigMapをマウントします:

    spec:
    feSpec:
    replicas: 2
    configMaps:
    - name: fe-configmap

DorisDisaggregatedCluster リソースにおいて、configMaps フィールドは配列であり、各要素の name は現在のnamespace内のConfigMapの名前を表します。

ヒント
  1. Kubernetesデプロイメントでは、Doris Operatorが自動的にこの情報を追加するため、起動設定に meta_service_endpointcluster_id を含める必要はありません。
  2. 起動設定をカスタマイズする際は、enable_fqdn_mode をtrueに設定する必要があります。

アクセス設定

Doris OperatorはKubernetes Servicesを使用してVIPと負荷分散機能を提供し、ClusterIPNodePortLoadBalancer の3つの公開モードをサポートしています。

ClusterIPモード

Kubernetesはデフォルトで ClusterIP service type を使用します。このモードはKubernetesクラスター内の内部アドレスを提供します。

ステップ1: ClusterIPモードを設定する

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

ステップ2: Serviceアクセスアドレスを取得する

クラスターをデプロイした後、以下を実行してFE serviceを確認します:

kubectl -n doris get svc

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

NAME                              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 14m
doriscluster-sample-fe ClusterIP 10.1.118.16 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 14m

上記の出力では、"internal" サフィックスが付いたサービスは内部通信専用(例:ハートビート、データ交換)で使用され、外部には公開されません。"internal" サフィックスが付いていないサービスは、FEサービスへの外部アクセスに使用されます。

ステップ 3: コンテナ内からDorisにアクセスする

以下を実行して、現在のKubernetesクラスタ内にMySQLクライアントを含むPodを作成します:

kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never --namespace=doris -- /bin/bash

Pod内で、"internal"接尾辞のないService名を使用してDorisクラスターに接続します:

mysql -uroot -P9030 -hdoriscluster-sample-fe-service

NodePort Mode

KubernetesクラスターからDorisに外部からアクセスするには、NodePortサービスタイプを使用できます。NodePortモードは2つの設定方法をサポートしています:静的ホストポート割り当てと動的ホストポート割り当てです。

  • 動的ホストポート割り当て: 明示的なポートマッピングが提供されない場合、Kubernetesはpodが作成される際に未使用のホストポートを自動的に割り当てます(デフォルト範囲:30000–32767)。
  • 静的ホストポート割り当て: ポートマッピングが明示的に指定され、ホストポートが利用可能で競合がない場合、Kubernetesはそのポートを割り当てます。静的割り当ての場合、ポートマッピングを計画する必要があります。Dorisは外部とのやり取りのために以下のポートを提供します:
Port NameDefault PortDescription
Query Port9030MySQLプロトコル経由でDorisクラスターにアクセスするために使用されます。
HTTP Port8030FE上のHTTPサーバーポートで、FE情報を表示するために使用されます。

ステップ1:FE NodePortの設定

  • 動的割り当て設定:

    spec:
    feSpec:
    service:
    type: NodePort
  • 静的割り当て設定例:

    spec:
    feSpec:
    service:
    type: NodePort
    portMaps:
    - nodePort: 31001
    targetPort: 8030
    - nodePort: 31002
    targetPort: 9030

ステップ2: Serviceの取得

クラスターがデプロイされた後、以下のコマンドを実行してServiceを表示します:

kubectl get service

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

NAME                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                       AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d
doriscluster-sample-fe NodePort 10.152.183.58 <none> 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d

Step 3: NodePortを使用したDorisへのアクセス

例えば、DorisのQuery Portがホストポート31545にマッピングされている場合、まずKubernetesクラスター内の1つのノードのIPアドレスを取得するために以下を実行します:

kubectl get nodes -o wide

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

NAME   STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE          KERNEL-VERSION          CONTAINER-RUNTIME
r60 Ready control-plane 14d v1.28.2 192.168.88.60 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r61 Ready <none> 14d v1.28.2 192.168.88.61 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r62 Ready <none> 14d v1.28.2 192.168.88.62 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22
r63 Ready <none> 14d v1.28.2 192.168.88.63 <none> CentOS Stream 8 4.18.0-294.el8.x86_64 containerd://1.6.22

これらのノードIPのいずれか(例:192.168.88.62)を使用して、以下でDorisクラスターに接続します:

mysql -h 192.168.88.62 -P31545 -uroot

LoadBalancer Mode

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

Step 1: LoadBalancer Mode を設定する

feSpec.service のタイプを LoadBalancer に設定します。以下に示すとおりです:

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

Step 2: Serviceの取得

クラスターをデプロイした後、以下を実行してServiceを確認します:

kubectl get service

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

NAME                              TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                                                       AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 169d
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 2d
doriscluster-sample-fe LoadBalancer 10.152.183.58 ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d

Step 3: LoadBalancerを使用したDorisへのアクセス

例えば、DorisのQuery Portがポート9030でリッスンしている場合は、以下を使用して接続します:

mysql -h ac4828493dgrftb884g67wg4tb68gyut-1137856348.us-east-1.elb.amazonaws.com -P9030 -uroot

永続ストレージ

デフォルトのデプロイメントでは、FEサービスはメタデータストレージモードとしてKubernetes EmptyDirを使用します。EmptyDirは非永続的であるため、サービス再起動後にメタデータが失われます。再起動後にFEメタデータが保持されることを保証するには、永続ストレージを構成する必要があります。

ストレージテンプレートを使用した永続ストレージの自動生成

以下に示すように、ストレージテンプレートを使用してログとメタデータの永続ストレージを構成します:

spec:
feSpec:
persistentVolumes:
- persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi

上記の設定でデプロイすると、Doris Operatorは自動的にログディレクトリ(デフォルト /opt/apache-doris/fe/log)とメタデータディレクトリ(デフォルト /opt/apache-doris/fe/doris-meta)の永続ストレージをマウントします。ログまたはメタデータディレクトリがカスタム起動設定で明示的に指定されている場合、Doris Operatorはそれを解析し、それに応じて永続ストレージをマウントします。永続ストレージはStorageClass機構を使用して実装され、storageClassNameフィールドを介して必要なStorageClassを指定できます。

カスタムマウントポイント設定

Doris Operatorは、マウントポイント用のカスタマイズされたストレージ設定をサポートしています。次の例では、カスタム設定を使用してログディレクトリに300Giのストレージをマウントし、ストレージテンプレートを使用してメタデータディレクトリに200Giをマウントします:

spec:
feSpec:
persistentVolumes:
- mountPaths:
- /opt/apache-doris/fe/log
persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Gi
- persistentVolumeClaimSpec:
# storageClassName: ${storageclass_name}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
ヒント

mountPaths配列が空の場合、現在のストレージ設定がテンプレート設定を使用していることを示しています。

ログの永続化を無効にする

ログの永続化が不要で、ログを標準出力にのみ出力したい場合は、以下のように設定してください:

spec:
feSpec:
logNotStore: true