< Lab >
Lab into : Online Data Migration to Cloud Spanner using Striim
실습: Striim을 사용하여 Cloud Spanner로 온라인 데이터 마이그레이션
- Google Cloud Marketplace를 통해 Striim을 배포
- Striim을 사용해 Cloud SQL에서 실행 중인 SQL 서버 데이터베이스를 읽고 초기 일괄 마이그레이션을 수행
- Striim을 사용해 기존 데이터베이스에서 새 데이터베이스로 전환할 준비가 될 때까지
Cloud SQL에서 Cloud Spanner로 지속적으로 복제
Performing an Online Database Migration
온라인 데이터베이스 마이그레이션 수행
- Google Cloud Shell 활성화
- 클라우드 셸을 열고 활성 계정 이름과 프로젝트 ID를 나열
gcloud auth list gcloud config list project
- 데이터베이스 마이그레이션 작업을 수행하기 위한 초기 구성
- 클라우드 셸에서 데이터베이스 및 컴퓨팅 리소스를 배포할 기본 컴퓨팅 영역을 설정
gcloud config set compute/zone us-central1-a export COMPUTE_ZONE=us-central1-a
- SQL Server 인스턴스에 쉽게 액세스할 수 있도록 SQL Server 클라이언트 설치
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt-get update sudo apt-get install mssql-tools unixodbc-dev echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc
- 콘솔에서 Compute Engine - VM 인스턴스를 클릭한 후 SQL Server 인스턴스 외부 IP 주소를 복사
+) 외부 IP 주소 : 104.197.106.99 - SQL Server 인스턴스의 IP 주소를 SQLSRVIP 변수에 할당
export SQLSRVIP=104.197.106.99
- Orders 테이블의 기존 데이터를 봄
테이블에는 현재 10개의 행이 존재
sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "select * from striimlab.dbo.ORDERS"
- 콘솔창에서 Spanner를 선택해 Spanner 인스턴스가 정의된 데이터베이스 및 테이블로 설정되었는지 확인
- 인스턴스 이름 striim-spanner-lab 을 클릭한
다음 데이터베이스 이름 striimlab을 클릭해 테이블 Orders이 있는지 확인
- 테이블 이름 Orders를 클릭한 후 데이터 탭을 클릭해 테이블이 비어있는 것을 확인
- 스키마 탭을 클릭해 테이블의 스키마 확인
- Striim 서버 설정
(Google Cloud Marketplace를 통해 프로비저닝된 Striim 서버의 인스턴스를 설정)
- 콘솔에서 Marketplace를 클릭한 후 Striim을 입력하여 시작을 클릭
- Google Cloud 프로젝트 목록이 표시되면 이름이 ' qwiklabs-gcp '인 프로젝트를 선택
- 영역을 us-central1-a 로 변경 후 GCP Marketplace 서비스 약관과 계약 옵션에 동의 후 배포 클릭
- Deployment Manager 페이지로 리디렉션되며 환경이 프로비저닝되면 배포 세부 정보가 표시
+) VM 이름 : striim-1-vm
+) 배포 영역 : us-central1-a - 클라우드 셸에서 INSTANCENAME을 인스턴스 이름으로, 자리 표시자 ZONENAME을 인스턴스 영역으로 바꿈
export STRIIMVM_NAME=striim-1-vm export STRIIMVM_ZONE=us-central1-a
- Deployment Manager 탭으로 돌아가서 사이트 방문을 클릭해 Striim 구성 마법사 열기
- 쿠키 사용에 대한 팝업이 표시되면 I Agree 를 클릭한 다음 Accept Striim EULA 및 Continue 를 클릭
- Striim 설치를 구성 후 저장하고 계속하기 클릭
- 라이선스 세부 정보 화면에서 라이선스 키 필드를 비워 두고 저장하고 계속하기 를 클릭
- 시작 을 클릭 한 다음 녹색 로그인 버튼을 클릭
- 사용자 admin 및 암호 striim-password 를 사용하여 로그인하면
Striim 관리 콘솔(아래 화면 참조)이 표시되고 이제 SQL Server 인스턴스에 연결할 준비 완료
- SQL Server에 대한 Striim 액세스 설정
- Striim 인스턴스의 Deployment Manager 페이지 에서 파란색 사이트 방문 버튼 옆에 있는 SSH 를 클릭
- SQL Server JDBC 드라이버를 다운로드
sudo wget https://storage.googleapis.com/cloud-training/dbmigration/mssql-jdbc-7.2.2.jre8.jar
- Java 아카이브 파일을 Striim 라이브러리 경로에 복사하고 실행 가능하게 하고 소유권과 그룹을 변경
sudo cp mssql-jdbc-7.2.2.jre8.jar /opt/striim/lib/mssql-jdbc-7.2.2.jre8.jar sudo chmod +x /opt/striim/lib/mssql-jdbc-7.2.2.jre8.jar sudo chown striim /opt/striim/lib/mssql-jdbc-7.2.2.jre8.jar sudo chgrp striim /opt/striim/lib/mssql-jdbc-7.2.2.jre8.jar
- 새 JDBC 드라이버를 인식하도록 Striim 서버를 다시 시작
sudo systemctl stop striim-node sudo systemctl stop striim-dbms sudo systemctl start striim-dbms sudo systemctl start striim-node
- Striim SSH 창을 닫음
- Striim 관리 콘솔의 브라우저 탭으로 돌아가서 탭을 새로 고친 다음
사용자 admin 및 암호 striim-password 를 사용하여 로그인
- Spanner 액세스 키 만들기
- 클라우드 셸에서 Striim이 Spanner에 연결할 서비스 계정 생성
gcloud iam service-accounts create striim-spanner --display-name striim-spanner export sa_striim_spanner=$(gcloud iam service-accounts list --filter="displayName:striim-spanner" --format='value(email)') export PROJECT=$(gcloud info --format='value(config.project)') gcloud projects add-iam-policy-binding $PROJECT --role roles/spanner.databaseUser --member serviceAccount:$sa_striim_spanner gcloud iam service-accounts keys create ~/striim-spanner-key.json --iam-account $sa_striim_spanner
- Striim 인스턴스의 Deployment Manager 페이지 에서 파란색 사이트 방문 버튼 옆에 있는 SSH 를 클릭
- Qwiklabs 학생 사용자 계정을 확인 후 결과 복사
+) 결과 : student-00-be168029a471 - 사용자 계정과 동일한 변수를 설정
export USERNAME=student-00-be168029a471
- 디렉토리를 만들고 해당 디렉토리의 소유권을 Qwiklabs 사용자로 변경
sudo mkdir /home/$USERNAME sudo chown $USERNAME /home/$USERNAME
- Striim SSH 창을 닫고 클라우드 셸로 돌아가 생성한 Spanner 키를 Striim VM으로 이동
gcloud compute scp ~/striim-spanner-key.json $STRIIMVM_NAME:~ --zone=$STRIIMVM_ZONE
- Striim VM의 JSON 파일을 /opt/striim 디렉터리로 이동
gcloud compute ssh --zone=$STRIIMVM_ZONE $STRIIMVM_NAME -- 'sudo cp ~/striim-spanner-key.json /opt/striim && sudo chown striim /opt/striim/striim-spanner-key.json'
- JSON 파일이 이제 Striim 서버에 있는지 확인
gcloud compute ssh --zone=$STRIIMVM_ZONE $STRIIMVM_NAME -- 'sudo ls -l /opt/striim/striim-spanner-key.json'
- 온라인 데이터베이스 마이그레이션 생성
- Striim 관리 콘솔로 이동 하여 페이지 중간에 있는 앱 버튼을 클릭
- 페이지 오른쪽 상단에 있는 앱 추가 버튼을 클릭 후 Start From Scratch 클릭 후 Name을 Batch로 설정
- Flow Designer 페이지가 로드되고
스트리밍 데이터 응용 프로그램을 만드는 데 필요한 모든 기본 커넥터는 왼쪽 메뉴 모음에 있음
일회성 대량 초기 데이터 로드를 수행하려면 데이터베이스 판독기를 사용
- 빠른 테스트를 수행하여 구성 설정이 올바르고 Striim이 SQL Server 인스턴스에 성공적으로 연결할 수 있는지 확인하기 위해
Created 버튼 옆의 드롭다운 화살표에서 앱 배포를 선택하고 기본 옵션을 선택해 배포
- Database Reader 구성 요소 아래에 있는 물결 모양 버튼을 클릭한 다음 옆에 있는 눈 아이콘을 클릭하여
Striim 파이프라인을 통해 흐르는 데이터를 미리 봄 - 상단 메뉴 공간으로 돌아가서 Deployed 을 클릭한 다음 Start App 을 클릭
Striim 애플리케이션이 실행되고 파이프라인을 통해 흐르는 데이터가 표시 확인
- 소스 데이터베이스에 성공적으로 연결하고 데이터를 읽을 수 있는지 테스트했으므로 앱 중지 후 앱 배포 취소 클릭
(Spanner에 연결할 준비가 된 것) - DatabaseReader 아래의 웨이브 버튼을 클릭 후 더하기 버튼을 클릭하고 다음 대상 구성 요소 연결 을 선택
- 개체의 이름 을 batch_target 으로 지정하고 어댑터 필드에서 Spanner 를 검색 후 SpannerWriter 선택 후 연결 속성을 입력
- 디자이너 페이지 중간에 Created 를 클릭 한 다음 드롭다운에서 앱 배포 를 클릭 후 기본 옵션을 선택 하고 배포 후 앱 시작
- 실행 중 상태가 나타나면 콘솔에서 Spanner 를 클릭
인스턴스 이름 striim-spanner-lab 을 클릭한 다음 데이터베이스 이름 striimlab 을 클릭 - 쿼리를 클릭 후 쿼리 실행해 Striim 환경과 파이프라인을 성공적으로 설정 확인
SELECT * from orders
- Striim 응용 프로그램으로 돌아간 후 실행 을 클릭한 다음 앱 중지 선택 그리고 중지됨 을 클릭 한 다음 앱 배포 취소 선택
- Spanner 데이터 파이프라인에 대한 연속 SQL Server 만들기
(초기 일회성 대량 로드가 있으면 연속 복제 파이프라인을 설정 가능)
- Striim에서 앱 추가 버튼을 클릭하여 새 앱 생성 클릭 후 Start from Scratch을 선택해 생성
- MSSQL CDC 소스를 선택한 후 연결 속성을 입력
- cdc_source 아래의 웨이브 버튼을 클릭한 후 더하기 버튼을 클릭하고 다음 대상 구성 요소 연결 을 선택하여 연결 속성 입력
- Created 버튼을 클릭한 다음 기본 옵션으로 앱 배포, 앱 시작 클릭
- 클라우드 셸에서 Orders 테이블에 데이터 행 하나 추가
sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "INSERT INTO ORDERS (ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID) VALUES (1011, '1568928576017', 'In-Store', 1011, 9, 13879.56, 320, 88252)"
- 콘솔에서 Spanner 를 클릭 후 인스턴스 이름 striim-spanner-lab 을 클릭한 다음 데이터베이스 이름 striimlab 을 클릭
- 쿼리를 클릭 후 쿼리 실행
SELECT * from orders order by order_id desc
- 클라우드 셸로 돌아가서 다음 명령을 연속적으로 실행하여 Orders 테이블에 4개의 데이터 행을 더 추가
sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "INSERT INTO ORDERS (ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID) VALUES (1012, '1568928636017', 'CompanyA', 1012, 1, 19729.99, 76, 95203)" sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "INSERT INTO ORDERS (ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID) VALUES (1013, '1568928696017', 'In-Store', 1013, 5, 7286.68, 164, 45162)" sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "INSERT INTO ORDERS (ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID) VALUES (1014, '1568928756017', 'Online', 1014, 1, 87268.61, 909, 70407)" sqlcmd -S $SQLSRVIP,1433 -U striim -P striim-password -d striimlab -Q "INSERT INTO ORDERS (ORDER_ID, ORDER_DATE, ORDER_MODE, CUSTOMER_ID, ORDER_STATUS, ORDER_TOTAL, SALES_REP_ID, PROMOTION_ID) VALUES (1015, '1568928816017', 'CompanyB', 1015, 1, 69744.13, 424, 79401)"
- 콘솔의 Spanner 탭으로 돌아가 이전 쿼리를 반복하여 추가 행이 데이터베이스에 추가되었는지 확인
SELECT * from orders order by order_id desc