텐센트 클라우드 CVM에 마운트 되어있는 CBS에 주기적으로 생기는 특정파일을 COS 옮기기
- Tencent
- 2025. 3. 4. 16:36
요구사항
- 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로 설정된 경우 백업 도메인 이름을 전환하지 않습니다. |
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
이 글을 공유하기