elb와 ebs의 아키텍터로 생각해보는 사용상 주의할 점들
DESCRIPTION
AWS 한국 사용자모임 세미나 VCNC 이정행TRANSCRIPT
ELB와 EBS의 아키텍처로 생각해보는 사용상 주의할 점들
!VCNC 개발팀 이정행
AWS 한국 유저 그룹 (#awskrug) 2014.03.08
발표자 소개
• 이정행 (@eincs)
• VCNC에서 비트윈을 개발하고 있는 개발자
• 서버팀과 안드로이드팀에서 파견직으로 일하고 있음
• http://eincs.net
비트윈
• 커플들을 위한 모바일 서비스
• 아이폰, 안드로이드 어플리케이션 제공
• 채팅, 기념일, 사진, 메모, 캘린더 기능 제공
• 전 세계에서 600만+ 다운로드 (as of 2012.02)
• http://between.us
• http://engineering.vcnc.co.kr
비트윈 서버 구조
• Java로 작성되어 있음
• 데이터 저장소로 HBase를 사용함
• Haeinsa를 통해 HBase에 접근시 ACID 트랜잭션 이용
• Thrift 서비스를 Netty위에 올려서 서비스함
• 채팅의 경우, Thrift를 이용해 클라이언트와 통신함
• AWS Tokyo리전에서 운영되고 있음
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master BackupEC2
채팅서버
API서버SNS
SES
SQS
S3
CloudFront
CloudWatch
IAM
Elastic Load Balancer
ELB는 좋다.
ELB에 EC2 여러 인스턴스를 붙여놓으면 트래픽을 분배해준다
EC2
EC2
EC2
EC2
EC2트래픽이 늘어 EC2를 더 붙이면
알아서 분배해준다.
EC2
EC2
EC2트래픽이 늘어 EC2를 더 붙이면
알아서 분배해준다.
Auto Scale 설정을 해두면 좋다.
EC2
EC2
EC2
EC2
EC2
EC2EC2에 문제가 생겨 장애가 나면 더 이상 트래픽을 분배하지 않는다.
EC2
EC2
EC2EC2에 문제가 생겨 장애가 나면 더 이상 트래픽을 분배하지 않는다.
ELB는 아주 좋습니다.
ELB는 내부적으로 Scale-Out을 한다.
EC2
EC2
EC2트래픽이 매우 증가한 경우에는?
EC2
EC2
EC2
EC2
EC2는 늘리면 되지만 ELB는 버틸 수 있을까?
EC2
EC2
EC2
EC2
ELB Machine
ELB도 내부적으로는 컴퓨터 위에서 돌아가는 어플리케이션일 뿐이다! 한대의 ELB 머신이 처리할 수 있는 트래픽에는 한계가 있다.
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
ELB는 Scale-Out하여 큰 트래픽도 문제 없이 처리한다. 밖에서 보기엔 하나의 ELB이지만, 내부적으로는 여러 머신에서 동작하게 된다.
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
한 ELB는 여러 IP를 가질 수 있다!
x.x.x.x
y.y.y.y
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
ELB가 IP를 할당받지 못하고 도메인이 할당되는 이유!
xxx.elb.amazonaws.com
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
DNS Round Robin 으로 각 ELB Machine에
트래픽이 분배 된다.
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
DNS Round Robin 으로 각 ELB Machine에
트래픽이 분배 된다.
ELB도 내부적으로는 Scale-Out을 한다.
ELB도 Scale-Out하려면 시간이 필요하다.
EC2
EC2
EC2
ELB Machine
EC2
EC2
EC2
EC2
ELB Machine
아무 트래픽도 없다가 하나의 ELB머신이 감당하기 힘든 엄청난 트래픽을
갑자기 가한다면?
EC2
EC2
EC2
EC2
ELB Machine
어쨋든 처음에는 트래픽을 각 EC2에 분배하기는 하는데…
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine이 버티지 못하고 트래픽을 처리하지 못한다.
EC2
EC2
EC2
EC2
ELB Machine
ELB Machine
EC2
시간이 지나면 Scale-out에 성공하여 정상 동작하게 된다.
EC2
EC2
EC2
ELB Machine
ELB Machine
EC2
시간이 지나면 Scale-out에 성공하여 정상 동작하게 된다.
갑자기 많은 트래픽을 처리해야할떄에는 미리 Warm-up을 하자!
EC2
EC2
EC2
ELB Machine
ELB Machine
EC2
시간이 지나면 Scale-out에 성공하여 정상 동작하게 된다.
갑자기 많은 트래픽을 처리해야할떄에는 미리 Warm-up을 하자!
ELB가 차갑게 식었다면 따뜻하게 데워서 이용해주세요.
Multi-AZ 구성일 때 ELB의 동작에 주의하자!
EC2ELB Machine
Availability Zone 1
EC2ELB Machine
Availability Zone 1
서비스에서 EC2 인스턴스를 한대만 운영하면 SPOF!
EC2ELB Machine
Availability Zone 1
서비스에서 EC2 인스턴스를 한대만 운영하면 SPOF!
하나의 Availability Zone만 이용하는 것도 권장되지 않는다.
(Availability Zone = Data Center)
EC2ELB Machine
Availability Zone 1
Availability Zone 2
EC2
Multi-AZ 구성을 위해 EC2를 다른 AZ에 띄워보았다.
EC2
EC2
ELB Machine
Availability Zone 1
Availability Zone 2한 ELB Machine도 일종의 컴퓨터이므로 특정 데이터센터 안에 속해있다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
Multi-AZ 구성을하면 트래픽이 매우 작아도 ELB Machine이 각 AZ마다 하나씩 뜨게 된다!
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
DNS RR로 분배하므로 각 AZ에 동일한 트래픽이
분배된다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
DNS RR로 분배하므로 각 AZ에 동일한 트래픽이
분배된다.
ELB도 컴퓨터 이므로 Multi-AZ 구성이면 여러개 뜹니다.
각 AZ별 EC2 숫자는 같아야 한다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2Auto-scale 설정을 해놓지 않았는데 갑자기 엄청난 트
래픽이 몰린다면?
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
너무 급한 나머지 한쪽 AZ에만 인스턴스 2개를 추가!
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
너무 급한 나머지 한쪽 AZ에만 인스턴스 2개를 추가!
이제 4대나 있으니 걱정 없음!?
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
그러나 AZ1의 인스턴스가 큰 CPU 사용량을 보이며 죽었다 살았다 한다. 왜 그럴까?
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
DNS Round Robin 으로 분배하므로 각 AZ에 동일한 트래픽이 분배된다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
한 쪽 AZ에 인스턴스 갯수가 적으면 트래픽이 불균형하게 분배 된다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
한 쪽 AZ에 인스턴스 갯수가 적으면 트래픽이 불균형하게 분배 된다.
각 AZ에 같은 수의 EC2를 붙여놓는 것이 좋다.
EC2
EC2
ELB Machine
ELB Machine
Availability Zone 1
Availability Zone 2
EC2
EC2
한 쪽 AZ에 인스턴스 갯수가 적으면 트래픽이 불균형하게 분배 된다.
각 AZ에 같은 수의 EC2를 붙여놓는 것이 좋다.
Multi-AZ 구성을 할때에는 인스턴스 갯수를 잘 맞춰야한다.
ELB도 나무에서 떨어질 때가 있다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master BackupEC2
채팅서버
API서버SNS
SES
SQS
S3
CloudFront
CloudWatch
IAM
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master BackupEC2
채팅서버
API서버SNS
SES
SQS
S3
CloudFront
CloudWatch
IAM
채팅 서버는 하나의 ELB와 연결되어 있고, 연결 갯수가 많고,
timeout이 길게 설정되어 있다.
EC2ELB Machine
전체 시스템을 VPC로 옮긴 후 가끔씩 채팅 서버 중 한 대의 사용자들이 연결을 맺지 못하는 발생함
EC2ELB Machine
전체 시스템을 VPC로 옮긴 후 가끔씩 채팅 서버 중 한 대의 사용자들이 연결을 맺지 못하는 발생함
아무리 문제를 찾아봐도 원인이 나오지 않아 AWS Support에 도움을 청함
EC2ELB Machine
“From the analysis it appears that once the ELB tries to establish more than
19k connections the backend instances are not able to handle additional
connections and this cause a health-check failure.”
EC2ELB Machine
“From the analysis it appears that once the ELB tries to establish more than
19k connections the backend instances are not able to handle additional
connections and this cause a health-check failure.”
하지만 테스트 해보니 우리 서버는 19K이상은 충분히 버틸 수 있음… 그렇다면 ELB문제 아닐까?
EC2
ELB Machine
ELB Machine
Route53
ELB를 두 개 띄우고, Route53으로 DNS-RR 설정하여 일단 해결
EC2
ELB Machine
ELB Machine
Route53 “I see some activity on the ELB from our side that may have some influence on the issue you are experiencing.”
EC2
ELB Machine
ELB Machine
Route53
“We made some adjustments to our ELB in order to better handle
requests directed to your backend instances.”
“I see some activity on the ELB from our side that may have some influence on the issue you are experiencing.”
EC2ELB Machine
ELB Machine
이후에 확인해보니 ELB Machine이 두개 떠있게 됨 (IP가 두개 관측됨)
EC2ELB Machine
ELB Machine
이후에 확인해보니 ELB Machine이 두개 떠있게 됨 (IP가 두개 관측됨)
문제가 생기면 AWS Support가 많은 도움이 된다.
정리하기
• ELB는 좋다.
• ELB는 내부적으로 Scale-Out을 한다.
• ELB도 Scale-Out하려면 시간이 필요하다.
• Multi-AZ 구성일 때 ELB의 동작에 주의하자!
• 각 AZ별 EC2의 숫자는 같아야 한다.
• ELB도 나무에서 떨어질 때가 있다.
Elastic Block Storage
EBS는 좋다.
EC2
EC2
EC2 EBS
EBS
EBS언제든지 EC2에 EBS를
붙일 수 있음
EC2
EC2
EC2 EBS
EBS
EBS
사용하던 EBS를 새로운 인스턴스에 가져다 붙일 수 있음
EC2
EC2
EC2 EBS
EBS
EBS언제든지 Snapshot을 만들어 둘 수 있음
EC2
EC2
EC2 EBS
EBS
EBS언제든지 Snapshot을 만들어 둘 수 있음
EBS는 정말 좋습니다.
EC2는 EBS에 공유 네트워크를 통해 접근한다.
EC2
EC2
EC2 EBS
EBS
EBS
EC2에 EBS를 부착하면 디스크를 가져다 설치하는 느낌이지만…
EC2 EC2EC2 EBS EBS EBS
EC2에 부착한 EBS는 네트워크를 통해 데이터를 주고 받는다.
EC2 EC2EC2 EBS EBS EBS
사용자
EC2와 인터넷과 통신할때에도 같은 이더넷카드를 사용한다.
인터넷
EBS의 성능은 외부와의 통신 트래픽에 영향을 받을 수 있다.
EC2 EC2EC2 EBS EBS EBS
사용자 인터넷
EC2 EC2EC2 EBS EBS EBS
사용자
EC2에 이더넷 카드가 하나라면, 외부와 통신 트래픽이 많으면 EBS와 통신
이 방해 받을 수 있다.인터넷
EC2 EC2EC2 EBS EBS EBS
사용자
EBS-Optimized 인스턴스는 EBS와의 통신에만 사용하는 이더넷 카드
가 하나 더 꼽혀 있다!인터넷
EC2 EC2EC2 EBS EBS EBS
사용자
EBS-Optimized 인스턴스는 EBS와의 통신에만 사용하는 이더넷 카드
가 하나 더 꼽혀 있다!인터넷
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html
성능이 중요할때에는 EBS-Optimized 옵션을 이용하자.
EBS의 성능을 확보하기 위한 방법들이 많다.
EC2 EC2EC2 EBS EBS EBS
PIOPS 옵션을 이용하면 EBS의 IO성능을 보장해준다.
http://www.quora.com/Amazon-EBS/How-did-Amazon-implement-EBS-Provisioned-IOPS-volumeshttp://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.html
EC2
EC2
EC2 EBS
EBS
EBS
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/raid-config.html
한 EC2 인스턴스에 여러 EBS를 달아 두고 Striping 구성을 통해 처리량(RAID0)이나 안정성(RAID1)을 더 확보할 수 있다.
http://www.slideshare.net/AmazonWebServices/ebs-webinarfinal
EC2 EC2EC2 EBS EBS EBS
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-prewarm.html
EBS가 처음 만들어지면 성능이 다소 떨어질 수 있다. Pre-wram을 하여 성능을 균일하게 확보 가능.
EC2 EC2EC2 EBS EBS EBS
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-prewarm.html
EBS가 처음 만들어지면 성능이 다소 떨어질 수 있다. Pre-wram을 하여 성능을 균일하게 확보 가능.
다양한 방법을 통해 EBS의 성능을 확보할 수 있다.
EC2가 멀쩡하더라도 EBS는 문제가 생길 수 있다.
EC2 EC2EC2 EBS EBS EBS
EC2에 부착한 EBS는 네트워크를 통해 데이터를 주고 받는다.
EC2 EC2EC2 EBS EBS EBS
EBS도 일종의 컴퓨터 위에서 돌아가는 어플리케이션이므로 장애가 날 수 있다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
HBase(HDFS)마스터는 HA구성을 해놓았음 Master Master
Backup
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
매우(x100)중용한 데이터를 저장하므로 EBS에 물려놓음 Master Master
Backup
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master Backup
EBS에 장애가 났는데…
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master Backup
EBS에 장애가 났는데…
자신이 죽은지도 모르고 계속 살아 있는 척을 함
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master Backup
결국 시스템 전체 장애
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master Backup
결국 시스템 전체 장애
실시간 검색 1위!
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Master Master Backup
오픈소스는 AWS환경이 고려 되어 있지 않을 수 있다.
결국 시스템 전체 장애
EBS를 최대한 사용하지 않는 것도 방법이다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
HBase(HDFS)에서는 데이터를 세번 복제하여 여러 노드에 저장한다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
처음에는 모든 노드에 EBS를 달았지만 여러가지 문제가 있었다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
그렇다고 모두 instance store를 사용하기에는 불안하다.
http://techblog.netflix.com/2011/04/lessons-netflix-learned-from-aws-outage.html
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
HDFS multiple-rack 설정을 통해 데이터 복제 정책을 정할 수 있다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
Ephemeral을 사용하는 rack에 2벌을 저장하고 EBS를 사용하는 rack에 1벌을 저장하도록 설정
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
어떤 데이터든 EBS에는 최소한 한 벌이 저장되게 된다.
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
EC2
어떤 데이터든 EBS에는 최소한 한 벌이 저장되게 된다.
EBS를 굳이 사용하지 않아도 되는 환경이면 쓰지 말자.
정리하기
• EBS는 좋다.
• EC2는 공유 네트워크를 통해 EBS에 접근한다.
• EBS의 성능은 외부와 통신 트래픽에 영향을 받을 수 있다.
• EBS의 성능을 확보하기 위한 방법들은 많다.
• EC2가 멀쩡하더라도 EBS는 문제가 있을 수 있다.
• EBS를 최대한 사용하지 않는 것도 방법이다.
–Ben Parker
‘With great power comes great responsibility.’
–Ben Parker
‘With great power comes great responsibility.’
ELB와 EBS는 정말 강력합니다.
–Ben Parker
‘With great power comes great responsibility.’
ELB와 EBS는 정말 강력합니다.
그 만큼 잘못쓰면 안됩니다.
Thank You