OKE를 사용하여 Cassandra 및 Spark 작업에 대한 데이터 위치 개선

소개

Apache Cassandra는 각 노드가 토큰 범위를 소유하는 분산된 마스터리스 데이터베이스입니다. Apache Spark는 Spark–Cassandra 커넥터를 사용하여 Cassandra 복제본에서 읽을 수 있는 분산형 컴퓨팅 엔진입니다. Kubernetes에서는 데이터가 어디에 보관되는지에 대한 지식 없이 Pod 일정이 잡혀 있으므로 데이터 지역성이 보장되지 않습니다.

이 사용지침서에서는 OKE가 Kubernetes 프리미티브를 사용하여 지역성을 향상시킬 수 있는 방법을 보여줍니다. StatefulSets(Cassandra의 안정적인 ID), 노드 레이블 및 유사성/반친화력(anti-affinity)을 통해 Cassandra 포드와 Spark 실행기를 함께 배치합니다. 따라서 동일한 노드(이상적인 노드)에서 읽기가 제공되거나, 최악의 경우 코로케이션된 복제본에서 읽기가 수행됩니다.

목표

필수 조건

  1. OCI 콘솔에서 스택을 열려면 아래를 누르십시오.

    Oracle Cloud에 배포

  2. 안내식 플로우를 따라 다음 작업을 수행합니다.

  1. 스택이 완료되면 출력 섹션에서 배스천의 IP를 가져옵니다.

    스택 출력

작업 2: 배스천에 접속하고 배치 확인

초기 인프라 프로비저닝은 약 15분 이내에 완료되지만 전체 설정(배스천의 cloud-init를 통해)은 Helm을 설치하고 Cassandra 및 Spark를 배포하며 읽기 작업을 실행하는 데 약 20분 더 걸립니다.

  1. 프로세스를 모니터하려면 배스천으로 SSH를 실행합니다.

    ssh -i <path-to-private-key> opc@<bastion_public_ip>

  2. 아래 명령을 실행하여 cloudinit 스크립트의 진행률을 모니터합니다.

    tail -f /var/log/oke-automation.log

  3. 3개의 시드 Cassandra 값을 읽고 Cloud-init complete 메시지가 표시되면 스택이 완료됩니다.

    Cloud-init 완료

: cloudinit 스크립트가 수행한 작업은 다음과 같습니다.

  1. 배스천 VM에서 기존 노드를 확인합니다.

    kubectl get nodes

  2. 지역 레이블을 확인합니다. spark-locality=truedata-locality=enabled인 두 노드가 필요합니다.

    kubectl get nodes --show-labels | grep -E 'spark-locality|data-locality'

  3. Cassandra 배치 확인:

    kubectl -n k8ssandra-operator get pods -l app.kubernetes.io/name=cassandra -o wide

  4. Spark 배치 확인:

    kubectl -n spark get pods -o wide

  5. Spark 읽기 작업 로그를 확인합니다. testks.users의 세 레코드와 성공적인 실행이 표시됩니다.

    kubectl -n spark logs job/spark-read-cassandra --tail=20

: Cassandra 및 Spark POD에서 NODE 값을 일치시키면 코로케이션과 지역성에 대한 이상적인 조건이 확인됩니다. 자세한 플로우 로그 결과를 보려면 cqlsh를 사용하여 testks.users에 추가 행을 삽입하십시오. 큰 데이터 세트는 더 많은 읽기 트래픽을 생성하므로 지역성 대 비지역성 효과를 관찰하기가 더 쉽습니다.

다음은 위의 명령에 대한 예제 출력입니다.

노드 검사

작업 3: VCN 흐름 로그로 네트워크 효과 관찰

VCN 플로우 로그를 사용하여 Spark 읽기 중 Cassandra 트래픽 플로우를 파악할 수 있습니다. 현재 자동화는 플로우 로그에서 볼 수 있는 항목에 영향을 주는 Flannel(VXLAN)을 사용합니다.

CNI의 변화

  1. 워커 서브넷에서 플로우 로그를 사용으로 설정합니다.

    OCI 콘솔에서 OKE 작업자 서브넷에 대한 플로우 로그를 사용으로 설정합니다. 트래픽을 생성하기 위해 Spark 읽기 작업을 다시 실행하거나 기다립니다.

  2. 질의 플로우 로그(클러스터와 일치하는 경로 선택)

이 자동화(Flannel/VXLAN)를 사용하는 경우: 다음과 유사한 고급 쿼리를 사용합니다.

   search "<your-flow-log-OCID>"
   | where data.protocolName = 'UDP'
   | where data.destinationPort = <vxlan-port>

을 실제 플로우 로그 리소스 OCID로 바꾸고 오버레이에 사용되는 포트로 바꿉니다(이 실습에서는 14789, 아래 그림 참조).

UDP 통신량

클러스터에서 NPN을 사용하는 경우:

참고: 플로우 로그는 새 항목을 수집하는 데 몇 분 정도 걸릴 수 있습니다.

주요 고려 사항

추가 리소스에 대한 링크를 제공합니다. 이 섹션은 선택 사항입니다. 필요하지 않은 경우 삭제합니다.

승인

추가 학습 자원

docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.