メインコンテンツまでスキップ
に最終更新

04 Doris クラスターへのアクセス

Kubernetes は Service を使用して VIP と負荷分散の機能を提供します。Service には、外部への公開方法として ClusterIP、NodePort、LoadBalancer の三つのモードがあります。

ClusterIP モード​

Kubernetes 上の Doris は、デフォルトで ClusterIP アクセスモードを使用します。ClusterIP アクセスモードでは Kubernetes クラスター内に内部アドレスが提供され、Kubernetes 内でのサービスのアドレスとして機能します。

初回デプロイ後は、次のように root ユーザーを使用し、パスワードなしで MySQL プロトコル経由で Doris にアクセスできます。

ステップ 1:Service を確認する​

クラスターをデプロイした後、次のコマンドを実行して Doris Operator が公開する Service を確認します。

kubectl -n doris get svc

結果は次のとおりです。

NAME                              TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                               AGE
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 9m
doriscluster-sample-be-service ClusterIP 10.1.68.128 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 9m
doriscluster-sample-fe-internal ClusterIP None <none> 9030/TCP 14m
doriscluster-sample-fe-service ClusterIP 10.1.118.16 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 14m

上記の結果では、FE と BE にそれぞれ internal と service の接尾辞が付いた二種類の Service があります。

  • 接尾辞が internal の Service は、ハートビートやデータ交換など Doris 内部の通信専用であり、外部には公開されません。

  • 接尾辞が service の Service は、クラスターのサービスへのアクセスに使用します。

ステップ 2:Doris にアクセスする​

ClusterIP モードは Kubernetes 内でのみ使用できます。次のコマンドを実行して、現在の Kubernetes クラスター内に MySQL クライアントを含む Pod を作成します。

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

コンテナー内では、接尾辞が service の Service 名を指定して Doris クラスターに接続できます。

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

NodePort モード​

DorisCluster のアクセス設定で NodePort アクセスモードを設定した後、次の手順に従い、root ユーザーを使用してパスワードなしで MySQL プロトコル経由で FE にアクセスします。

ステップ 1: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-service NodePort 10.152.183.58 <none> 8030:31041/TCP,9020:30783/TCP,9030:31545/TCP,9010:31610/TCP 2d
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d
doriscluster-sample-be-service NodePort 10.152.183.244 <none> 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d

ステップ 2:Doris にアクセスする​

MySQL 接続を例に説明します。Doris のデフォルトの Query Port は 9030 です。上記の例では、ポート 9030 がローカルポート 31545 にマッピングされています。Doris クラスターにアクセスするには、クラスター内のノードの IP アドレスを取得する必要があります。次のコマンドを実行して確認します。

kubectl get nodes -owide

結果は次のとおりです。

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

NodePort モードでは、任意のノードの IP アドレスとマッピングされたホストポートを使用して、Kubernetes クラスター内のサービスにアクセスできます。この例で使用できるノードの IP アドレスには、192.168.88.61、192.168.88.62、192.168.88.63 があります。次の例では、ノード 192.168.88.62 と query port からマッピングされたホストポート 31545 を使用して Doris に接続します。

mysql -h 192.168.88.62 -P 31545 -uroot

LoadBalancer モード​

パブリッククラウドで DorisCluster のアクセス設定により LoadBalancer アクセスモードを設定した後、次の手順に従い、root ユーザーを使用してパスワードなしで MySQL プロトコル経由で FE にアクセスします。

ステップ 1:Service を確認する​

クラスターをデプロイした後、次のコマンドを実行し、Service の中から Doris へのアクセスに使用できるものを確認します。

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-service 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
doriscluster-sample-be-internal ClusterIP None <none> 9050/TCP 2d
doriscluster-sample-be-service LoadBalancer 10.152.183.244 ac4828493dgrftb884g67wg4tb68gyut-1137823345.us-east-1.elb.amazonaws.com 9060:30940/TCP,8040:32713/TCP,9050:30621/TCP,8060:30926/TCP 2d

ステップ 2:Doris にアクセスする​

MySQL 接続を例に説明します。

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

Kubernetes 上にデプロイした Doris に StreamLoad でアクセスする​

Doris は StreamLoad モードによるデータのインポートをサポートしています。クライアントと Doris クラスターが同じ LAN 内にある場合、クライアントは FE のアドレスをリクエスト先として直接使用できます。FE の Service はリクエストを受け取ると、アクセス可能な BE アドレスとともに HTTP 301 ステータスコードを返し、その BE アドレスにデータのインポートリクエストを送るようクライアントに指示します。Kubernetes 上にデプロイした Doris クラスターは、Kubernetes 内からのみアクセスできるアドレスを使って通信します。StreamLoad でアクセス可能な FE アドレスを設定しても、FE が 301 の仕組みで返す BE アドレスは Kubernetes 内からしかアクセスできないため、Kubernetes 外のクライアントからのデータインポートは失敗します。

Kubernetes 外のクライアントが StreamLoad を使用して、Kubernetes 上にデプロイした Doris クラスターへデータをインポートする場合は、外部からアクセスできる BE アドレスを StreamLoad のインポート先アドレスとして設定する必要があります。

BE の Service を外部からアクセスできるように設定する​

BE の Service を、NodePort または LoadBalancer の設定に従って Kubernetes クラスター外からアクセスできるようにします。その後、Doris クラスターをデプロイする DorisCluster リソースを更新します。

BE のプロキシアドレスを設定する​

NodePort モードまたは LoadBalancer モードで説明したアクセスアドレスの取得方法に従い、Kubernetes 外からアクセスできるアドレスと、web_server サービスに対応するポートを取得します。取得したアドレスとポートを、StreamLoad によるデータインポートで使用するリクエスト先アドレスとして設定します。