ݺߣ

ݺߣShare a Scribd company logo
v
김상필 솔루션즈 아키텍트, 아마존웹서비스
sangpill@amazon.com
2016년 3월 26일
AWS 환경에서 MySQL Infra 설계하기
- Amazon Aurora
v
Amazon RDS 서비스 및 Amazon Aurora
v• 완전 관리형 관계형 데이터베이스 서비스
• Aurora,  MySQL,  MariaDB,  PostgreSQL,  Oracle,  SQL  Server
• 인스턴스 및 스토리지 확장성
• Multi-­AZ  기능을 통한 고가용성 구성
• 스냅샷(Snapshot)을 통한 백업/복구 구성
• 읽기 복제(Read  Replica)를 통한 확장성
Amazon
RDS
Aurora
RDS 서비스 개요
vv
Amazon Aurora 개요
• Amazon Aurora는 MySQL 호환 관계형 데이터베이스 엔진
• Aurora는 상용 데이터베이스의 10분의 1 가격으로 MySQL보다 최고 5배
뛰어난 성능을 제공
• 3 가용영역에 거쳐 6개의 복제를 저장하여 고가용성 제공
• Amazon S3에 지속적으로 데이터를 백업
• 지역 내 15개 Amazon Aurora Replicas
• 10GB에서 64TB까지 스토리지 자동 증가
• 지역 : Virginia, Oregon, Ireland 및 Tokyo
vv
Amazon Aurora 개요
• 서비스 중심 아키텍처의 적용
• 로깅 및 스토리지 레이어에, 멀티-
티넌트, 스케일-아웃,
데이터베이스 최적화된 스토리지
서비스 적용
• 내부 운영을 위하여 EC2, VPC,
DynamoDB, SWF, Route 53 등
AWS 기존 서비스 활용
• 연속 백업을 위하여 Amazon S3
통합
Logging	
  +	
  Storage
SQL
Transactions
Caching
Control	
  PlaneData	
  Plane
Amazon S3
DynamoDB
Amazon SWF
Amazon Route 53
vv
Amazon Aurora의 스토리지
• 기본 고가용성
• 3가용영역에 6-way 복제
• 4 / 6 쓰기, 3 / 6 읽기 쿼럼
• S3 저장소에 연속 백업
• SSD, 스케일-아웃, 멀티-
테넌트 스토리지
• 연속적 스토리지 확장
• 최대 64TB 크기
• 사용한만큼만 지불
• 로그-구조 기반 스토리지
SQL
Transactions
AZ	
  1 AZ	
  2 AZ	
  3
Caching
Amazon S3
vv
Amazon Aurora Replica의 읽기 복제
MySQL 읽기 확장
• 복제는 반드시 로그를 재생
• 복제는 마스터에 추가적인 부하
• 복제 지연의 증가
• 페일오버 시 데이터 유실 발생 가능
Page	
  cache
invalidation
Aurora Master
30%	
  Read
70%	
  Write
Aurora	
  Replica
100%	
  New	
  Reads
Shared	
  Multi-­‐AZ	
  Storage
MySQL Master
30%	
  Read
70%	
  Write
MySQL	
  Replica
30%	
  New	
  Reads
70%	
  Write
Single	
  threaded
binlog	
  apply
Data	
  Volume Data	
  Volume
Amazon Aurora 읽기 확장
• 로그 재생 없음
• 마스터 부하 최소, 최대 15개 복제
• ~100 ms 복제 지연
• 동일 스토리지를 공유하여 페일오버
시 데이터 유실 없음
v
AWS 환경에서 MySQL 인프라 설계 - 고가용성
vv
2. RDS MySQL
• Multi-AZ 기능
• 동기적 복제
• 자동 페일-오버
MySQL 고가용성 구성 비교
Availability	
  Zone
Master
(EC2	
  +	
  EBS)
Availability	
  Zone
Slave
(EC2	
  +	
  EBS)
Replication
1. MySQL on EC2/EBS
• EC2 + EBS 직접 설치
• MySQL Replication 기반
Availability	
  Zone
RDS	
  Master
MySQL
Availability	
  Zone
RDS	
  Standby
MySQL
Multi-­‐AZ	
  /w
Syncronoous
Replication
Availability	
  Zone
RDS	
  Master
Aurora
Availability	
  Zone
RDS	
  Standby
Aurora
3. RDS Aurora
• 고가용성 스토리지 서비스
• 자동 페일-오버
• 빠른 크래시 복구
Multi-­‐AZ	
  /w
Aurora	
  
Replica
vv
Multi-­AZ  배포를 통한 고가용성
Enterprise-grade fault tolerance solution for production databases
vv
Multi-­AZ  배포 시 페일오버 프로세스
• Planned 또는 unplanned 다운타임 발생 시,
• 단일 가용 영역 장애
• 프라이머리 DB 인스턴스 장애
• DB 인스턴스 타입 변경
• DB 인스턴스의 소프트웨어 패치
• ‘Reboot with failover’를 통한 수동 페일오버
• 다른 가용 영역의 Standby 인스턴스 자동으로 승격
• 일반적으로 60-120초 시간 이내 완료. (대규모 트랜잭션 및 복구
프로세스 시간에 따라 증가할 수 있음)
vv
Multi-­AZ  배포 시 페일오버 프로세스
• DB 인스턴스 엔드포인트 유지하며, DNS 레코드 업데이트
• Java DNS 캐싱에 따라 구성 변경 필요할 수 있음
• http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-jvm-
ttl.html
• JVM 사용 모든 어플리케이션 글로벌 적용
• Set networkaddress.cache.ttl in the$JAVA_HOME/jre/lib/security/java.security file:
• networkaddress.cache.ttl=60
• 단일 어플리케이션 적용
• set networkaddress.cache.ttl in your application’s initialization code:
• java.security.Security.setProperty("networkaddress.cache.ttl" , "60");
• 클라이언트는 접속 재설정(re-establish) 필요
vv
RDS MySQL Multi-AZ 배포 (관리 콘솔)
Multi-­‐AZ	
  항목 ‘Yes’	
  선택
vv
RDS MySQL Multi-AZ 확인 (관리 콘솔)
Multi-­‐AZ	
  항목 ‘Yes’	
  선택
vv
RDS MySQL Multi-AZ 배포 (CLI)
• Syntax
• Example
$ aws rds create-db-instance
--db-instance-identifier <value>
--db-instance-class <value>
--engine <value>
[--multi-az | --no-multi-az]
…
$ aws rds create-db-instance --db-instance-identifier mysql-
powergroup-demo --allocated-storage 20 --db-instance-class
db.m1.small --engine mysql --master-username myawsuser --
master-user-password myawsuser --multi-az
vv
RDS MySQL Multi-AZ 확인(CLI)
• Syntax
• Example
$ aws rds describe-db-instances
[--db-instance-identifier <value>]
[--filters <value>]
[--cli-input-json <value>]
…
$ aws rds describe-db-instances --db-instance-identifier
mysql-powergroup-demo
…
"MultiAZ": true,
…
vv
Amazon Aurora의 인스턴스 자동 페일-오버
읽기 복제 있는 경우
• 기존 복제를 새 기본 인스턴스로 승격
• DB 클러스터 엔드포인트 유지하며, 신규 기본
인스턴스로 DNS 레코드 변경
• 일반적으로 1분 이내에 완료
AZ	
  1
Primary
instance
Replica
instance
Replica
instance
Replica
instance
Shared	
  Multi-­‐AZ	
  Storage
Automatic	
  
Failover	
  to	
  
Replica	
  Instance
AZ	
  1
Primary
instance
Primary
instance
Shared	
  Multi-­‐AZ	
  Storage
Create	
  new	
  
primary	
  Instance
Aurora Replica가 있는 경우 Aurora Replica가 없는 경우
읽기 복제 없는 경우
• 동일 가용 영역에 새 DB 인스턴스 생성 시도
• 생성 불가 시 다른 가용 영역에 신규 DB
인스턴스 생성 시도
• 일반적으로 15분 이내에 완료
AZ	
  3AZ	
  2AZ	
  3AZ	
  2
Primary
instance
vv
Amazon Aurora의 인스턴스 자동 페일-오버
페일-­‐오버
1분 미만
v기존 데이터베이스
• 최종 체크포인트 이후 로그 재생 필요
• MySQL은 싱글-쓰레드 동작 및 다량의
디스크 억세스 필요
Amazon Aurora
• 스토리지 수준에서 읽기 시 온-디맨드
형태로 Redo 레코드 재생
• 병렬, 분산, 비동기
Checkpointed	
  Data Redo	
  Log
Crash	
  at	
  T0 requires
a	
  re-­‐application	
  of	
  the
SQL	
  in	
  the	
  redo	
  log	
  since
last	
  checkpoint
T0 T0
Crash	
  at	
  T0 will	
  result	
  in	
  redo
logs	
  being	
  applied	
  to	
  each	
  segment
on	
  demand,	
  in	
  parallel,	
  asynchronously
신속한 크래시 복구
vv
RDS Aurora Multi-AZ 배포 (관리 콘솔)
Multi-­‐AZ	
  항목 ‘Create	
  Replica	
  in	
  Different	
  Zone’	
  선택
vv
RDS Aurora Multi-AZ 확인 (관리 콘솔)
Multi-­‐AZ	
  항목 ‘Yes’	
  선택
vv
RDS Aurora Multi-AZ 배포 (CLI)
• Syntax
$ aws rds create-db-cluster
--db-cluster-identifier <value>
--engine <value>
--master-username <value>
--master-user-password <value>
…
$ aws rds create-db-instance
--db-instance-identifier <value>
--db-instance-class <value>
--engine <value>
--db-cluster-identifier <value>
…
vv
RDS Aurora Multi-AZ 배포 (CLI)
• Example
$ aws rds create-db-cluster --db-cluster-identifier mysql-
powergroup-aurora-demo --engine aurora --master-username
master --master-user-password Master00
$ aws rds create-db-instance --db-cluster-identifier mysql-
powergroup-aurora-demo --db-instance-identifier mysql-
powergroup-aurora-demo --db-instance-class db.r3.large --
engine aurora
$ aws rds create-db-instance --db-cluster-identifier mysql-
powergroup-aurora-demo --db-instance-identifier mysql-
powergroup-aurora-demo-replica1 --db-instance-class
db.r3.large --engine aurora
vv
RDS Aurora Multi-AZ 확인(CLI)
• Syntax
• Example
$ aws rds describe-db-clusters
[--db-cluster-identifier <value>]
$ aws rds describe-db-clusters --db-cluster-identifier mysql-powergroup-aurora-demo {
"DBClusters": [
{
…
"DBClusterMembers": [
{
"IsClusterWriter": false,
…
"DBInstanceIdentifier": "mysql-powergroup-aurora-demo-replica1"
},
{
"IsClusterWriter": true,
…
"DBInstanceIdentifier": "mysql-powergroup-aurora-demo"
}
],
vv
RDS Aurora Multi-AZ 페일-오버(CLI)
• Syntax
• Example
$ failover-db-cluster [--db-cluster-identifier <value>] [--
cli-input-json <value>] [--generate-cli-skeleton]
$ aws rds failover-db-cluster --db-cluster-identifier mysql-powergroup-aurora-
demo
DBCLUSTER 1 2 mysql-powergroup-aurora-demo default.aurora5.6
default2016-03-25T07:00:45.666Z mysql-powergroup-aurora-
demo.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora 5.6.10a
2016-03-25T08:12:08.108Z master 3306 05:35-06:05 tue:10:27-
tue:10:57 available False
AVAILABILITYZONES us-east-1b
AVAILABILITYZONES us-east-1d
AVAILABILITYZONES us-east-1e
DBCLUSTERMEMBERS in-syncmysql-powergroup-aurora-demo-replica1False 1
DBCLUSTERMEMBERS in-syncmysql-powergroup-aurora-demo True 1
VPCSECURITYGROUPS active sg-71f69814
v
AWS 환경에서 MySQL 인프라 설계 – 백업/복구
vv
1. MySQL on EC2/EBS
• EBS Snapshot 기반
• 또는 백업 서버 구성
2. RDS MySQL
• RDS 스냅샷 (자동/수동)
• Point-in-Time 복구
Availability	
  Zone
Master
(EC2	
  +	
  EBS)
Availability	
  Zone
Slave
(EC2	
  +	
  EBS)
Replication
Availability	
  Zone
RDS	
  Master
MySQL
Availability	
  Zone
RDS	
  Standby
MySQL
Multi-­‐AZ	
  /w
Syncronoous
Replication
Availability	
  Zone
RDS	
  Master
Aurora
Availability	
  Zone
RDS	
  Standby
Aurora
3. RDS Aurora
• RDS 스냅샷 (자동/수동)
• Point-in-Time 복구
Multi-­‐AZ	
  /w
Aurora	
  
Replica
MySQL 백업/복구 구성 비교
EBS	
  
snapshot
RDS
snapshots
RDS
snapshots
Backup
(EC2	
  +	
  EBS)
v
EBS  볼륨 스냅샷을 통한 백업
v
[[ console screenshot ]]
RDS automated backups
EBS  스냅샷을 통한 백업
v
[[ console screenshot ]]
RDS automated backups
EBS  스냅샷을 통한 백업
v
[[ console screenshot ]]
restore EBS from snapshot
EBS  스냅샷 통한 복구
vv
Amazon RDS의 스토리지 백업 및 복구
자동 백업(Automated Backup)
• RDS는 백업을 자동으로 생성
• 신규 DB 인스턴스에 자동으로 활성화
• 백업 보관 기간(Backup Retention
Period) 동안 데이터 보관 (1~35일)
• 연속 및 증분 백업
• 백업 중 성능 영향 없음
스냅샷 (DB Snapshots)
• 사용자가 생성한 백업
• 원하는 주기로 백업
• 백업 보관 기간 이상 보관
• 어느 시점으로도 복구 가능
vv
Amazon RDS의 스토리지 백업 및 복구
복구 (Restore)
• 백업 또는 스냅샷으로부터 신규
Aurora DB 클러스터 생성
• 백업 보관 주기 내 어느 시점으로든
복구
• Latest Restorable Time : 보통 5분 이내
• Earliest Restorable Time : 백업 보관 주기
• Aurora Backup은 연속, 증분 백업으로
복구 시간 향상을 위해 빈번한 스냅샷
생성을 할 필요 없음
v
RDS  스냅샷 통한 백업 – 자동 백업
v
[[ console screenshot ]]
RDS automated backups
RDS  스냅샷을 통한 백업 – 자동 백업
v
RDS  스냅샷 통한 백업 – 수동 백업
v
[[ console screenshot ]]
RDS DB snapshots
RDS  스냅샷 통한 백업 – 수동 백업
v
[[ console screenshot ]]
RDS DB snapshots
RDS  스냅샷 통한 백업 – 수동 백업
v
RDS  스냅샷 통한 백업 – 수동 백업
v
RDS  스냅샷 통한 복구
v
[[ console screenshot ]]
restore EBS from snapshot
RDS  스냅샷 통한 복구
v
RDS  스냅샷 통한 복구
v
[[ console screenshot ]]
RDS snapshot restore
RDS  스냅샷 통한 복구
v
RDS  스냅샷 통한 복구
vv
RDS Aurora 스냅샷 생성(CLI)
• Syntax
• Example
$ aws rds create-db-cluster-snapshot --db-cluster-snapshot-
identifier <value> --db-cluster-identifier <value> [--tags
<value>] [--cli-input-json <value>] [--generate-cli-skeleton]
$ aws rds create-db-cluster-snapshot --db-cluster-identifier mysql-
powergroup-aurora-demo --db-cluster-snapshot-identifier mysnapshot-03-
05-17-25
DBCLUSTERSNAPSHOT 1 2016-03-25T07:00:05.099Z mysql-
powergroup-aurora-demo mysnapshot-03-05-17-25 aurora aurora
master 0 0 2016-03-25T08:29:39.920Z manual creating
False vpc-14c21f71
AVAILABILITYZONES us-east-1b
AVAILABILITYZONES us-east-1d
AVAILABILITYZONES us-east-1e
vv
RDS Aurora 스냅샷 확인(CLI)
• Syntax
• Example
$ aws rds describe-db-cluster-snapshots [--db-cluster-
identifier <value>] [--db-cluster-snapshot-identifier <value>]
[--snapshot-type <value>] [--filters <value>] [--max-records
<value>] [--marker <value>] [--cli-input-json <value>]
$ aws rds describe-db-cluster-snapshots
{
"DBClusterSnapshots": [
{
"Engine": "aurora",
"SnapshotCreateTime": "2016-03-25T08:29:39.920Z",
"DBClusterIdentifier": "mysql-powergroup-aurora-demo",
"DBClusterSnapshotIdentifier": "mysnapshot-03-05-17-25",
"ClusterCreateTime": "2016-03-25T07:00:05.099Z",
..
},
vv
RDS Aurora 스냅샷 복구(CLI)
• Syntax
• Example
$ aws rds restore-db-cluster-from-snapshot [--availability-
zones <value>] --db-cluster-identifier <value> --snapshot-
identifier <value> --engine <value> …
$ aws rds restore-db-cluster-from-snapshot --db-cluster-identifier
mysql-powergroup-aurora-demo-restore --snapshot-identifier mysnapshot-
03-05-17-25 --engine aurora
DBCLUSTER 1 2 mysql-powergroup-aurora-demo-restore
default.aurora5.6 default mysql-powergroup-aurora-demo-
restore.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora
5.6.10a master 3306 05:35-06:05 tue:10:27-tue:10:57
creating False
AVAILABILITYZONES us-east-1b
AVAILABILITYZONES us-east-1d
AVAILABILITYZONES us-east-1e
VPCSECURITYGROUPS active sg-71f69814
vv
RDS Aurora Poin-Tn-Time 복구(CLI)
• Syntax
• Example
$ aws rds restore-db-cluster-to-point-in-time --db-cluster-
identifier <value> --source-db-cluster-identifier <value>[--
restore-to-time <value>] …
$ aws rds restore-db-cluster-to-point-in-time --db-cluster-identifier
mysql-powergroup-aurora-demo-pitr --source-db-cluster-identifier
mysql-powergroup-aurora-demo --use-latest-restorable-time
DBCLUSTER 1 2 mysql-powergroup-aurora-demo-pitr
default.aurora5.6 default mysql-powergroup-aurora-demo-
pitr.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora 5.6.10a
master 3306 05:35-06:05 tue:10:27-tue:10:57 creating
False
AVAILABILITYZONES us-east-1b
AVAILABILITYZONES us-east-1d
AVAILABILITYZONES us-east-1e
VPCSECURITYGROUPS active sg-71f69814
v
AWS 환경에서 MySQL 인프라 설계 – 확장성
vv
3. RDS Aurora
• Aurora Replica 생성
• 낮은 복제 지연
• 최대 15개
2. RDS MySQL
• MySQL Replica 생성
• Cross-region Replica 지원
• 최대 5개
1. MySQL on EC2/EBS
• MySQL Replication 기반
MySQL 확장성 구성 비교
Availability	
  Zone
Master
(EC2	
  +	
  EBS)
Availability	
  Zone
Replica
(EC2	
  +	
  EBS)
Replication
Availability	
  Zone
RDS	
  Primary
MySQL
Availability	
  Zone
RDS	
  REplica
MySQL
Ayncronoous
Replication
Availability	
  Zone
RDS	
  Primary
Aurora
Availability	
  Zone
RDS	
  Replica
Aurora
Aurora	
  
Replica
vv
Amazon Aurora Replica의 읽기 복제
MySQL 읽기 확장
• 복제는 반드시 로그를 재생
• 복제는 마스터에 추가적인 부하
• 복제 지연의 증가
• 페일오버 시 데이터 유실 발생 가능
Page	
  cache
invalidation
Aurora Master
30%	
  Read
70%	
  Write
Aurora	
  Replica
100%	
  New	
  Reads
Shared	
  Multi-­‐AZ	
  Storage
MySQL Master
30%	
  Read
70%	
  Write
MySQL	
  Replica
30%	
  New	
  Reads
70%	
  Write
Single	
  threaded
binlog	
  apply
Data	
  Volume Data	
  Volume
Amazon Aurora 읽기 확장
• 로그 재생 없음
• 마스터 부하 최소, 최대 15개 복제
• ~100 ms 복제 지연
• 동일 스토리지를 공유하여 페일오버
시 데이터 유실 없음
vv
• 초당 13,800 회 업데이트 발생 시 Aurora Replica는 7.27 밀리 초 지연
• 동일 사양의 MySQL 5.6 은 초당 2,000 회 업데이트 발생 시 ~2초 지연
Read Replica 지연 (console screenshot)
vv
Aurora 엔드포인트
• 클러스터 엔드포인트
• 언제나 DB 클러스터의 프라이머리 인스턴스에 접속
• 읽기와 쓰기 모두 수행
• 프라이머리 인스턴스 페일오버 시 새로운 프라이머리 인스턴스 지정
• e.g.) Cluster Endpoint: auroraha.cluster-cnehurulmovt.us-east-
1.rds.amazonaws.com:3306
• 인스턴스 엔드포인트
• DB 클러스터 내 각 인스턴스(프라이머리 또는 읽기 전용)에 접속
• 인스턴스 역할에 따라 읽기 또는 쓰기 수행
• e.g.) Endpoint: auroraha.cnehurulmovt.us-east-1.rds.amazonaws.com
v
질의응답
MySQL 커뮤니티를 위한 880달러 선물!
http://bit.ly/awskr-feedback
AWS Activate 패키지
100달러 무료 크레딧 + 80 달러 Qwiklab Credit
600달러 온라인 강좌 수강권+ 100달러 1개월 비지니스 서포트
등록하시면 패키지를 받으실 수 있는 URL을 이메일로 보내드립니다!
라잇나우 1
http://aws.amazon.com/ko/blogs/korea/c
ategory/amazon-­aurora/
한국어 블로그 Aurora 정보
라잇나우 2
https://www.qwiklab.com/lab_catalogue
온라인 실습 하기
3월 31일까지 전체 실습 코스에 대해 무료 실습 가능 제공
라잇나우 3
“아마존 웹 서비스” 검색 후
더 궁금한 점은…
“AWSKRUG” 검색 후
한국 사용자모임 커뮤니티 가입

More Related Content

AWS 환경에서 MySQL Infra 설계하기-2본론

  • 1. v 김상필 솔루션즈 아키텍트, 아마존웹서비스 sangpill@amazon.com 2016년 3월 26일 AWS 환경에서 MySQL Infra 설계하기 - Amazon Aurora
  • 2. v Amazon RDS 서비스 및 Amazon Aurora
  • 3. v• 완전 관리형 관계형 데이터베이스 서비스 • Aurora,  MySQL,  MariaDB,  PostgreSQL,  Oracle,  SQL  Server • 인스턴스 및 스토리지 확장성 • Multi-­AZ  기능을 통한 고가용성 구성 • 스냅샷(Snapshot)을 통한 백업/복구 구성 • 읽기 복제(Read  Replica)를 통한 확장성 Amazon RDS Aurora RDS 서비스 개요
  • 4. vv Amazon Aurora 개요 • Amazon Aurora는 MySQL 호환 관계형 데이터베이스 엔진 • Aurora는 상용 데이터베이스의 10분의 1 가격으로 MySQL보다 최고 5배 뛰어난 성능을 제공 • 3 가용영역에 거쳐 6개의 복제를 저장하여 고가용성 제공 • Amazon S3에 지속적으로 데이터를 백업 • 지역 내 15개 Amazon Aurora Replicas • 10GB에서 64TB까지 스토리지 자동 증가 • 지역 : Virginia, Oregon, Ireland 및 Tokyo
  • 5. vv Amazon Aurora 개요 • 서비스 중심 아키텍처의 적용 • 로깅 및 스토리지 레이어에, 멀티- 티넌트, 스케일-아웃, 데이터베이스 최적화된 스토리지 서비스 적용 • 내부 운영을 위하여 EC2, VPC, DynamoDB, SWF, Route 53 등 AWS 기존 서비스 활용 • 연속 백업을 위하여 Amazon S3 통합 Logging  +  Storage SQL Transactions Caching Control  PlaneData  Plane Amazon S3 DynamoDB Amazon SWF Amazon Route 53
  • 6. vv Amazon Aurora의 스토리지 • 기본 고가용성 • 3가용영역에 6-way 복제 • 4 / 6 쓰기, 3 / 6 읽기 쿼럼 • S3 저장소에 연속 백업 • SSD, 스케일-아웃, 멀티- 테넌트 스토리지 • 연속적 스토리지 확장 • 최대 64TB 크기 • 사용한만큼만 지불 • 로그-구조 기반 스토리지 SQL Transactions AZ  1 AZ  2 AZ  3 Caching Amazon S3
  • 7. vv Amazon Aurora Replica의 읽기 복제 MySQL 읽기 확장 • 복제는 반드시 로그를 재생 • 복제는 마스터에 추가적인 부하 • 복제 지연의 증가 • 페일오버 시 데이터 유실 발생 가능 Page  cache invalidation Aurora Master 30%  Read 70%  Write Aurora  Replica 100%  New  Reads Shared  Multi-­‐AZ  Storage MySQL Master 30%  Read 70%  Write MySQL  Replica 30%  New  Reads 70%  Write Single  threaded binlog  apply Data  Volume Data  Volume Amazon Aurora 읽기 확장 • 로그 재생 없음 • 마스터 부하 최소, 최대 15개 복제 • ~100 ms 복제 지연 • 동일 스토리지를 공유하여 페일오버 시 데이터 유실 없음
  • 8. v AWS 환경에서 MySQL 인프라 설계 - 고가용성
  • 9. vv 2. RDS MySQL • Multi-AZ 기능 • 동기적 복제 • 자동 페일-오버 MySQL 고가용성 구성 비교 Availability  Zone Master (EC2  +  EBS) Availability  Zone Slave (EC2  +  EBS) Replication 1. MySQL on EC2/EBS • EC2 + EBS 직접 설치 • MySQL Replication 기반 Availability  Zone RDS  Master MySQL Availability  Zone RDS  Standby MySQL Multi-­‐AZ  /w Syncronoous Replication Availability  Zone RDS  Master Aurora Availability  Zone RDS  Standby Aurora 3. RDS Aurora • 고가용성 스토리지 서비스 • 자동 페일-오버 • 빠른 크래시 복구 Multi-­‐AZ  /w Aurora   Replica
  • 10. vv Multi-­AZ  배포를 통한 고가용성 Enterprise-grade fault tolerance solution for production databases
  • 11. vv Multi-­AZ  배포 시 페일오버 프로세스 • Planned 또는 unplanned 다운타임 발생 시, • 단일 가용 영역 장애 • 프라이머리 DB 인스턴스 장애 • DB 인스턴스 타입 변경 • DB 인스턴스의 소프트웨어 패치 • ‘Reboot with failover’를 통한 수동 페일오버 • 다른 가용 영역의 Standby 인스턴스 자동으로 승격 • 일반적으로 60-120초 시간 이내 완료. (대규모 트랜잭션 및 복구 프로세스 시간에 따라 증가할 수 있음)
  • 12. vv Multi-­AZ  배포 시 페일오버 프로세스 • DB 인스턴스 엔드포인트 유지하며, DNS 레코드 업데이트 • Java DNS 캐싱에 따라 구성 변경 필요할 수 있음 • http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-jvm- ttl.html • JVM 사용 모든 어플리케이션 글로벌 적용 • Set networkaddress.cache.ttl in the$JAVA_HOME/jre/lib/security/java.security file: • networkaddress.cache.ttl=60 • 단일 어플리케이션 적용 • set networkaddress.cache.ttl in your application’s initialization code: • java.security.Security.setProperty("networkaddress.cache.ttl" , "60"); • 클라이언트는 접속 재설정(re-establish) 필요
  • 13. vv RDS MySQL Multi-AZ 배포 (관리 콘솔) Multi-­‐AZ  항목 ‘Yes’  선택
  • 14. vv RDS MySQL Multi-AZ 확인 (관리 콘솔) Multi-­‐AZ  항목 ‘Yes’  선택
  • 15. vv RDS MySQL Multi-AZ 배포 (CLI) • Syntax • Example $ aws rds create-db-instance --db-instance-identifier <value> --db-instance-class <value> --engine <value> [--multi-az | --no-multi-az] … $ aws rds create-db-instance --db-instance-identifier mysql- powergroup-demo --allocated-storage 20 --db-instance-class db.m1.small --engine mysql --master-username myawsuser -- master-user-password myawsuser --multi-az
  • 16. vv RDS MySQL Multi-AZ 확인(CLI) • Syntax • Example $ aws rds describe-db-instances [--db-instance-identifier <value>] [--filters <value>] [--cli-input-json <value>] … $ aws rds describe-db-instances --db-instance-identifier mysql-powergroup-demo … "MultiAZ": true, …
  • 17. vv Amazon Aurora의 인스턴스 자동 페일-오버 읽기 복제 있는 경우 • 기존 복제를 새 기본 인스턴스로 승격 • DB 클러스터 엔드포인트 유지하며, 신규 기본 인스턴스로 DNS 레코드 변경 • 일반적으로 1분 이내에 완료 AZ  1 Primary instance Replica instance Replica instance Replica instance Shared  Multi-­‐AZ  Storage Automatic   Failover  to   Replica  Instance AZ  1 Primary instance Primary instance Shared  Multi-­‐AZ  Storage Create  new   primary  Instance Aurora Replica가 있는 경우 Aurora Replica가 없는 경우 읽기 복제 없는 경우 • 동일 가용 영역에 새 DB 인스턴스 생성 시도 • 생성 불가 시 다른 가용 영역에 신규 DB 인스턴스 생성 시도 • 일반적으로 15분 이내에 완료 AZ  3AZ  2AZ  3AZ  2 Primary instance
  • 18. vv Amazon Aurora의 인스턴스 자동 페일-오버 페일-­‐오버 1분 미만
  • 19. v기존 데이터베이스 • 최종 체크포인트 이후 로그 재생 필요 • MySQL은 싱글-쓰레드 동작 및 다량의 디스크 억세스 필요 Amazon Aurora • 스토리지 수준에서 읽기 시 온-디맨드 형태로 Redo 레코드 재생 • 병렬, 분산, 비동기 Checkpointed  Data Redo  Log Crash  at  T0 requires a  re-­‐application  of  the SQL  in  the  redo  log  since last  checkpoint T0 T0 Crash  at  T0 will  result  in  redo logs  being  applied  to  each  segment on  demand,  in  parallel,  asynchronously 신속한 크래시 복구
  • 20. vv RDS Aurora Multi-AZ 배포 (관리 콘솔) Multi-­‐AZ  항목 ‘Create  Replica  in  Different  Zone’  선택
  • 21. vv RDS Aurora Multi-AZ 확인 (관리 콘솔) Multi-­‐AZ  항목 ‘Yes’  선택
  • 22. vv RDS Aurora Multi-AZ 배포 (CLI) • Syntax $ aws rds create-db-cluster --db-cluster-identifier <value> --engine <value> --master-username <value> --master-user-password <value> … $ aws rds create-db-instance --db-instance-identifier <value> --db-instance-class <value> --engine <value> --db-cluster-identifier <value> …
  • 23. vv RDS Aurora Multi-AZ 배포 (CLI) • Example $ aws rds create-db-cluster --db-cluster-identifier mysql- powergroup-aurora-demo --engine aurora --master-username master --master-user-password Master00 $ aws rds create-db-instance --db-cluster-identifier mysql- powergroup-aurora-demo --db-instance-identifier mysql- powergroup-aurora-demo --db-instance-class db.r3.large -- engine aurora $ aws rds create-db-instance --db-cluster-identifier mysql- powergroup-aurora-demo --db-instance-identifier mysql- powergroup-aurora-demo-replica1 --db-instance-class db.r3.large --engine aurora
  • 24. vv RDS Aurora Multi-AZ 확인(CLI) • Syntax • Example $ aws rds describe-db-clusters [--db-cluster-identifier <value>] $ aws rds describe-db-clusters --db-cluster-identifier mysql-powergroup-aurora-demo { "DBClusters": [ { … "DBClusterMembers": [ { "IsClusterWriter": false, … "DBInstanceIdentifier": "mysql-powergroup-aurora-demo-replica1" }, { "IsClusterWriter": true, … "DBInstanceIdentifier": "mysql-powergroup-aurora-demo" } ],
  • 25. vv RDS Aurora Multi-AZ 페일-오버(CLI) • Syntax • Example $ failover-db-cluster [--db-cluster-identifier <value>] [-- cli-input-json <value>] [--generate-cli-skeleton] $ aws rds failover-db-cluster --db-cluster-identifier mysql-powergroup-aurora- demo DBCLUSTER 1 2 mysql-powergroup-aurora-demo default.aurora5.6 default2016-03-25T07:00:45.666Z mysql-powergroup-aurora- demo.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora 5.6.10a 2016-03-25T08:12:08.108Z master 3306 05:35-06:05 tue:10:27- tue:10:57 available False AVAILABILITYZONES us-east-1b AVAILABILITYZONES us-east-1d AVAILABILITYZONES us-east-1e DBCLUSTERMEMBERS in-syncmysql-powergroup-aurora-demo-replica1False 1 DBCLUSTERMEMBERS in-syncmysql-powergroup-aurora-demo True 1 VPCSECURITYGROUPS active sg-71f69814
  • 26. v AWS 환경에서 MySQL 인프라 설계 – 백업/복구
  • 27. vv 1. MySQL on EC2/EBS • EBS Snapshot 기반 • 또는 백업 서버 구성 2. RDS MySQL • RDS 스냅샷 (자동/수동) • Point-in-Time 복구 Availability  Zone Master (EC2  +  EBS) Availability  Zone Slave (EC2  +  EBS) Replication Availability  Zone RDS  Master MySQL Availability  Zone RDS  Standby MySQL Multi-­‐AZ  /w Syncronoous Replication Availability  Zone RDS  Master Aurora Availability  Zone RDS  Standby Aurora 3. RDS Aurora • RDS 스냅샷 (자동/수동) • Point-in-Time 복구 Multi-­‐AZ  /w Aurora   Replica MySQL 백업/복구 구성 비교 EBS   snapshot RDS snapshots RDS snapshots Backup (EC2  +  EBS)
  • 29. v [[ console screenshot ]] RDS automated backups EBS  스냅샷을 통한 백업
  • 30. v [[ console screenshot ]] RDS automated backups EBS  스냅샷을 통한 백업
  • 31. v [[ console screenshot ]] restore EBS from snapshot EBS  스냅샷 통한 복구
  • 32. vv Amazon RDS의 스토리지 백업 및 복구 자동 백업(Automated Backup) • RDS는 백업을 자동으로 생성 • 신규 DB 인스턴스에 자동으로 활성화 • 백업 보관 기간(Backup Retention Period) 동안 데이터 보관 (1~35일) • 연속 및 증분 백업 • 백업 중 성능 영향 없음 스냅샷 (DB Snapshots) • 사용자가 생성한 백업 • 원하는 주기로 백업 • 백업 보관 기간 이상 보관 • 어느 시점으로도 복구 가능
  • 33. vv Amazon RDS의 스토리지 백업 및 복구 복구 (Restore) • 백업 또는 스냅샷으로부터 신규 Aurora DB 클러스터 생성 • 백업 보관 주기 내 어느 시점으로든 복구 • Latest Restorable Time : 보통 5분 이내 • Earliest Restorable Time : 백업 보관 주기 • Aurora Backup은 연속, 증분 백업으로 복구 시간 향상을 위해 빈번한 스냅샷 생성을 할 필요 없음
  • 34. v RDS  스냅샷 통한 백업 – 자동 백업
  • 35. v [[ console screenshot ]] RDS automated backups RDS  스냅샷을 통한 백업 – 자동 백업
  • 36. v RDS  스냅샷 통한 백업 – 수동 백업
  • 37. v [[ console screenshot ]] RDS DB snapshots RDS  스냅샷 통한 백업 – 수동 백업
  • 38. v [[ console screenshot ]] RDS DB snapshots RDS  스냅샷 통한 백업 – 수동 백업
  • 39. v RDS  스냅샷 통한 백업 – 수동 백업
  • 41. v [[ console screenshot ]] restore EBS from snapshot RDS  스냅샷 통한 복구
  • 43. v [[ console screenshot ]] RDS snapshot restore RDS  스냅샷 통한 복구
  • 45. vv RDS Aurora 스냅샷 생성(CLI) • Syntax • Example $ aws rds create-db-cluster-snapshot --db-cluster-snapshot- identifier <value> --db-cluster-identifier <value> [--tags <value>] [--cli-input-json <value>] [--generate-cli-skeleton] $ aws rds create-db-cluster-snapshot --db-cluster-identifier mysql- powergroup-aurora-demo --db-cluster-snapshot-identifier mysnapshot-03- 05-17-25 DBCLUSTERSNAPSHOT 1 2016-03-25T07:00:05.099Z mysql- powergroup-aurora-demo mysnapshot-03-05-17-25 aurora aurora master 0 0 2016-03-25T08:29:39.920Z manual creating False vpc-14c21f71 AVAILABILITYZONES us-east-1b AVAILABILITYZONES us-east-1d AVAILABILITYZONES us-east-1e
  • 46. vv RDS Aurora 스냅샷 확인(CLI) • Syntax • Example $ aws rds describe-db-cluster-snapshots [--db-cluster- identifier <value>] [--db-cluster-snapshot-identifier <value>] [--snapshot-type <value>] [--filters <value>] [--max-records <value>] [--marker <value>] [--cli-input-json <value>] $ aws rds describe-db-cluster-snapshots { "DBClusterSnapshots": [ { "Engine": "aurora", "SnapshotCreateTime": "2016-03-25T08:29:39.920Z", "DBClusterIdentifier": "mysql-powergroup-aurora-demo", "DBClusterSnapshotIdentifier": "mysnapshot-03-05-17-25", "ClusterCreateTime": "2016-03-25T07:00:05.099Z", .. },
  • 47. vv RDS Aurora 스냅샷 복구(CLI) • Syntax • Example $ aws rds restore-db-cluster-from-snapshot [--availability- zones <value>] --db-cluster-identifier <value> --snapshot- identifier <value> --engine <value> … $ aws rds restore-db-cluster-from-snapshot --db-cluster-identifier mysql-powergroup-aurora-demo-restore --snapshot-identifier mysnapshot- 03-05-17-25 --engine aurora DBCLUSTER 1 2 mysql-powergroup-aurora-demo-restore default.aurora5.6 default mysql-powergroup-aurora-demo- restore.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora 5.6.10a master 3306 05:35-06:05 tue:10:27-tue:10:57 creating False AVAILABILITYZONES us-east-1b AVAILABILITYZONES us-east-1d AVAILABILITYZONES us-east-1e VPCSECURITYGROUPS active sg-71f69814
  • 48. vv RDS Aurora Poin-Tn-Time 복구(CLI) • Syntax • Example $ aws rds restore-db-cluster-to-point-in-time --db-cluster- identifier <value> --source-db-cluster-identifier <value>[-- restore-to-time <value>] … $ aws rds restore-db-cluster-to-point-in-time --db-cluster-identifier mysql-powergroup-aurora-demo-pitr --source-db-cluster-identifier mysql-powergroup-aurora-demo --use-latest-restorable-time DBCLUSTER 1 2 mysql-powergroup-aurora-demo-pitr default.aurora5.6 default mysql-powergroup-aurora-demo- pitr.cluster-cnehurulmovt.us-east-1.rds.amazonaws.com aurora 5.6.10a master 3306 05:35-06:05 tue:10:27-tue:10:57 creating False AVAILABILITYZONES us-east-1b AVAILABILITYZONES us-east-1d AVAILABILITYZONES us-east-1e VPCSECURITYGROUPS active sg-71f69814
  • 49. v AWS 환경에서 MySQL 인프라 설계 – 확장성
  • 50. vv 3. RDS Aurora • Aurora Replica 생성 • 낮은 복제 지연 • 최대 15개 2. RDS MySQL • MySQL Replica 생성 • Cross-region Replica 지원 • 최대 5개 1. MySQL on EC2/EBS • MySQL Replication 기반 MySQL 확장성 구성 비교 Availability  Zone Master (EC2  +  EBS) Availability  Zone Replica (EC2  +  EBS) Replication Availability  Zone RDS  Primary MySQL Availability  Zone RDS  REplica MySQL Ayncronoous Replication Availability  Zone RDS  Primary Aurora Availability  Zone RDS  Replica Aurora Aurora   Replica
  • 51. vv Amazon Aurora Replica의 읽기 복제 MySQL 읽기 확장 • 복제는 반드시 로그를 재생 • 복제는 마스터에 추가적인 부하 • 복제 지연의 증가 • 페일오버 시 데이터 유실 발생 가능 Page  cache invalidation Aurora Master 30%  Read 70%  Write Aurora  Replica 100%  New  Reads Shared  Multi-­‐AZ  Storage MySQL Master 30%  Read 70%  Write MySQL  Replica 30%  New  Reads 70%  Write Single  threaded binlog  apply Data  Volume Data  Volume Amazon Aurora 읽기 확장 • 로그 재생 없음 • 마스터 부하 최소, 최대 15개 복제 • ~100 ms 복제 지연 • 동일 스토리지를 공유하여 페일오버 시 데이터 유실 없음
  • 52. vv • 초당 13,800 회 업데이트 발생 시 Aurora Replica는 7.27 밀리 초 지연 • 동일 사양의 MySQL 5.6 은 초당 2,000 회 업데이트 발생 시 ~2초 지연 Read Replica 지연 (console screenshot)
  • 53. vv Aurora 엔드포인트 • 클러스터 엔드포인트 • 언제나 DB 클러스터의 프라이머리 인스턴스에 접속 • 읽기와 쓰기 모두 수행 • 프라이머리 인스턴스 페일오버 시 새로운 프라이머리 인스턴스 지정 • e.g.) Cluster Endpoint: auroraha.cluster-cnehurulmovt.us-east- 1.rds.amazonaws.com:3306 • 인스턴스 엔드포인트 • DB 클러스터 내 각 인스턴스(프라이머리 또는 읽기 전용)에 접속 • 인스턴스 역할에 따라 읽기 또는 쓰기 수행 • e.g.) Endpoint: auroraha.cnehurulmovt.us-east-1.rds.amazonaws.com
  • 55. MySQL 커뮤니티를 위한 880달러 선물! http://bit.ly/awskr-feedback AWS Activate 패키지 100달러 무료 크레딧 + 80 달러 Qwiklab Credit 600달러 온라인 강좌 수강권+ 100달러 1개월 비지니스 서포트 등록하시면 패키지를 받으실 수 있는 URL을 이메일로 보내드립니다!
  • 57. 라잇나우 2 https://www.qwiklab.com/lab_catalogue 온라인 실습 하기 3월 31일까지 전체 실습 코스에 대해 무료 실습 가능 제공
  • 58. 라잇나우 3 “아마존 웹 서비스” 검색 후
  • 59. 더 궁금한 점은… “AWSKRUG” 검색 후 한국 사용자모임 커뮤니티 가입