SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
서버 장애 예방 및 대응 방법 공유
!
2014.4.30 프라이머 개발자 모임
!
애드투페이퍼
이경찬
!
http://add2paper.github.io/
http://leekchan.com
1) 애드투페이퍼 서비스 간단 소개
!
!
애드투페이퍼는?
!
전국 73개 대학교
985대 제휴 PC
대학생 회원 30만명
누적 무료프린팅 2000만장
애드투페이퍼는?
!
전국 73개 대학교
985개 제휴 PC
대학생 회원 30만명
누적 무료프린팅 2000만장
2013년 1월 모바일앱 출시
!
매일 아침 8:30분 전체 회원에게 2장 충전 알림 푸시 발송
2014년 4월 29일 기준 23,094,992 장 충전 발생
Stack Overview…
!
1. 로드밸런서
2. 어플리케이션 서버 3대
(4vCore 4GB | Ubuntu 11.04 | Gunicorn, Django, Supervisor)
3. DB 2대
(4vCore 4GB | CentOS 5.4 | MySQL Master-Slave Replication 구성)
4. 캐시 + 워커 서버 1대
(4vCore 8GB | Ubuntu 11.04 | Memcached, Celery, Redis, Supervisor)
!
!
“매일 아침 8:30에 전체 회원 대상 푸시를 발송하기 때문에 해당 시간에
동시에 다수의 사용자가 접속 —> AP 3대 사용”
AP
LB
AP AP
MySQL - Master MySQL - Slave
Cache + Worker
2) 모니터링 방법 소개
!
!
!
서버 상태 모니터링 - Newrelic
!
- 서비스 초반에는 Datadog를 사용했지만, 현재는 Newrelic으로 지속적으로 교체중.
!
!
!
어플리케이션 모니터링 - Newrelic
!
- 웹서비스 응답 속도 모니터링 및 Transaction 단위 퍼포먼스 측정 가능
!
!
Newrelic 서비스 사용 시연
!
!
!
Celery, Cron 등 Log 모니터링 및 자동 Alert - Logentries
!
- Celery, Cron 등에서 생상되는 Log를 실시간으로 Archiving 하다가 특정 패턴의 문자열

이 발견되면 이메일로 Alert을 준다.
- Celery, Cron 이상시 즉시 원인 분석 및 대응 가능.
!
!
Logentries 서비스 사용 시연
!
!
!
웹서비스 상태 모니터링 및 자동 Alert - Pingdom
!
- 지정한 IP, Domain, DNS Record 등을 실시간으로 모니터링 해준다.
- IP, Domain, DNS 를 모두 모니터링 하면 장애 상황에서 즉시 원인 파악이 가능하다.
!
!
Pingdom 서비스 사용 시연
!
!
3) 장애 유형 및 대응 방법 공유
!
!
!
상황 1. MySQL Master 장애
!
- 예방법이 있을까?
- 예방이 안된 상태에서 장애가 났다면

어떻게 대응하는게 좋을까?
!
AP
LB
AP AP
MySQL - Master MySQL - Slave
Cache + Worker
!
예방법 - MySQL Master 이중화
!
# 예시 : Galera Cluster for Mysql
!
!
!
!
!
!
!
!
!
- 모든 MySQL Node에 write - read 가능.
- MySQL node들 앞단에 LB를 놓으면 어플리케이션에서는 LB만 바라보면 된다.
!
!
MySQL Master 이중화를 하지 못했는데, 장애가 난다면…
!
“MySQL Slave를 Master로 승격시키고 Slave를 새로 붙이는 것이 가장 쉽고 빠르다.”
!
# 절차
1. MySQL Slave 서버 접속 후 STOP SLAVE; 쿼리 실행 후 Master로 사용. 

(바로 서비스 재개 가능)
2. 서비스 중에 MySQL Slave를 Online으로 붙일 수 있다. (Percona XtraBackup 사용)
http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/
setting_up_replication.html
!
!
!
!
상황 2. 갑자기 외부 서비스 연동이 제대로 동작하지 않는다.
(Facebook API, 문자 서비스 API 등)
!
- 해당 서비스에 장애가 생긴 것일까?
-> 해당 서비스 장애가 빈번하다면 백업 API를 사용하여 대비한다. (문자 발송 API 등)
-> 애드투페이퍼 서비스에서는 문자 발송 업체를 2곳 사용중이다. 첫번째 발송 업체의 API

를 먼저 호출하고 (Timeout 1초), Timeout이 나거나 실패 응답이 왔을시에는 백업 발송

업체의 API를 호출. -> 기존에는 회원가입 인증 문자 관련 전화 CS가 종종 있었지만 이중

화후 발생하지 않음.
!
- 해당 서비스에 이상이 없는데 갑자기 코드가 동작하지 않는다면?

-> DNS 서버를 체크하자!

-> DNS 서버를 따로 지정해놓지 않은 경우 갑자기 Host를 찾지 못하는 경우가 생긴다.
!
상황 3. 갑자기 MySQL 서버가 응답하지 않는다.
!
- 로그 서버 등 대량의 데이터를 저장하는 서버에서 binlog 저장 주기가 길 경우 하드디스크가

binlog로 꽉 차서 MySQL이 정상동작 하지 않는 상황이 생길 수 있다.



- Newrelic 등 모니터링 서비스를 이용하여 상시 모니터링 하고 자동으로 Alert을 받을 수

있도록 설정하는 것이 좋다.


- 모니터링 서비스가 없는 상태에서 장애가 발생한 서버에 접속했을 때는 “df -h” 명령을 먼저

사용하여 디스크 용량 상태를 먼저 확인하는 것이 유용하다.
!
상황 4. 서비스가 갑자기 접속이 되지 않는다.
!
- 앞서 공유한 pingdom 등의 웹서비스 모니터링 서비스를 이용하여 모니터링 할 경우,

웹서버, DNS 서버 등 여러 장애 포인트 중 어떤 부분이 문제인지 빠르게 확인할 수 있다.
!
- 국내 유명 DNS 서비스들도 가끔 DDoS 로 인해 응답 불능 상태에 빠지는 경우가 있다.

-> 되도록이면 AWS Route 53 등 안정적인 DNS 서비스를 사용하는 것을 권장.
!
- 국내 DNS 서비스의 경우에는 DDoS 방어 등을 목적으로 해외 트래픽을 차단하는 경우가

있어 해외 대상 서비스를 하는 경우 국내 DNS를 사용하면 해외에서 접속이 되지 않는 경우

가 생길 수 있다.
!
상황 5. MySQL Slave 서버의 Replication이 멈췄을때.
!
# 절차
1. Slave 서버에서 “SHOW SLAVE STATUS;” 쿼리를 실행하여 Last_Error를 확인한다.
!
2-1. 만약 무시해도 되는 오류라면 “STOP SLAVE;” 쿼리 실행 후 “SET GLOBAL
SQL_SLAVE_SKIP_COUNTER = 1;” 쿼리를 통해 skip할 쿼리 개수를 지정후
“START SLAVE;” 쿼리를 통해 replication을 재시작 한다.
!
2-2. 무시할 수 없는 오류라면 앞서 언급한 XtraBackup을 통해 Slave를 다시 생성한다.

!
!
!
상황 6. 반드시 데이터 분석용 쿼리는 Slave 서버에만 보내도록 한다.
!
- 실수로 작성한 쿼리가 Master에서 실행될 경우 심각한 장애를 초래할 수 있다.
!
- 직접 MySQL 접속 권한을 주는 대신 “내부 관리자용 웹 어플리케이션”에서 쿼리를 실행

하도록 하면 코드 상에서 사전 검증이 가능하다.
- 모든 쿼리는 Transaction 상에서 동작하도록 하고, 실행 완료 후 반드시 Rollback 한다.
- 쿼리 안에 DDL이 포함되어 있으면 실행을 거부한다.
- 유저 정보 table 등 개인 정보 유출 우려가 있는 table명이 쿼리 상에 포함되어 있으면

실행을 거부한다.
- 반드시 Timeout을 지정하여 실수로 실행한 쿼리가 무한정 실행되는 것을 방지한다.
!
감사합니다.
!
!

Más contenido relacionado

La actualidad más candente

[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈Amazon Web Services Korea
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Youngtaek Oh
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)Jongwon Han
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종PgDay.Seoul
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기Juhong Park
 
자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료태준 문
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 ChefOpen Source Consulting
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0Minwoo Kim
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들Brian Hong
 
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Opennaru, inc.
 
04.웹시스템 이해 하기
04.웹시스템 이해 하기04.웹시스템 이해 하기
04.웹시스템 이해 하기Opennaru, inc.
 
가용성을 고려한 웹 서비스 인프라 설계
가용성을 고려한 웹 서비스 인프라 설계가용성을 고려한 웹 서비스 인프라 설계
가용성을 고려한 웹 서비스 인프라 설계Herren
 

La actualidad más candente (20)

[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)
 
03.Ansible 소개
03.Ansible 소개03.Ansible 소개
03.Ansible 소개
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
Redis on AWS
Redis on AWSRedis on AWS
Redis on AWS
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기
[Line Developer Day 2014] 라인 글로벌 게임 서버 개발하기
 
자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료
 
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
 
Cloudera Impala 1.0
Cloudera Impala 1.0Cloudera Impala 1.0
Cloudera Impala 1.0
 
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
 
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
Final 07.컨테이너 환경에서 모니터링 이슈와 해결 방안
 
04.웹시스템 이해 하기
04.웹시스템 이해 하기04.웹시스템 이해 하기
04.웹시스템 이해 하기
 
가용성을 고려한 웹 서비스 인프라 설계
가용성을 고려한 웹 서비스 인프라 설계가용성을 고려한 웹 서비스 인프라 설계
가용성을 고려한 웹 서비스 인프라 설계
 

Destacado

장애 관리 방안
장애 관리 방안장애 관리 방안
장애 관리 방안Junho Lee
 
NSO Introduction
NSO IntroductionNSO Introduction
NSO IntroductionJunho Lee
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자Minyoung Jeong
 
[IBM Korea 김상훈] 통합유지보수 서비스 소개
[IBM Korea 김상훈] 통합유지보수 서비스 소개[IBM Korea 김상훈] 통합유지보수 서비스 소개
[IBM Korea 김상훈] 통합유지보수 서비스 소개(Joe), Sanghun Kim
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB
 
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표Amazon Web Services Korea
 
디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론Baro Kim
 
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나 Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나 Amazon Web Services Korea
 
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
데이터베이스 정규화
데이터베이스 정규화데이터베이스 정규화
데이터베이스 정규화Hoyoung Jung
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은ETRIBE_STG
 
데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은ETRIBE_STG
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은ETRIBE_STG
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스Seunghwa Song
 

Destacado (20)

장애 관리 방안
장애 관리 방안장애 관리 방안
장애 관리 방안
 
NSO Introduction
NSO IntroductionNSO Introduction
NSO Introduction
 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
 
[IBM Korea 김상훈] 통합유지보수 서비스 소개
[IBM Korea 김상훈] 통합유지보수 서비스 소개[IBM Korea 김상훈] 통합유지보수 서비스 소개
[IBM Korea 김상훈] 통합유지보수 서비스 소개
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic Concepts
 
Jmeter
JmeterJmeter
Jmeter
 
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
스타트업과 개발자를 위한 AWS 클라우드 태권 세미나 : VCNC 사례 발표
 
Tutorial olap4j
Tutorial olap4jTutorial olap4j
Tutorial olap4j
 
디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론디지털 인문학 데이터베이스 개론
디지털 인문학 데이터베이스 개론
 
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
게임을 위한 DynamoDB 사례 및 팁 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나 Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나
Amazon RDS 서비스 활용하기 - 신규 기능 중심으로 (윤석찬) :: AWS 월간 웨비나
 
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudFront로 동적 컨텐츠를 전송하는 네가지 이유 - 김일호 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
데이터베이스 정규화
데이터베이스 정규화데이터베이스 정규화
데이터베이스 정규화
 
Dynamodb 삽질기
Dynamodb 삽질기Dynamodb 삽질기
Dynamodb 삽질기
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은
 
데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 

Similar a 2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유

600.Troubleshooting Patterns
600.Troubleshooting Patterns600.Troubleshooting Patterns
600.Troubleshooting PatternsOpennaru, inc.
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개rockplace
 
TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다Daesung Park
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infraJe Hun Kim
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영NAVER D2
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service ArichitectureDaeMyung Kang
 
개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축정해 이
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live세준 김
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구kidoki
 
MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)OracleMySQL
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03Changyol BAEK
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infraHwanseok Park
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례Taehyun Kim
 

Similar a 2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유 (20)

600.Troubleshooting Patterns
600.Troubleshooting Patterns600.Troubleshooting Patterns
600.Troubleshooting Patterns
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개
 
TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다TechTalk - 서버를 해킹 당했습니다
TechTalk - 서버를 해킹 당했습니다
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infra
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
주키퍼
주키퍼주키퍼
주키퍼
 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service Arichitecture
 
개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구
 
MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)MySQL Performance Tuning (In Korean)
MySQL Performance Tuning (In Korean)
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례
 

2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유

  • 1. 서버 장애 예방 및 대응 방법 공유 ! 2014.4.30 프라이머 개발자 모임 ! 애드투페이퍼 이경찬 ! http://add2paper.github.io/ http://leekchan.com
  • 3. 애드투페이퍼는? ! 전국 73개 대학교 985대 제휴 PC 대학생 회원 30만명 누적 무료프린팅 2000만장
  • 4. 애드투페이퍼는? ! 전국 73개 대학교 985개 제휴 PC 대학생 회원 30만명 누적 무료프린팅 2000만장
  • 5. 2013년 1월 모바일앱 출시 ! 매일 아침 8:30분 전체 회원에게 2장 충전 알림 푸시 발송 2014년 4월 29일 기준 23,094,992 장 충전 발생
  • 6. Stack Overview… ! 1. 로드밸런서 2. 어플리케이션 서버 3대 (4vCore 4GB | Ubuntu 11.04 | Gunicorn, Django, Supervisor) 3. DB 2대 (4vCore 4GB | CentOS 5.4 | MySQL Master-Slave Replication 구성) 4. 캐시 + 워커 서버 1대 (4vCore 8GB | Ubuntu 11.04 | Memcached, Celery, Redis, Supervisor) ! ! “매일 아침 8:30에 전체 회원 대상 푸시를 발송하기 때문에 해당 시간에 동시에 다수의 사용자가 접속 —> AP 3대 사용”
  • 7. AP LB AP AP MySQL - Master MySQL - Slave Cache + Worker
  • 9. ! 서버 상태 모니터링 - Newrelic ! - 서비스 초반에는 Datadog를 사용했지만, 현재는 Newrelic으로 지속적으로 교체중. ! !
  • 10. ! 어플리케이션 모니터링 - Newrelic ! - 웹서비스 응답 속도 모니터링 및 Transaction 단위 퍼포먼스 측정 가능 ! !
  • 12. ! Celery, Cron 등 Log 모니터링 및 자동 Alert - Logentries ! - Celery, Cron 등에서 생상되는 Log를 실시간으로 Archiving 하다가 특정 패턴의 문자열
 이 발견되면 이메일로 Alert을 준다. - Celery, Cron 이상시 즉시 원인 분석 및 대응 가능. ! !
  • 14. ! 웹서비스 상태 모니터링 및 자동 Alert - Pingdom ! - 지정한 IP, Domain, DNS Record 등을 실시간으로 모니터링 해준다. - IP, Domain, DNS 를 모두 모니터링 하면 장애 상황에서 즉시 원인 파악이 가능하다. ! !
  • 16. 3) 장애 유형 및 대응 방법 공유 ! !
  • 17. ! 상황 1. MySQL Master 장애 ! - 예방법이 있을까? - 예방이 안된 상태에서 장애가 났다면
 어떻게 대응하는게 좋을까? ! AP LB AP AP MySQL - Master MySQL - Slave Cache + Worker
  • 18. ! 예방법 - MySQL Master 이중화 ! # 예시 : Galera Cluster for Mysql ! ! ! ! ! ! ! ! ! - 모든 MySQL Node에 write - read 가능. - MySQL node들 앞단에 LB를 놓으면 어플리케이션에서는 LB만 바라보면 된다. !
  • 19. ! MySQL Master 이중화를 하지 못했는데, 장애가 난다면… ! “MySQL Slave를 Master로 승격시키고 Slave를 새로 붙이는 것이 가장 쉽고 빠르다.” ! # 절차 1. MySQL Slave 서버 접속 후 STOP SLAVE; 쿼리 실행 후 Master로 사용. 
 (바로 서비스 재개 가능) 2. 서비스 중에 MySQL Slave를 Online으로 붙일 수 있다. (Percona XtraBackup 사용) http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/ setting_up_replication.html ! ! !
  • 20. ! 상황 2. 갑자기 외부 서비스 연동이 제대로 동작하지 않는다. (Facebook API, 문자 서비스 API 등) ! - 해당 서비스에 장애가 생긴 것일까? -> 해당 서비스 장애가 빈번하다면 백업 API를 사용하여 대비한다. (문자 발송 API 등) -> 애드투페이퍼 서비스에서는 문자 발송 업체를 2곳 사용중이다. 첫번째 발송 업체의 API
 를 먼저 호출하고 (Timeout 1초), Timeout이 나거나 실패 응답이 왔을시에는 백업 발송
 업체의 API를 호출. -> 기존에는 회원가입 인증 문자 관련 전화 CS가 종종 있었지만 이중
 화후 발생하지 않음. ! - 해당 서비스에 이상이 없는데 갑자기 코드가 동작하지 않는다면?
 -> DNS 서버를 체크하자!
 -> DNS 서버를 따로 지정해놓지 않은 경우 갑자기 Host를 찾지 못하는 경우가 생긴다.
  • 21. ! 상황 3. 갑자기 MySQL 서버가 응답하지 않는다. ! - 로그 서버 등 대량의 데이터를 저장하는 서버에서 binlog 저장 주기가 길 경우 하드디스크가
 binlog로 꽉 차서 MySQL이 정상동작 하지 않는 상황이 생길 수 있다.
 
 - Newrelic 등 모니터링 서비스를 이용하여 상시 모니터링 하고 자동으로 Alert을 받을 수
 있도록 설정하는 것이 좋다. 
 - 모니터링 서비스가 없는 상태에서 장애가 발생한 서버에 접속했을 때는 “df -h” 명령을 먼저
 사용하여 디스크 용량 상태를 먼저 확인하는 것이 유용하다.
  • 22. ! 상황 4. 서비스가 갑자기 접속이 되지 않는다. ! - 앞서 공유한 pingdom 등의 웹서비스 모니터링 서비스를 이용하여 모니터링 할 경우,
 웹서버, DNS 서버 등 여러 장애 포인트 중 어떤 부분이 문제인지 빠르게 확인할 수 있다. ! - 국내 유명 DNS 서비스들도 가끔 DDoS 로 인해 응답 불능 상태에 빠지는 경우가 있다.
 -> 되도록이면 AWS Route 53 등 안정적인 DNS 서비스를 사용하는 것을 권장. ! - 국내 DNS 서비스의 경우에는 DDoS 방어 등을 목적으로 해외 트래픽을 차단하는 경우가
 있어 해외 대상 서비스를 하는 경우 국내 DNS를 사용하면 해외에서 접속이 되지 않는 경우
 가 생길 수 있다.
  • 23. ! 상황 5. MySQL Slave 서버의 Replication이 멈췄을때. ! # 절차 1. Slave 서버에서 “SHOW SLAVE STATUS;” 쿼리를 실행하여 Last_Error를 확인한다.
  • 24. ! 2-1. 만약 무시해도 되는 오류라면 “STOP SLAVE;” 쿼리 실행 후 “SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;” 쿼리를 통해 skip할 쿼리 개수를 지정후 “START SLAVE;” 쿼리를 통해 replication을 재시작 한다. ! 2-2. 무시할 수 없는 오류라면 앞서 언급한 XtraBackup을 통해 Slave를 다시 생성한다.
 ! !
  • 25. ! 상황 6. 반드시 데이터 분석용 쿼리는 Slave 서버에만 보내도록 한다. ! - 실수로 작성한 쿼리가 Master에서 실행될 경우 심각한 장애를 초래할 수 있다. ! - 직접 MySQL 접속 권한을 주는 대신 “내부 관리자용 웹 어플리케이션”에서 쿼리를 실행
 하도록 하면 코드 상에서 사전 검증이 가능하다. - 모든 쿼리는 Transaction 상에서 동작하도록 하고, 실행 완료 후 반드시 Rollback 한다. - 쿼리 안에 DDL이 포함되어 있으면 실행을 거부한다. - 유저 정보 table 등 개인 정보 유출 우려가 있는 table명이 쿼리 상에 포함되어 있으면
 실행을 거부한다. - 반드시 Timeout을 지정하여 실수로 실행한 쿼리가 무한정 실행되는 것을 방지한다. !