텐센트 클라우드 CVM에 마운트 되어있는 CBS에 주기적으로 생기는 특정파일을 COS 옮기기

요구사항

  • DB 슬레이브 인스턴스에서 주기적으로 생성되는 DB 백업 파일을 Tencent Cloud COS로 자동 전송하여, 백업 데이터를 안전하게 보관하고 운영 부담을 줄일 수 있도록 환경을 구축
  • 라이브에 영향을 주는 장비는 아니였지만 cosfs로 cos를 마운트하고 파일을 이동했을 때 시스템 디스크에 캐시 할당을 하여 위험을 줄 수 있을 것 같아 cli로 업로드하는 방법을 선택

구현 목표

  • DB 백업 파일의 COS 자동 업로드: 백업 파일이 특정 디렉터리에 저장될 때, 이를 감지하여 COS로 업로드하는 자동화 프로세스 설계
  • 업로드 후 무결성 검증: COS로 전송된 파일의 무결성을 확인하여 데이터 유실 방지
  • 스토리지 최적화: 업로드 완료 후 일정 기간이 지난 백업 파일을 CVM에서 자동 삭제하여 CBS 공간 절약
  • 장기 보관 및 비용 절감 고려: COS의 라이프사이클 정책을 활용하여, 일정 기간 이후에는 저비용 스토리지(IA 또는 Archive)로 이동하는 정책 설정

환경

  • CVM [ Ubuntu Server 22.04 LTS 64bit ]
  • API 키 발급

1. COS CLI 툴 설치

wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64

2. COSCLI 파일의 이름을 변경

mv coscli-linux-amd64 coscli

3. 파일 실행 권한 변경

chmod 755 coscli

4. 설치 성공 확인

./coscli --version

5. coscli config 수정 - 주요 매개변수[색 표시] 수정 진행

nano /root/.cos.yaml
구성 항목 설명
Secret ID 키 ID, 서브 계정 키를 사용하고 최소 권한 안내에 따라 인가하여 사용 리스크를 줄이는 것이 좋습니다. 서브 계정 키 획득은 서브 계정 접근 키 관리를 참고하시기 바랍니다.
Secret Key 키 Key, 서브 계정 키를 사용하고 최소 권한 안내에 따라 인가하여 사용 리스크를 줄이는 것이 좋습니다. 서브 계정 키 획득은 서브 계정 접근 키 관리를 참고하시기 바랍니다.
Session Token 임시 키 token, 임시 키를 사용할 때 구성이 필요하며, 사용하지 않으면 직접 Enter를 클릭하여 건너뛸 수 있습니다. 임시 키에 관한 더 많은 정보는 임시 키를 사용하여 COS에 접근하기를 참고하시기 바랍니다.
Mode 아이덴티티 모드를 설정하고, 열거값 SecretKey 및 CvmRole을 지원합니다. 공백일 수 있고, 공백 값은 기본적으로 SecretKey이며, 키를 사용하여 COS를 요청함을 의미합니다. Mode가 CvmRole인 경우 인스턴스 역할 관리를 사용하여 COS를 요청함을 의미합니다.
Cvm Role Name CVM 역할 인스턴스 이름을 설정하려면 인스턴스 역할 관리를 참고하시기 바랍니다.
protocol 네트워크 전송 프로토콜은 기본적으로 https입니다. http로 변경하시려면 직접 구성 파일에 들어가서 수정할 수 있다.
APPID APPID는 Tencent Cloud 계정을 성공적으로 신청한 후 획득되는 계정으로서 시스템에 의해 자동으로 할당되며, 계정 정보에서 획득할 수 있다. 버킷의 전칭은 Bucket Name 및 APPID의 2개 요소로 구성되고 포맷은 <BucketName-APPID>이며, 자세한 내용은 버킷 명명 규범을 참고하시기 바랍니다.
Bucket Name 버킷 이름과 APPID가 함께 버킷 전칭을 구성하고 포맷은 <BucketName-APPID>이며, 자세한 내용은 버킷 명명 규범을 참고하시기 바랍니다.
Bucket Endpoint 버킷 소재 리전의 도메인 이름은 기본 도메인 이름 포맷이 cos.<region>.myqcloud.com이며, 여기서 <region>는 버킷 리전을 나타내며, 예를 들어 ap-guangzhou, ap-beijing 등이며, COS가 지원되는 리전 리스트는 리전과 접근 도메인을 참고하시기 바랍니다.버킷이 글로벌 가속을 활성화한 경우 글로벌 가속 도메인 이름을 구성할 수 있습니다. 예를 들어, 글로벌 가속 도메인 이름을 cos.accelerate.myqcloud.com로 구성하고, 전용망 글로벌 가속 도메인 이름은 cos-internal.accelerate.tencentcos.cn로 구성합니다.
Bucket Alias 버킷 별칭, 구성 후 사용할 때 BucketAlias로 BucketName-APPID를 대체하여 입력해야 할 명령어 길이를 줄일 수 있으며, 이 항목을 구성하지 않는 경우 BucketAlias의 값은 BucketName-APPID의 값이다.
OFS Bucket 메타데이터 가속 버킷 태그, 해당 버킷의 메타데이터 가속 기능이 활성화되었는지 여부를 식별하기 위해 사용된다.
Auto Switch Host 백업 도메인 이름 자동 전환을 끌지 여부를 설정합니다. 옵션값 true | false는 비워둘 수 있습니다.설정하지 않거나 값이 false인 경우 백업 도메인 이름이 전환됩니다.true로 설정된 경우 백업 도메인 이름을 전환하지 않습니다.

coscli config yaml

7. 스크립트 개발

#!/bin/bash
# 원본 디렉토리 및 COS 대상 버킷 설정

# 원본 백업 디렉토리
SOURCE_DIR=""
# COS 업로드 대상 경로
TARGET_COS_BUCKET=""

# 현재 호스트명과 하루 전 날짜 (YYYYMMDD)
HOST_NAME=$(hostname)
DATE=$(date -d '-1 day' '+%Y%m%d')

# 원본 백업 디렉토리
LOCAL_BACKUP_DIR="$SOURCE_DIR/$DATE"


REMOTE_TARGET_DIR="$TARGET_COS_BUCKET/$HOST_NAME/$DATE"

# 원본 백업 디렉토리 존재 여부 확인
if [ ! -d "$LOCAL_BACKUP_DIR" ]; then
    exit 1
fi

# COS에 백업 디렉토리 업로드 (재귀적 옵션 사용)
coscli cp --recursive "$LOCAL_BACKUP_DIR" "$REMOTE_TARGET_DIR"
if [ $? -ne 0 ]; then
    exit 1
fi

# 업로드 성공 시 원본 백업 디렉토리 삭제
rm -rf "$LOCAL_BACKUP_DIR"
if [ $? -ne 0 ]; then
    exit 1
fi

exit 0

스크립트 설명

  • 변수 초기화
    • SOURCE_DIR와 TARGET_COS_BUCKET 변수에 각각 원본 백업 파일이 저장된 디렉토리와 COS 업로드 대상 버킷 경로를 설정합니다.
    • 실제 운영 시에는 이 두 변수에 적절한 경로 값을 입력해야 합니다.
  • 현재 호스트명과 날짜 계산
    • HOST_NAME=$(hostname): 현재 서버의 호스트명을 가져옵니다.
    • DATE=$(date -d '-1 day' '+%Y%m%d'): 하루 전 날짜를 YYYYMMDD 형식으로 생성합니다.
    • 이 값들은 파일 경로 구성에 사용됩니다.
  • 경로 구성
    • LOCAL_BACKUP_DIR="$SOURCE_DIR/$DATE": 원본 백업 파일이 저장된 디렉토리 경로를 구성합니다.
    • REMOTE_TARGET_DIR="$TARGET_COS_BUCKET/$HOST_NAME/$DATE": COS 내에 백업 파일을 업로드할 대상 경로를 생성합니다.
    • 이렇게 호스트명과 날짜를 포함함으로써 여러 서버 및 날짜별 백업 파일을 구분할 수 있습니다.
  • 백업 디렉토리 존재 여부 확인
    • [ ! -d "$LOCAL_BACKUP_DIR" ] 조건문을 사용하여 로컬 백업 디렉토리가 존재하지 않으면 스크립트를 종료합니다.
  • COS로 백업 파일 업로드
    • coscli cp --recursive "$LOCAL_BACKUP_DIR" "$REMOTE_TARGET_DIR": coscli 명령어를 사용해 로컬 디렉토리 전체(하위 디렉토리 포함)를 COS의 지정된 경로로 업로드합니다.
    • 업로드 후 명령어의 종료 상태를 확인하여 문제가 있을 경우 스크립트를 종료합니다.
  • 업로드 성공 시 로컬 백업 삭제
    • 업로드가 성공하면 rm -rf "$LOCAL_BACKUP_DIR" 명령어를 통해 로컬에 있던 백업 디렉토리를 삭제합니다.
    • 삭제 작업도 종료 상태를 확인하여 문제가 있으면 스크립트를 종료합니다.
  • 최종 종료 코드
    • 모든 작업이 정상적으로 수행되면 exit 0으로 스크립트를 종료합니다.

8. Crontab 등록

crontab -e #크론탭 편집

# 분 시 일 월 요일 명령어
00 00 * * * /path/to/script.sh #매일 정각 스크립트 동작 - 시스템 타임 기준.

crontab -l #정상적용 확인

 

9. COS LifeCycle Setting

Task 실행 관련 정보

  • Task start time (작업 시작 시간):
    • 설정한 규칙은 매일 베이징 시간(GMT+8) 기준 00:00에 실행됩니다.
  • Task completion time (작업 완료 시간):
    • 작업은 비동기적으로 실행되며, 업로드된 객체에 대한 규칙 적용은 일반적으로 다음 날 24:00까지 완료됩니다.
  • "here"를 클릭하면 추가적인 설명을 확인할 수 있습니다.

규칙 설정 옵션

  • Status (상태)
    • Enable (활성화) 또는 Disable (비활성화)를 선택할 수 있습니다.
  • Rule name (규칙 이름)
    • 필수 입력 항목 (*표시)으로, 사용자가 규칙의 이름을 입력해야 합니다.
  • Applied to (적용 범위)
    • "Specified Range (지정된 범위)" 또는 "The whole bucket (전체 버킷)" 중 선택 가능
    • "Specified Range" 선택 시, 특정 범위(예: 특정 Prefix 또는 Object Tag)에 규칙을 적용할 수 있습니다.
    • Prefix 또는 Object Tag를 선택하는 부분이 있지만 현재는 비활성화 상태입니다

  • Managing the current version (현재 버전 관리)
    • Enable (활성화) 또는 Disable (비활성화) 선택 가능
    • 현재 "Enable"이 선택되어 있음.
    • 파일 수정 날짜 기준으로 특정 기간이 지나면 다른 스토리지 클래스로 전환되거나 삭제되도록 설정 가능.
    선택할 수 있는 옵션
    • N일 후 STANDARD_IA로 전환
    • N일 후 ARCHIVE로 전환
    • N일 후 삭제
    • STANDARD_IA (Infrequent Access) → 접근 빈도가 낮은 데이터를 위한 저비용 스토리지
    • ARCHIVE → 장기 보관용 저비용 스토리지 (복구 시간이 김)
    • 삭제 → 360일 이후 데이터를 자동 삭제
  • Managing historical versions (이전 버전 관리)
    • Enable (활성화) / Disable (비활성화)
    만약 객체 버전 관리가 활성화된 경우, 이전 버전 객체를 따로 관리할 수 있도록 설정 가능.
  • Remove Delete Markers from objects with no concurrent versions (삭제 마커 정리)
    • Enable (활성화) / Disable (비활성화)
    "삭제 마커"란 버전 관리를 사용하는 경우, 객체가 삭제될 때 생성되는 마커입니다.
  • 이 옵션을 활성화하면, 동시 버전이 없는 객체의 삭제 마커를 자동으로 제거하여 스토리지 비용을 절약할 수 있습니다.
  • Deleting incomplete multipart uploads (미완료된 멀티파트 업로드 삭제)
    • 체크 박스를 선택하면 설정 가능
    • 30일 후 자동 삭제 설정 가능 (현재는 비활성화됨)
    멀티파트 업로드란 대용량 파일을 여러 부분으로 나누어 업로드하는 방식입니다.
  • 업로드가 완료되지 않은 경우 불필요한 스토리지 비용이 발생할 수 있어, 일정 기간 후 자동 삭제하도록 설정 가능.

참고 자료

https://www.tencentcloud.com/ko/document/product/436/43256

https://www.tencentcloud.com/ko/document/product/436/43249

https://www.tencentcloud.com/ko/document/product/436/43265

https://hamwoo-log.tistory.com/2


 

이 글을 공유하기

댓글

Designed by JB FACTORY