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
disaggregated clusterがデプロイされると、electionNumber設定は変更できません。
カスタム起動設定
Doris OperatorはKubernetes ConfigMapを使用してFE起動設定をマウントします。設定するには以下の手順に従ってください:
-
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 -
ConfigMapをデプロイする
次を実行して、DorisDisaggregatedClusterリソースが存在するnamespaceにカスタムConfigMapをデプロイします:kubectl apply -n ${namespace} -f ${feConfigMapName}.yaml
ここで、${namespace}はDorisDisaggregatedClusterリソースの名前空間であり、${feConfigMapName}はConfigMapのファイル名です。
-
ConfigMapを使用するように
DorisDisaggregatedClusterリソースを更新する
DorisDisaggregatedClusterリソースで、以下に示すようにfeSpec.configMaps配列を使用してConfigMapをマウントします:spec:
feSpec:
replicas: 2
configMaps:
- name: fe-configmap
DorisDisaggregatedCluster リソースにおいて、configMaps フィールドは配列であり、各要素の name は現在のnamespace内のConfigMapの名前を表します。
- Kubernetesデプロイメントでは、Doris Operatorが自動的にこの情報を追加するため、起動設定に
meta_service_endpointやcluster_idを含める必要はありません。 - 起動設定をカスタマイズする際は、
enable_fqdn_modeをtrueに設定する必要があります。
アクセス設定
Doris OperatorはKubernetes Servicesを使用してVIPと負荷分散機能を提供し、ClusterIP、NodePort、LoadBalancer の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 Name | Default Port | Description |
|---|---|---|
| Query Port | 9030 | MySQLプロトコル経由でDorisクラスターにアクセスするために使用されます。 |
| HTTP Port | 8030 | FE上の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