GlusterFS 스토리지를 사용하여 Compute Engine에 IBM Db2 Warehouse 배포

이 가이드에서는 GlusterFS 파일 시스템을 저장소 레이어로 사용하여 Compute Engine에 IBM Db2 Warehouse 클러스터를 만드는 방법을 보여줍니다. GlusterFS는 확장 가능한 오픈소스 네트워크 파일 시스템입니다.

이 가이드는 Google Cloud에 IBM Db2 Warehouse 클러스터를 배포하려는 sysadmin, 개발자, 엔지니어 또는 데이터베이스 관리자에게 유용합니다.

Google Cloud에서의 IBM Db2 Warehouse 및 배포 옵션에 대한 간략한 설명은 시리즈 개요를 참조하세요.

이 가이드에서 사용하는 소프트웨어는 다음과 같습니다.

  • Ubuntu-서버 16.04
  • Docker Community Edition
  • IBM Db2 Warehouse Enterprise Edition(무료 체험판)
  • IBM Db2 Warehouse Client
  • GlusterFS 파일 시스템

목표

  • Docker Store에서 IBM Db2 Warehouse Docker 이미지에 액세스합니다.
  • 이 아키텍처에 필요한 권한만 있는 커스텀 서비스 계정을 프로비저닝합니다.
  • 클러스터 VM을 실행합니다.
  • GlusterFS 파일 시스템을 구성합니다.
  • Docker Store 인증을 초기화합니다.
  • IBM Db2 Warehouse 컨테이너를 클러스터에 배포합니다
  • IBM Db2 Warehouse를 실행합니다.
  • IBM Db2 Warehouse에 샘플 데이터를 업로드합니다.
  • IBM Db2 관리 콘솔에 연결하고 배포를 테스트합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Compute Engine API 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  7. Compute Engine API 사용 설정

    API 사용 설정

  8. Docker ID가 없으면 Docker Store에서 Docker ID를 만듭니다.

이 가이드에서는 IBM Db2 Warehouse Enterprise Edition을 사용합니다. 이 소프트웨어에 대한 라이선스가 없다면 무료 체험판을 이 가이드에 사용해도 됩니다.

이 튜토리얼을 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

아키텍처

이 가이드에서는 서로 다른 세 가지 영역에 Compute Engine 인스턴스 세 개를 배포합니다.

  • db2wh-1이라는 인스턴스를 처음에 헤드 노드로 지정합니다.
  • db2wh-2db2wh-3이라는 인스턴스를 처음에 데이터 노드로 지정합니다.

헤드 노드가 장애 조치되면 개별 인스턴스 역할(헤드 또는 데이터 노드)이 바뀔 수 있습니다.

또한 노드 세 개에 GlusterFS 공유 파일 시스템을 배포합니다. GlusterFS는 IBM Db2 Warehouse 클러스터의 공유 파일 시스템으로 사용됩니다.

아래 다이어그램은 해당 아키텍처를 보여줍니다.

아키텍처

IBM Db2 Warehouse Edition Docker 이미지에 액세스

이 가이드에서는 Docker Store 계정을 사용하여 Docker Store에서 IBM Db2 Warehouse Edition 무료 체험판을 다운로드할 수 있습니다. 이를 위해 개별 이미지 두 개(서버와 클라이언트)를 다운로드합니다.

  1. 브라우저에서 IBM Db2 Warehouse EE Docker 이미지로 이동합니다.
  2. Docker 사용자 이름과 비밀번호를 사용하여 로그인합니다.
  3. 체크아웃으로 이동을 클릭합니다.
  4. 세부정보를 입력합니다.
  5. 약관에 동의하면 오른쪽에 있는 동의함 ...동의 ... 체크박스를 선택합니다.
  6. 콘텐츠 가져오기를 클릭합니다.

    그러면 설정 페이지로 이동합니다. 가이드의 뒷부분에서 해당 단계를 수행할 것이므로, 안내를 따를 필요가 없습니다.

  7. IBM Db2 Warehouse Client 이미지에 대해 위 과정을 반복합니다.

환경 준비

이 가이드의 대부분 단계는 Cloud Shell에서 수행됩니다. 또한 Cloud Shell을 열 때 이 가이드와 관련된 GitHub 저장소를 자동으로 복제할 수 있습니다.

  • Cloud Shell을 열고 이 가이드를 위한 GitHub 저장소를 복제합니다.

    Cloud Shell 열기

Compute Engine 인스턴스 관리를 위한 서비스 계정 프로비저닝

이 가이드에서는 Compute Engine 인스턴스를 관리할 서비스 계정을 만듭니다. 애플리케이션을 실행하는 데 필요한 역할과 액세스 권한으로 서비스 계정을 제한하는 것이 가장 좋습니다.

이 가이드에서 서비스 계정에 필요한 역할은 Compute 뷰어 역할(roles/compute.viewer)뿐입니다. 이 역할은 Compute Engine 리소스에 대한 읽기 전용 액세스 권한을 제공합니다.

  1. Cloud Shell에서 db2wh-sa라는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create db2wh-sa --display-name=db2wh-sa
    
  2. 전체 서비스 계정 이메일 주소를 저장하는 환경 변수를 만듭니다.

    export GCE_SERVICE_ACCOUNT_EMAIL="db2wh-sa@$(gcloud config get-value project 2> /dev/null).iam.gserviceaccount.com"
    
  3. compute.viewer를 서비스 계정에 결합합니다.

    gcloud projects add-iam-policy-binding $(gcloud config get-value project 2> /dev/null) \
        --member serviceAccount:$GCE_SERVICE_ACCOUNT_EMAIL \
        --role roles/compute.viewer
    

방화벽 규칙 만들기

내부 클러스터 통신을 허용하는 방화벽 규칙을 만들어 관리 콘솔에서 클러스터에 액세스합니다. 또한 내부 GlusterFS 통신을 허용하는 규칙을 구성합니다.

자세한 내용은 다음을 참조하세요.

  1. Cloud Shell에서 노드 간 통신에 필요한 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create db2wh-internal \
        --description="db2wh" \
        --action=ALLOW \
        --rules=tcp:50000-50001,tcp:60000-60060,tcp:25000-25999,tcp:50022,tcp:9929,tcp:9300,tcp:8998,tcp:5000,tcp:2379-2380,tcp:389 \
        --source-tags=db2wh \
        --target-tags=db2wh
    
  2. 관리 콘솔에 대한 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create db2wh-admin \
        --description="db2wh admin console" \
        --action=ALLOW \
        --rules=tcp:8443 \
        --source-ranges=0.0.0.0/0
    
  3. GlusterFS에 대한 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create db2wh-glusterfs \
        --description="db2wh glusterfs" \
        --action=ALLOW \
        --rules=tcp:22,tcp:111,tcp:139,tcp:24007,tcp:24009-24108,tcp:49152-49251 \
        --source-tags=db2wh \
        --target-tags=db2wh
    

Compute Engine 환경 초기화

이 섹션에서는 GlusterFS 볼륨용 영구 디스크를 만들고, Compute Engine 인스턴스를 실행하고, 권한을 부여하고, 환경 초기화를 마칩니다.

GlusterFS용 영구 디스크 만들기

이 가이드에서는 GlusterFS 파일 시스템을 호스팅할 추가 영구 디스크를 만듭니다.

  1. Cloud Shell에서 db2wh-1-glusterfs라는 디스크를 만듭니다.

    gcloud compute disks create db2wh-1-glusterfs \
        --size=1024 \
        --zone=us-central1-c
    
  2. db2wh-2-glusterfs라는 2번째 디스크를 만듭니다.

    gcloud compute disks create db2wh-2-glusterfs \
        --size=1024 \
        --zone=us-central1-b
    
  3. db2wh-3-glusterfs라는 3번째 디스크를 만듭니다.

    gcloud compute disks create db2wh-3-glusterfs \
        --size=1024 \
        --zone=us-central1-f
    

Compute Engine 인스턴스 실행

GitHub 저장소에서 시작 스크립트를 사용하여 클러스터 노드에 대해 Compute Engine 인스턴스 세 개를 만듭니다. (고가용성 지원을 위해 이러한 인스턴스는 서로 다른 영역에 위치합니다.) 여기에는 내부 IP 주소를 각 인스턴스에 매핑하는 것이 포함됩니다.

  1. Cloud Shell에서 db2wh-1이라는 인스턴스를 만듭니다.

    gcloud compute instances create db2wh-1 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-c \
        --private-network-ip=10.128.0.100 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-1-glusterfs
    
  2. db2wh-2 인스턴스를 만듭니다.

    gcloud compute instances create db2wh-2 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-b \
        --private-network-ip=10.128.0.101 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-2-glusterfs
    
  3. db2wh-3 인스턴스를 만듭니다.

    gcloud compute instances create db2wh-3 \
        --image-family=ubuntu-1604-lts \
        --image-project=ubuntu-os-cloud \
        --tags=db2wh --boot-disk-size=50GB \
        --machine-type=n1-standard-16 \
        --zone=us-central1-f \
        --private-network-ip=10.128.0.102 \
        --metadata=storagetype=gluster \
        --metadata-from-file startup-script=solutions-db2wh/gce-db2wh-startup.sh \
        --service-account=$GCE_SERVICE_ACCOUNT_EMAIL \
        --disk=device-name=sdb,name=db2wh-3-glusterfs
    

Compute Engine 인스턴스에서 Docker Store에 로그인

이제 Docker Store와 통신할 수 있도록 클러스터의 세 구성원 각각에게 사용자 인증 정보를 제공합니다.

  1. Cloud Shell에서 db2wh-1의 Docker Store에 로그인합니다.

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker login" \
        -- -t
    
  2. db2wh-2의 Docker Store에 로그인합니다.

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command="sudo docker login" \
        -- -t
    
  3. db2wh-3의 Docker Store에 로그인합니다.

    gcloud compute ssh db2wh-3 \
        --zone=us-central1-f \
        --command="sudo docker login" \
        -- -t
    

노드 파일 만들기

이제 IBM Db2 Warehouse가 클러스터의 노드를 검색하는 데 사용하는 nodes 파일을 만듭니다. 각 행은 노드의 초기 유형, DNS 이름, IP 주소를 지정합니다.

  • Cloud Shell에서 SSH를 통해 dbw2h-1 인스턴스에 연결하여 노드 파일을 만듭니다.

    gcloud compute ssh db2wh-1 --zone=us-central1-c \
        --command='sudo bash -c "cat <<EOF >  /mnt/clusterfs/nodes
    head_node=db2wh-1:10.128.0.100
    data_node=db2wh-2:10.128.0.101
    data_node=db2wh-3:10.128.0.102
    EOF"'
    

IBM Db2 Warehouse 컨테이너 실행

이제 세 가지 인스턴스에서 IBM Db2 Warehouse 컨테이너를 시작합니다.

  1. Cloud Shell에서 db2wh-1의 Docker 컨테이너를 시작합니다.

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  2. db2wh-2의 Docker 컨테이너를 시작합니다.

    gcloud compute ssh db2wh-2 \
        --zone=us-central1-b \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  3. db2wh-3의 Docker 컨테이너를 시작합니다.

    gcloud compute ssh db2wh-3 \
        --zone=us-central1-f \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 store/ibmcorp/db2wh_ee:v2.12.0-db2wh-linux'
    
  4. 시작이 완료되었는지 확인합니다.

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh status --check-startup' \
        -- -t
    

    이 작업에는 40~60분이 소요될 수 있으며, 그동안 일부 오류가 감지될 수 있습니다. 이 가이드에서는 이러한 오류를 무시해도 됩니다.

    출력에서 running successfully 상태를 확인하면 구성이 완료된 것입니다.

    HA Management up and running successfully!
    Successfully started IBM Db2 Warehouse service stack!
    
  5. SSH를 사용하여 db2wh-1에 연결하고 관리자 비밀번호를 재설정합니다.

    DB2_ADMIN_PASSWORD=$(openssl rand -hex 8)
    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command="sudo docker exec db2wh setpass ${DB2_ADMIN_PASSWORD}" \
        -- -t
    

배포 테스트

서버 컨테이너 구성을 완료했으므로, 이제 서버 컨테이너를 테스트할 수 있습니다.

IBM Db2 Warehouse Client 컨테이너 배포

이제 IBM Db2 Warehouse에 데이터를 업로드하기 위해 클라이언트 컨테이너에 배포할 수 있습니다.

  1. Cloud Shell에서 샘플 데이터를 클라이언트 컨테이너를 실행할 Compute Engine 인스턴스에 복사합니다.

    gcloud compute scp solutions-db2wh/sample-data/nyc-wifi-locs.csv db2wh-1:/tmp \
        --zone=us-central1-c
    
  2. 샘플 테이블 스키마를 Compute Engine 인스턴스에 복사합니다.

    gcloud compute scp solutions-db2wh/sample-data/sample-table.sql db2wh-1:/tmp \
        --zone=us-central1-c
    
  3. db2wh-1의 Docker 컨테이너를 시작합니다.

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker run -d -it \
        --privileged=true \
        --net=host \
        --name=db2wh-client -v /tmp/nyc-wifi-locs.csv:/nyc-wifi-locs.csv -v /tmp/sample-table.sql:/sample-table.sql store/ibmcorp/db2wh_ce:v3.0.1-db2wh_client-linux'
    

샘플 데이터 업로드

배포를 테스트하는 데 도움이 되도록 샘플 데이터를 IBM Db2 Warehouse 서버에 업로드합니다.

  1. Cloud Shell에서 이전에 만든 비밀번호를 표시합니다.

    echo $DB2_ADMIN_PASSWORD
    
  2. IBM Db2 Warehouse Client 컨테이너에서 셸 창을 엽니다.

    gcloud compute ssh db2wh-1 \
        --zone=us-central1-c \
        --command='sudo docker exec -it db2wh-client cli' \
        -- -t
    
  3. 비밀번호를 저장할 환경 변수를 만듭니다. 여기서 [PASSWORD]는 이전 단계에서 가져온 비밀번호입니다.

    DB_PASSWORD=[PASSWORD]
    
  4. 데이터베이스 별칭을 저장할 환경 변수를 만듭니다.

    DB_ALIAS=BLUDB
    

    BLUDB는 IBM Db2 Warehouse의 기본 데이터베이스 이름입니다.

  5. 데이터베이스 호스트 이름을 저장할 환경 변수를 만듭니다.

    DB_HOST=db2wh-1
    
  6. 데이터베이스 카탈로그를 설정합니다.

    db_catalog --add $DB_HOST --alias $DB_ALIAS
    
  7. IBM Db2 Warehouse 서버에서 샘플 데이터를 보관할 테이블을 만듭니다.

    dbsql -f /sample-table.sql -d $DB_ALIAS -h $DB_HOST -u bluadmin -W $DB_PASSWORD
    
  8. IBM Db2 Warehouse 서버에 데이터를 업로드합니다.

    dbload -verbose -host $DB_HOST -u bluadmin -pw $DB_PASSWORD -db $DB_ALIAS -schema BLUADMIN -t NYC_FREE_PUBLIC_WIFI -df /nyc-wifi-locs.csv -delim ',' -quotedValue DOUBLE -timeStyle 12HOUR -skipRows 1
    
  9. IBM Db2 Warehouse Client 셸을 닫습니다.

    exit
    

관리 콘솔을 사용하여 데이터 유효성 검사

이제 IBM Db2 Warehouse 관리 콘솔에 연결하여 업로드한 데이터를 확인할 수 있습니다.

  1. Cloud Shell에서 서비스의 외부 IP 주소를 확인합니다.

    gcloud compute instances describe db2wh-1 \
        --zone=us-central1-c \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)'
    
  2. 브라우저를 열고 다음 URL로 이동합니다. 여기서 [EXTERNAL_IP]는 이전 단계의 IP 주소입니다.

    https://[EXTERNAL_IP]:8443
    

    보안 경고는 무시해도 됩니다.

  3. 다음 사용자 인증 정보로 로그인합니다.

    • 사용자 이름: bluadmin
    • 비밀번호: (이전 절차에서 만든 비밀번호)
  4. IBM Db2 Warehouse EULA에 동의하면 동의를 클릭합니다.

  5. 왼쪽에서 메뉴를 연 후 관리자 > 테이블을 선택합니다.

    테이블 폴더를 보여주는 IBM Db2 Warehouse 관리 UI

  6. 빠르게 둘러보기 팝업을 닫습니다.

  7. NYC_FREE_PUBLIC_WIFI를 클릭합니다.

    사용 가능한 Wi-Fi 핫스팟 목록

  8. 데이터 배포 탭을 클릭하고 테이블이 채워져 있는지 확인합니다.

    테이블 목록의 데이터 배포 탭

    행이 총 2,871개 표시되며, 이는 전체 데이터세트입니다.

  9. SQL 생성을 클릭합니다.

  10. SELECT 문을 선택합니다.

  11. 확인을 클릭합니다.

    SQL 생성 탭이 열리고 자동으로 생성된 SELECT 문으로 미리 채워집니다.

  12. LIMIT 절을 자동으로 생성된 SELECT 문에 추가하여 결과를 처음 5개 레코드로 제한합니다.

    SELECT "THE_GEOM", "OBJECTID", "BORO", "TYPE", "PROVIDER", "NAME", "LOCATION",
           "LAT", "LON", "X", "Y", "LOCATION_T", "REMARKS", "CITY", "SSID",
           "SOURCEID", "ACTIVATED", "BOROCODE", "BORONAME", "NTACODE", "NTANAME",
           "COUNDIST", "POSTCODE", "BOROCD", "CT2010", "BOROCT2010", "BIN", "BBL", "DOITT_ID"
      FROM "BLUADMIN"."NYC_FREE_PUBLIC_WIFI"
      LIMIT 5;
    
  13. 실행을 클릭한 후 모두 실행을 선택합니다.

    결과 세트 탭에 레코드 목록이 표시됩니다. 이는 샘플 데이터가 성공적으로 업로드되었음을 나타냅니다.

    업로드된 데이터에서 레코드 5개를 보여주는 SQL 문 실행 결과

정리

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계