AKS 및 GKE에서 실행되는 분산 SQL의 Hasura GraphQL 원격 연결

Remote Joins Hasura GraphQL에서 크로스 테이블 연결 데이터의 개념을 확장하여 크로스 테이블과 원격 데이터 원본으로 데이터를 연결할 수 있다.본고에서 우리는 다음과 같은 설정을 설정하여 이 기능을 보여 줄 것이다.
  • GKE에서 실행되는 3 노드 YugabyteDB 클러스터, Hasura GraphQL 엔진
  • 연결
  • AKS에서 실행되는 3 노드 YugabyteDB 클러스터, Hasura GraphQL 엔진 연결
  • 원격 아키텍처 및 원격 관계 구성
  • GraphQL 쿼리를 실행하여 두 개의 서로 다른 클라우드에 위탁 관리되는 두 개의 서로 다른 데이터베이스에 있는 데이터를 하나의 결과 집합에 연결할 수 있음

  • 분산 SQL 또는 YugabyteDB의 초보자?계속 읽어 주세요.

    분산 SQL이란 무엇입니까?


    분포식 SQL 데이터베이스는 데이터 인프라를 클라우드나 클라우드 네이티브 환경으로 이동하려는 조직에서 점점 유행하고 있다.이는 일반적으로 Oracle, MySQL 및 SQL Server와 같은 단일 관계형 데이터베이스에서 TCO를 절감하거나 확장을 제한하려는 의도에서 비롯됩니다.분산 SQL의 기본 특징은 다음과 같습니다.
  • 데이터를 조회하고 모델링하는 데 사용되는 SQL API는 기본 키, 외부 키, 인덱스, 저장 프로세스, 트리거 등 전통적인 RDBMS 기능을 지원합니다.
  • 자동 분포식 조회가 실행되기 때문에 단일 노드가 병목이 되지 않는다.
  • 분산 SQL 데이터베이스는 자동 분산 데이터 저장소를 지원해야 합니다.이것은 하나의 노드가 고성능과 고가용성을 확보하는 병목이 되지 않도록 집단의 여러 노드에 자동으로 분포해야 하는 인덱스를 포함한다.
  • 분산 SQL 시스템은 또한 고도의 일치된 복제와 분산 ACID 사무를 제공해야 한다.
    분산 SQL에 대한 자세한 내용은 "분산 SQL이란?"을 참조하십시오.
  • Yugabyte DB가 뭐예요?


    YugabyteDB는 오픈소스, 고성능의 분포식 SQL 데이터베이스로 구글 스패너의 계발을 바탕으로 확장과 용량 오류 설계를 구축한다.YugabyteDB는 PostgreSQL wire와 호환되며 저장 프로세스, 트리거, UDF 등 고급 RDBMS 기능을 지원합니다.
    네, 계속 보여주세요.

    1단계: GKE에 YugabyteDB 설치


    다음은 install a 3 node YugabyteDB cluster on Google Kubernetes Engine 의 전체 절차입니다.GKE에서 YugabyteDB 클러스터를 실행한 후 다음 명령을 실행하여 클러스터의 상태를 확인합니다.
    $ kubectl get services --namespace yb-demo 
    
    NAME                 EXTERNAL-IP      PORT(S) 
    yb-tserver-service   35.224.XX.XX     5433:3067/TCP
    
    참고yb-tserver-service의 외부 IP는 YugabyteDB와 Hasura GraphQL 엔진 간에 연결됩니다.위의 출력에서 알 수 있듯이 IP는35.224.XX.XX, YSQL 포트는5433이다.

    단계 2: Northwind 샘플 데이터베이스 만들기


    저희 문서에서 YugabyteDB와 호환되는 여러 가지sample databases를 찾을 수 있습니다.이 강좌에서 우리는 Northwind 예시 데이터베이스를 사용할 것이다.Northwind 데이터베이스에는'Northwind Traders'라는 허구의 회사의 판매 데이터가 포함되어 있으며, 이 회사는 세계 각지에서 특색 있는 식품을 수입하고 수출한다.Northwind 데이터베이스는 중소기업ERP의 우수한 강좌 모델로 고객, 주문, 재고, 구매, 공급업체, 출하, 직원과 단일 항목 회계를 포함한다.
    다음 명령을 실행하여 에 연결합니다yb-tserver-pod.
    $ kubectl exec -n yb-demo -it yb-tserver-0 /bin/bash
    
    스키마 및 데이터 파일을 다운로드하려면 다음 명령을 실행합니다.
    $ wget https://raw.githubusercontent.com/yugabyte/yugabyte-db/master/sample/northwind_ddl.sql
    
    $ wget https://raw.githubusercontent.com/yugabyte/yugabyte-db/master/sample/northwind_data.sql
    
    YSQL 서비스에 연결하려면 Pod 케이스를 종료하고 다음 명령을 실행합니다.
    $ exit 
    $ kubectl exec -n yb-demo -it yb-tserver-0 -- ysqlsh -h yb-tserver-0.yb-tservers.yb-demo
    
    데이터베이스를 만들고 다음 명령을 사용하여 데이터베이스에 연결합니다.
    yugabyte=# CREATE DATABASE northwind; 
    northwind=# \c northwind;
    
    이제 데이터베이스 객체를 만들고 다운로드된 파일을 사용하여 다음 명령을 사용하여 데이터를 로드할 수 있습니다.
    northwind=# \i 'northwind_ddl.sql'; 
    northwind=# \i 'northwind_data.sql';
    
    기본적으로 YugabyteDB 설치에는 기본 암호 설정이 없습니다yb-tserver-pod.하나를 지정하는 방법은 PostgreSQL에 있는 방식과 같습니다.
    northwind=# ALTER ROLE yugabyte WITH PASSWORD 'password';
    

    3단계: GKE에서 YugabyteDB를 사용하도록 Hasura 설정


    우리는 지금 GKE에 Hasura GraphQL 엔진을 설치하려고 한다.다음 명령을 실행하여 YSQL 셸을 종료하고 Hasura-Kubernetes 배치 및 서비스 파일을 가져옵니다.
    $ wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/kubernetes/deployment.yaml
    
    $ wget https://raw.githubusercontent.com/hasura/graphql-engine/master/install-manifests/kubernetes/svc.yaml
    
    배포에서 데이터베이스 URL을 수정합니다.yaml 파일에는 YugabyteDB의 IP가 포함되어 있습니다.이 강좌에서는 다음과 같이 수정해야 합니다.
    value: postgres://yugabyte:[email protected]:5433/northwind
    
    참고 모든 컨텐트가 yugabyte user 네임스페이스에서 실행되도록 하려면 yb-demodeployment.yaml 파일의 네임스페이스 값을 수정해야 합니다.이것은 내가 이 시범을 위해 선택한 설정이다.
    파일을 저장한 후 svc.yaml 명령을 사용하여 Hasura 배포를 만듭니다.
    $ kubectl create -f deployment.yaml 
    deployment.apps/hasura created
    
    $ kubectl create -f svc.yaml 
    service/hasura created
    
    외부 IP를 찾아 Hasura 콘솔을 열려면 다음 명령을 수행합니다.
    $ kubectl get services --namespace yb-demo 
    
    NAME      EXTERNAL-IP      PORT(S) 
    hasura    35.192.XX.XX     80:30546/TCP
    
    현재kubectl를 사용하여 Hasura 콘솔에 액세스합니다.이 예에서는 http://<EXTERNAL-IP>/console 입니다.지금 Hasura 콘솔을 보셔야 합니다.

    4단계: Hasura에서 북풍 물체 추적


    상단 탐색에서 데이터를 클릭하고 테이블, 보기, 키 관계의 모든 추적을 클릭합니다.브라우저 새로 고침 상단 탐색에서 GraphQL을 클릭하면 왼쪽 브라우저 트리35.192.XX.XX 테이블이 표시됩니다.

    5단계: AKS에 YugabyteDB 설치


    다음은 install a 3 node YugabyteDB cluster on Azure Kubernetes Service 의 전체 절차입니다.AKS에서 YugabyteDB 클러스터를 실행한 후 다음 명령을 실행하여 클러스터의 상태를 확인합니다.
    $ kubectl get services --namespace yb-demo 
    NAME                   EXTERNAL-IP     PORT(S) 
    yb-tserver-service     20.190.XX.XX    5433:3067/TCP
    
    참고northwind의 외부 IP는 YugabyteDB와 Hasura GraphQL 엔진 간에 연결됩니다.위의 출력에서 알 수 있듯이 IP는yb-tserver-service, YSQL 포트는20.190.XX.XX이다.

    단계 6: 프로모션 데이터베이스 설치


    이 단계에서, 우리는promotions라는 데이터베이스와 promotions라는 테이블을 만들 것입니다.그리고 우리는 판촉 유형, 협찬 회사와 판촉 지속 시간에 관한 데이터를 불러올 것이다.
    YSQL 셸 로그인:
    $ kubectl exec -n yb-demo -it yb-tserver-0 -- ysqlsh -h yb-tserver-0.yb-tservers.yb-demo
    
    데이터베이스를 만들고 다음 명령을 사용하여 데이터베이스에 연결합니다.
    yugabyte=# CREATE DATABASE promotions;
    yugabyte=# \c promotions;
    
    기본적으로 YugabyteDB 설치에는 기본5433 사용자의 암호 설정이 없습니다.하나를 지정하는 방법은 PostgreSQL에 있는 방식과 같습니다.
    promotions=# ALTER ROLE yugabyte WITH PASSWORD 'password';
    
    판촉 데이터베이스에서 다음 표를 만듭니다.
    CREATE TABLE promotions ( 
          promotion_id serial PRIMARY KEY, 
          supplier_id int2 NOT NULL, 
          promotion_name VARCHAR ( 50 ) NOT NULL, 
          company_name VARCHAR ( 40 ) NOT NULL, 
          start_date DATE NOT NULL, 
          stop_date DATE NOT NULL, 
          created_on DATE NOT NULL DEFAULT CURRENT_DATE );
    
    다음 데이터로 판촉표를 채웁니다.
    INSERT INTO promotions 
         (supplier_id, promotion_name, company_name, start_date, stop_date, created_on) 
    VALUES 
         ('28','Buy One Get One Free', 'Gai pâturage', '1996-08-15', '1996-08-30', CURRENT_DATE), 
         ('19', 'Free Shipping', 'New England Seafood Cannery', '1996-10-15', '1996-10-30', CURRENT_DATE), 
         ('16', 'Free T-Shirt With Every Purchase', 'Bigfoot Breweries', '1996-12-15', '1996-12-30', CURRENT_DATE), 
         ('20','10% Off', 'Gula Malacca', '1996-11-15', '1996-11-30', CURRENT_DATE), 
         ('8', '20% Off', 'Specialty Biscuits, Ltd.', '1996-09-15', '1996-09-30', CURRENT_DATE);
    

    단계 7: YugabyteDB를 사용하도록 AKS에 Hasura 설정


    우리는 지금 Azure Kubernetes 서비스에 Hasura GraphQL 엔진을 설치할 준비를 하고 있다.다행히도 Hasura는 AKS에서 시작하고 실행하기 쉬우며, 간단한 마법사로 우리의 YugabyteDB 집단을 가리킨다.이 “one-click deployment” 를 사용하여 세부 정보를 설정합니다.기존 데이터베이스에 연결하는 옵션을 선택하면 다음과 같은 내용을 볼 수 있습니다.

    YugabyteDB 클러스터의 외부 IP 및 포트를 지정하고 있습니다.이 경우 yugabyte20.189.XX.XX.우리는 또한 설정에서 지정한 5433 사용자와 yugabyte 데이터베이스를 설정합니다.
    AKS에 Hasura를 성공적으로 배포한 후 콘솔의 외부 IP를 찾습니다.제 예에서 저는 Azure 포털의'모든 서비스'>'자원 그룹'>'자원 그룹'>'하수라 판촉 용기 그룹'에서 보았는데 promotions 저에게 분배된 하수라 GraphQL 엔진의 공공 IP입니다.이 정보가 있으면 Hasura 컨트롤러를 열고 추적52.137.XX.XX표를 열 수 있을 것입니다.완성되면 브라우저에서 다음과 같은 표를 볼 수 있을 것입니다.

    8단계: 원격 구조 및 원격 관계 설정


    GKE에서 실행되는 Hasura 콘솔에서 Remote Schemas 탭으로 이동하여 Add를 클릭하고 AKS에서 실행되는 Hasura 서버에 필요한 정보를 제공합니다.

    다음은 promotionspromotions표와 supplier_id표 사이에 원격 관계를 추가합니다. 우리는 원격suppliers에서 이를 이용할 수 있습니다.네비게이션 promotions 을 통해 관계를 지정할 수 있습니다.

    단계 9: 두 데이터베이스에 걸쳐 원격 연결


    현재 우리는 JOIN 데이터베이스에 원격 모드를 설정하고 Data > suppliers > Relationships > Remote Schema Relationships에 원격 관계를 설정했다.우리는 현재 두 개의 서로 다른 YugabyteDB 데이터베이스에 있는 데이터를 처리하기 위해 조회를 보낼 수 있다. 이 데이터베이스들은 두 개의 서로 다른 클라우드에 위탁되어 있다.이 프레젠테이션에서 우리는 원격 연결 GraphQL 조회를 보내기를 희망합니다. 이 조회는 "주요"북풍 데이터베이스에 있는 공급업체가 "원격"판촉 데이터베이스에 판촉을 안배했는지 확인할 수 있도록 합니다.
    예를 들어 아래 조회에서 공급업체 "16"이 어떤 판촉을 진행하고 있는지, 만약 그렇다면 판촉의 명칭이 무엇인지, 판촉 활동의 날짜가 무엇인지 알고 싶습니다.

    GraphQL 질의는 다음 결과를 반환해야 합니다.

    GraphQL 질의를 분해하면 다음과 같은 상황이 발생합니다.
    GKE에서 실행되는 YugabyteDB 클러스터의 promotions 테이블에서 다음을 반환합니다.
  • 공급업체 id="16"
  • company_name='발맥주 공장'
  • 연락처
  • 전화 = "(503) 555-9931"
  • 그리고 우리는 supplier_id에서 관계가 있는 원격 모드 suppliers 를 이용하여 promotions_remote 표에서 다음 데이터를 되돌릴 수 있습니다. 이 표는 AKS에서 실행되는 YugabyteDB 집단에 있습니다.
  • promotionuname="매번 무료 티셔츠 구매"
  • 시작 날짜 = "1996-12-15"
  • stop_date=“1996-12-30”
  • 결론


    그렇습니다. 만약 당신이 이 블로그의 모든 설명을 따랐다면, 당신은 현재 다음과 같은 내용을 설정했습니다.
  • GKE에서 실행되는 3 노드 YugabyteDB 클러스터, Hasura GraphQL 엔진 연결
  • 3 노드 YugabyteDB 클러스터가 AKS에서 실행되고 Hasura GraphQL 엔진
  • 이 연결됨
  • 원격 아키텍처 및 원격 관계 구성
    GraphQL 쿼리를 통해 서로 다른 두 데이터베이스의 데이터를 단일 결과 세트에 연결할 수 있음
  • 좋은 웹페이지 즐겨찾기