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
StreamLoad를 사용하여 Kubernetes에 배포된 Doris에 접속
Doris는 StreamLoad 모드를 사용한 데이터 적재를 지원합니다. 클라이언트와 Doris 클러스터가 동일한 LAN에 있으면 클라이언트는 FE 주소를 요청 주소로 직접 사용할 수 있습니다. FE 서비스는 요청을 수신하고 접근 가능한 BE 주소와 함께 HTTP 301 상태 코드를 반환하여, 클라이언트가 해당 BE 주소로 데이터 적재 요청을 보내도록 알립니다. Kubernetes에 배포된 Doris 클러스터는 Kubernetes 내부에서만 접근할 수 있는 주소를 통해 통신합니다. StreamLoad에 FE의 접근 가능한 주소를 설정하면 FE가 301 메커니즘을 통해 반환하는 BE 주소는 Kubernetes 내부에서만 접근할 수 있으므로, Kubernetes 외부 클라이언트의 데이터 적재가 실패합니다.
Kubernetes 외부의 클라이언트가 StreamLoad를 사용하여 Kubernetes에 배포된 Doris 클러스터에 데이터를 적재하려면, 외부에서 접근할 수 있는 BE 주소를 StreamLoad 적재 주소로 설정해야 합니다.
외부에서 접근할 수 있도록 BE Service 설정
BE Service를 Kubernetes 클러스터 외부에서 접근할 수 있도록 NodePort 또는 LoadBalancer에 따라 설정합니다. 그런 다음 Doris 클러스터를 배포하는 DorisCluster 리소스를 업데이트합니다.
BE 프록시 주소 설정
NodePort 모드 또는 LoadBalancer 모드에서 설명하는 접속 주소 확인 방법에 따라 Kubernetes 외부에서 접근할 수 있는 주소와 web_server 서비스의 해당 포트를 확인합니다. 확인한 주소와 포트를 StreamLoad가 데이터를 적재할 때 사용하는 요청 주소로 설정합니다.