콘텐츠로 이동

Alibaba Cloud DTS 증분 데이터 마이그레이션 모범 사례 (Function)


전제 조건

Datakit 설치

  1. [통합] 모듈, [Datakit]를 클릭하고, 운영 체제 및 시스템 유형에 따라 적절한 설치 명령을 선택합니다.

image.png

  1. Datakit 설치 명령을 복사하여 모니터링 대상 서버에서 직접 실행합니다.
  2. 설치 디렉터리 /usr/local/datakit/
  3. 로그 디렉터리 /var/log/datakit/
  4. 기본 구성 파일 /usr/local/datakit/conf.d/datakit.conf
  5. 플러그인 구성 디렉터리 /usr/local/datakit/conf.d/

Function 설치

  1. [통합] 모듈, [Function]을 클릭하고, 설치 패키지를 다운로드한 후 설치 명령을 실행합니다.

image.png

  1. 설치가 완료되면 브라우저를 사용하여 http://서버IP주소:8088에 접속하여 초기화 작업 화면을 진행합니다.

image.png

  1. 기본 사용자 이름/비밀번호 admin으로 시스템에 로그인합니다.

image.png

RAM 액세스 제어

  1. RAM 콘솔 https://ram.console.aliyun.com/users에 로그인합니다.

  2. 사용자 생성: 인사 관리 - 사용자 - 사용자 생성

image.png

  1. AccessKey ID 및 AccessKey Secret의 CSV 파일을 저장하거나 다운로드합니다. (구성 파일에서 사용됨)

  2. 사용자 권한 부여 (데이터 전송 서비스(DTS)에 대한 읽기 전용 액세스 권한)

image.png

스크립트 개발

Alibaba Cloud DTS 증분 데이터 마이그레이션

  1. Alibaba Cloud DTS 제품 문서 - 신규 API - DTS 작업 세부 정보 조회에 접속하여 디버그 모드로 진입합니다.

  2. SDK 종속성 정보 - 신규 SDK를 찾아 SDK 설치 명령을 복사합니다.

image.png

  1. 관리 - 실험적 기능 - PIP 도구 모듈 활성화

image.png

  1. Alibaba Cloud SDK 종속 패키지 설치

image.png

  1. 새 스크립트 세트를 만들고 스크립트를 추가합니다.

image.png

  1. 코드를 작성합니다. AccessKey ID, AccessKey Secret, Region을 입력해야 합니다.

참고 문서:

# -*- coding: utf-8 -*-

import sys
import json
from typing import List

from alibabacloud_dts20200101.client import Client as Dts20200101Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dts20200101 import models as dts_20200101_models

# 阿里云 sdk
class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> Dts20200101Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID,
            access_key_id=access_key_id,
            # 您的AccessKey Secret,
            access_key_secret=access_key_secret
        )
        # 访问的域名
        config.endpoint = 'dts.cn-hangzhou.aliyuncs.com'
        return Dts20200101Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client('accessKeyId', 'accessKeySecret')
        describe_dts_jobs_request = dts_20200101_models.DescribeDtsJobsRequest(region='cn-hangzhou')
        client.describe_dts_jobs(describe_dts_jobs_request)

@DFF.API('dts_demo', timeout=300)
def dts_demo():
    # 实例化sample
    sample = Sample()
    client = sample.create_client(
        access_key_id="AccessKey ID",
        access_key_secret="AccessKey Secret"
    )
    describe_dts_jobs_request = dts_20200101_models.DescribeDtsJobsRequest(
    # DTS实例的任务类型。MIGRATION;SYNC;SUBSCRIBE。
            region='region',job_type='MIGRATION'
        )
    response = client.describe_dts_jobs(describe_dts_jobs_request).to_map()
    dtsjoblist = response['body']['DtsJobList'][0]
    dts_instanceid = dtsjoblist['DtsInstanceID']
    dts_jobname = dtsjoblist['DtsJobName']
    # 增量数据迁移或同步的状态指标
    datasynchronization = response['body']['DtsJobList'][0]['DataSynchronizationStatus']
    dts_status = datasynchronization['Status']
    dts_percent = datasynchronization['Percent']

    # 行协议数据
    points = [
        {'measurement': 'aliyun_api_dts',
         'tags': {'instanceId': dts_instanceid,'jobname': dts_jobname}, 
         'fields': {'dts_status': dts_status,'dts_percent':dts_percent}
        }
    ]
    write_metrics(points)

def write_metrics(points: list):
    datakit = DFF.SRC('datakit')
    res = datakit.write_metric_many(points)
  1. 메인 함수 앞에 데코레이터를 추가합니다. (함수를 HTTP API 인터페이스로 내보내기)
@DFF.API('이름', timeout=300)
  1. 스크립트를 게시합니다.

image.png

  1. 예약된 작업을 추가합니다. (데이터 수집 빈도) - 관리 - 자동 트리거 구성 - 예약 시간 선택

image.png

  1. 추가가 완료되면 모든 예약된 작업을 확인할 수 있습니다.

image.png

  1. 데이터 메트릭 확인 - DataFlux - [메트릭]

image.png

  1. [이상 탐지 라이브러리] - DTS 마이그레이션 이상 규칙 추가

image.png

  1. Alibaba Cloud DTS 증분 데이터 마이그레이션 실패 시 이상 이벤트 트리거

image.png

문서 평가

이 페이지가 도움이 되었나요?