[AWS] DR TrainingDay

Reliability & DR Immersion Day

WWPS AWS date : 2022.12.15.

개요

DevOps = 개발자, 운영 혼자서는 안된다. 같이 하자.

HA = 지속적인 운영(A-A) DR = 백업에 대한 복구(A-S)

DR은 기술 부패의 관점에서 접근하여야 할까?

Well-Architected 프레임워크

  • Sustainability 추가!
  • Performance effeiciency
  • security
  • reliability
  • cost optimisation
  • operational excellence

Module 1 : AWS의 재해복구

이론

  • 장애는 언제나 발생할 수 있다
  • 이제는 동네북 카카오. HA:데이터 센터 3중화 DR:멀티 클라우드 + 원격지 DR
  • 그래서HA만하면 되지 왜 DR?

애플리케이션상의 수평적 확장 : LB이용

로드밸런서

RDS 관리형 데이터베이스

  • Aurora의 A-s
  • 기본적으로 마스터-리드 리플리카로 구성
  • 마스터가 무너지면 리플리카가 마스터로 프로모션
  • A-S지만 S가 쉬고 있는게 아니라 평소에 리드 리플리카로 구성 가능
  • 기본적으로 3개의 리젼에 6카피 뜸
  • 짧은 복제 지연시간 : 1초 이내 복제
  • 빠른 복구 : 1분 이내 read-write승격 가능.

DynamoDB 글로벌테이블

  • 기본적으로 모든 리전이 Read-Write

EKS - 컨테이너 기반 아키텍쳐

  • 기본적으로 AZ 3개를 물고 들어감

WarmStandby - 데이터 싱크된 인스턴스를 복제함. Pilot - 스냅만 뜸.

  • 웜스탠바이
  • 수분내의 RTO/RPO
  • 핵심 비즈니스 서비스
  • 재해 복구 리전에서 축소된 용량으로 서비스
  • 핫스탠바이(리전)
  • RPO/RTO 0

실습 : backup and restore

  • 구성 : 미동부에 프라이머리, 미서부에 세컨더리

    • 서비스. ec2, s3, rds로 구성
  • 백업 도구

    • ec2, rds : aws backup 사용
    • s3 : cross-region replication
  • 순서

    • 복제 후 살리기
  • Cross Region Copy(CR)을 이용해서 복제

  • Snapshot을 다른 리젼으로 카피

  • 카피된 스냅을 올려 서비스 복구

S3 복제

  • s3내의 소스 버킷에서 타겟 버킷 설정하여 복제 가능

ec2, rds

  • 스냅을 뜨고 다른 리전에 올림
  • source region에서 스냅 뜸
  • 스냅을 target으로 복사
  • region을 타겟으로 변경
  • 타겟에서 스냅을 복원

-> 이 시점에서 메인과 둘다 서비스가 올라옴

failover

  • 소스 쪽 프론트 서비스를 중단함 -> s3의 퍼블릭 접근을 막고, static site service 확인해보면 메인 쪽이 털렸으므로 primay를 통해 접근됨

Module 2 Amazon Aurora global Database: Use cases

이론

실습

  1. ami 떠서 dr로 던짐
  2. 메인 s3 죽임
  3. dr의 rds를 read/write로 프로모션
  • Manual unplanned failover (“detach and promote”) => standby를 클러스터에서 때낸다는 것은 자기가 마스터가 된다는 것
  1. 복제한 ami에서 ec2 올리기
  • rds의 엔드포인트가 변했으므로 ec2를 올릴 때 db endpoint를 수정할 수 있는 데이터 입력
    • userdata : ec2러닝시 초기화 스크립트. DB ENDPOINT 땡겨서 was가 보는 db endpoint에 넣기
#!/bin/bash
sudo su ec2-user
export AWS_DEFAULT_REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']")
export DATABASE=$(aws rds describe-db-clusters --region $AWS_DEFAULT_REGION --db-cluster-identifier pilot-secondary --query 'DBClusters[*].[Endpoint]' --output text)
sudo bash -c "cat >/home/ec2-user/unishopcfg.sh" <<EOF
#!/bin/bash
export DB_ENDPOINT=$DATABASE
EOF
sudo systemctl restart unishop

Module 3 Warm Standby

이론

실습

primary http://warm-primary-uibucket-qqywk3ew7sje.s3-website-us-east-1.amazonaws.com secondary http://warm-secondary-uibucket-qdikjp4rf1xe.s3-website-us-west-1.amazonaws.com

Module 4 Hot Standby

이론

  • 기본적으로 다 두개.
  • S3도 두개. 이를 위해 클라우드 프론트에서 묶음
  • RDS도 두개
  • 다이나모는 글로벌 쓰기 가능
  • EC2에서는 설정을 좀 바꿔주긴 해야 한다.

실습

  • 프론트 : 클라우드프론트로 정적 페이지 두개를 그룹으로 묶어서 서비스
  • RDS : DR 쪽을 메인으로 프로모션
  • EC2 : 프로모션된 DB 접속 정보를 수정. master를 새롭게 프로모션된 DB로 사용