Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
서비스 무중단 마이그레이션
KT에서 Amazon으로
애드투페이퍼 방신우
작성자 소개
방신우 Sin-Woo Bang
이메일 : sinwoobang@add2paper.com
Github : https://github.com/sinwoobang/
사이트 : http://sinwoobang.me/
내용 소개
- 중규모 아키텍처(1)
이전 경험을 공유합니다.
- 서비스 무중단 이전 경험을 공유합니다.
- 백엔드 어플리케이션, DB, 캐시, DNS 작업 등이 있습니다.
- 인력 한계로 AWS SaaS(ex. RDS,...
애드투페이퍼
- 대학생 대상 무료 출력 제공
- 누적 회원 70만명
- 전국 132개 대학교 사용
- 약 5,000곳 PC 클라이언트 설치
- 학생 : 모바일 앱 / 모바일 웹 / PC 웹 / PC
클라이언트
- 광고주 : PC 웹
- 현장 관리자 : PC 웹
- 사내 관리자 : PC 웹
플랫폼
기존 서버 스택(~2017.8)
- 2013년 글에서 큰 틀에서 동일
- KT 유클라우드 약 5년 이용
- 핵심
- AP 서버(Python/Django)
- 캐시 서버(Memcached)
- 비동기 워커 서버(Redis...
- Amazon Web Services(AWS)
- AP 서버(EC2)
- 캐시 서버(EC2)
- 비동기 워커 서버(EC2)
- 크론 서버(EC2)
- DB 서버(EC2, Master-Slave)
이외에도 DB 프록시 ...
1. AWS에 서비스를 띄운다.
2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
검토 : 무엇을 해야하는가
1. AWS에 서비스를 띄운다.
a. 무중단으로 이전하려면
b. 유클라우드와 동일하게 서비스를 띄워야한다.
검토 : 무엇을 해야하는가
1. AWS에 서비스를 띄운다.
a. 무중단으로 이전하려면
b. 유클라우드와 동일하게 서비스를 띄워야한다.
c. 동일하게 띄우려면
i. AP를 띄워야한다.
검토 : 무엇을 해야하는가
1. AWS에 서비스를 띄운다.
a. 무중단으로 이전하려면
b. 유클라우드와 동일하게 서비스를 띄워야한다.
c. 동일하게 띄우려면
i. AP를 띄워야한다.
ii. AP를 띄우려면
1. DB
2. 캐시
3. 비동기 워커
...
AWS에 서비스를 띄운다 : 1차 전략
유클라우드 AWS
AP
DB
비동기 워커
AP
캐시
크론
비동기 워커
크론
AWS에 서비스를 띄운다 : 1차 전략
1. DB : 유클라우드 연결
2. 캐시 : 이전 완료까지 제거
a. 고려했던 것들
i. AWS에 새로운 캐시 서버 생성
1. 새로운 값은 새로운 캐시 서버에 SET
2. 한계 :...
AWS에 서비스를 띄운다 : 1차 전략
1. DB : 유클라우드 연결
a. 기존에 내부 IP로 통신
b. AWS와 유클라우드 간 외부 통신 필요
c. 유클라우드 MySQL Master 방화벽 설정 변경
i. 기존 : 외...
AWS에 서비스를 띄운다 : 1차 전략 완료
1. 1차 전략 완료
2. ELB IP로 직접 연결하여 테스트
3. AWS에서도 서비스 정상 작동(환호)
AWS에 서비스를 띄운다 : 2차 전략
유클라우드 AWS
AP
DB
비동기 워커
AP
캐시
크론
비동기 워커
크론
DB
AWS에 서비스를 띄운다 : 2차 전략
1. DB 이전 큰 그림
a. 유클라우드 MySQL Master - AWS MySQL Slave 구성
b. AWS MySQL Slave를 Master로 승격
2. 큰 그림만 마치면...
그런데 말입니다
최초 검토사항 수정 필요
1. AWS에 서비스를 띄운다.
2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
최초 검토사항 수정 필요
1. AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다.
2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
3. AWS에서 유클라우드 의존성을 걷어낸다.
최초 검토사항 수정 필요
1. (1차 전략) AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다.
2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
3. (2차 전략) AWS에서 유클라우드 의존성을 걷어낸다.
최초 검토사항 수정 필요
1. (1차 전략) AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다.
2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
a. 2차 전략을 위해서 선행 필요
3. (2차 전략) AW...
1. DNS TTL : 0으로 설정
2. 유클라우드 LB IP에서 AWS ELB로 설정
3. AWS CloudWatch : 유저 유입 확인
도메인 연결 : Route 53
2차 전략으로 돌아가서
AWS에 서비스를 띄운다 : 2차 전략
유클라우드 AWS
AP
DB
비동기 워커
AP
캐시
크론
비동기 워커
크론
DB
AWS에 서비스를 띄운다 : 2차 전략
1. DB 이전 큰 그림
a. 유클라우드 MySQL Master - AWS MySQL Slave 구성
b. AWS MySQL Slave를 Master로 승격
2. 큰 그림만 마치면...
AWS에 서비스를 띄운다 : 2차 전략
1. DB 이전 큰 그림
a. 유클라우드 MySQL Master - AWS MySQL Slave 구성
i. SSH 터널링 구성
ii. Slave 무중단 생성 : Percona Xt...
AWS에 서비스를 띄운다 : 2차 전략
1. DB 이전 큰 그림
a. 유클라우드 MySQL Master - AWS MySQL Slave 구성
i. SSH 터널링 구성
ii. Slave 무중단 생성 : Percona Xt...
1. 비동기 워커
a. KT, AWS 동시 운영 후 KT AP 트래픽이 사라지자 비동기 워커도 자동 소멸
2. 크론
a. KT, AWS 동시 운영 후 스케쥴별로 점진 이전
3. HTTPS 트래픽
a. 유클라우드 사용 시...
Q&A
1. 왜 AWS RDS, DMS를 사용하지 않았나요?
a. MySQL 5.5 GTID 미지원
b. MySQL 5.5 binlog_format=STATEMENT 상태
c. Percona XtraBackup은 디렉토...
감사합니다
내용이 많아 PPT에 못 담은 내용이 많습니다.
문의 : sinwoobang@add2paper.com
Upcoming SlideShare
Loading in …5
×

서비스 무중단 마이그레이션 : KT에서 Amazon으로

3,144 views

Published on

애드투페이퍼 2017년 8월

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

서비스 무중단 마이그레이션 : KT에서 Amazon으로

  1. 1. 서비스 무중단 마이그레이션 KT에서 Amazon으로 애드투페이퍼 방신우
  2. 2. 작성자 소개 방신우 Sin-Woo Bang 이메일 : sinwoobang@add2paper.com Github : https://github.com/sinwoobang/ 사이트 : http://sinwoobang.me/
  3. 3. 내용 소개 - 중규모 아키텍처(1) 이전 경험을 공유합니다. - 서비스 무중단 이전 경험을 공유합니다. - 백엔드 어플리케이션, DB, 캐시, DNS 작업 등이 있습니다. - 인력 한계로 AWS SaaS(ex. RDS, ElastiCache)를 일부 사용하지 않았습니다. (1) 대규모까진 아니라 편의로 붙인 이름입니다. 동시 접속자 4,000명 미만을 기준 잡았습니다.
  4. 4. 애드투페이퍼 - 대학생 대상 무료 출력 제공 - 누적 회원 70만명 - 전국 132개 대학교 사용 - 약 5,000곳 PC 클라이언트 설치
  5. 5. - 학생 : 모바일 앱 / 모바일 웹 / PC 웹 / PC 클라이언트 - 광고주 : PC 웹 - 현장 관리자 : PC 웹 - 사내 관리자 : PC 웹 플랫폼
  6. 6. 기존 서버 스택(~2017.8) - 2013년 글에서 큰 틀에서 동일 - KT 유클라우드 약 5년 이용 - 핵심 - AP 서버(Python/Django) - 캐시 서버(Memcached) - 비동기 워커 서버(Redis) - 크론 서버(Crontab, Python/Django) - DB 서버(MySQL 5.5, Master-Slave)
  7. 7. - Amazon Web Services(AWS) - AP 서버(EC2) - 캐시 서버(EC2) - 비동기 워커 서버(EC2) - 크론 서버(EC2) - DB 서버(EC2, Master-Slave) 이외에도 DB 프록시 서버 등이 있지만 주제에 집중하기 위해 적지 않았습니다. 현재 스택
  8. 8. 1. AWS에 서비스를 띄운다. 2. 유클라우드에 연결된 도메인을 AWS로 연결한다. 검토 : 무엇을 해야하는가
  9. 9. 1. AWS에 서비스를 띄운다. a. 무중단으로 이전하려면 b. 유클라우드와 동일하게 서비스를 띄워야한다. 검토 : 무엇을 해야하는가
  10. 10. 1. AWS에 서비스를 띄운다. a. 무중단으로 이전하려면 b. 유클라우드와 동일하게 서비스를 띄워야한다. c. 동일하게 띄우려면 i. AP를 띄워야한다. 검토 : 무엇을 해야하는가
  11. 11. 1. AWS에 서비스를 띄운다. a. 무중단으로 이전하려면 b. 유클라우드와 동일하게 서비스를 띄워야한다. c. 동일하게 띄우려면 i. AP를 띄워야한다. ii. AP를 띄우려면 1. DB 2. 캐시 3. 비동기 워커 4. 크론 검토 : 무엇을 해야하는가
  12. 12. AWS에 서비스를 띄운다 : 1차 전략 유클라우드 AWS AP DB 비동기 워커 AP 캐시 크론 비동기 워커 크론
  13. 13. AWS에 서비스를 띄운다 : 1차 전략 1. DB : 유클라우드 연결 2. 캐시 : 이전 완료까지 제거 a. 고려했던 것들 i. AWS에 새로운 캐시 서버 생성 1. 새로운 값은 새로운 캐시 서버에 SET 2. 한계 : 완벽 이전까지 며칠을 기다려야 하는 문제 3. 서비스가 캐시 의존적이지도 않았다. ii. repcached : 공식 홈페이지 다수 링크가 404. 신뢰 불가. b. 캐시 제외했을때 100ms 지연 발생. 잠깐이면 감당할만하다고 판단. c. 캐시값이 없으면 DB를 바라보도록 의존성 제거. 3. 비동기 워커는 유클라우드, AWS 동시 운영해도 무관 4. 크론도 스케쥴 분리하여 유클라우드, AWS 동시 운영
  14. 14. AWS에 서비스를 띄운다 : 1차 전략 1. DB : 유클라우드 연결 a. 기존에 내부 IP로 통신 b. AWS와 유클라우드 간 외부 통신 필요 c. 유클라우드 MySQL Master 방화벽 설정 변경 i. 기존 : 외부 IP 통신 불허 ii. 변경 : AWS AP IP만 통신 허용 d. 유클라우드 MySQL Master - AWS AP 통신 : SSH 터널링 구성 i. 고려했던 것들 1. 도메인 기반 SSL 사용 a. 편리 b. 한계 : 인증서가 서비스 단일 도메인만 존재
  15. 15. AWS에 서비스를 띄운다 : 1차 전략 완료 1. 1차 전략 완료 2. ELB IP로 직접 연결하여 테스트 3. AWS에서도 서비스 정상 작동(환호)
  16. 16. AWS에 서비스를 띄운다 : 2차 전략 유클라우드 AWS AP DB 비동기 워커 AP 캐시 크론 비동기 워커 크론 DB
  17. 17. AWS에 서비스를 띄운다 : 2차 전략 1. DB 이전 큰 그림 a. 유클라우드 MySQL Master - AWS MySQL Slave 구성 b. AWS MySQL Slave를 Master로 승격 2. 큰 그림만 마치면 이전 95% 완료
  18. 18. 그런데 말입니다
  19. 19. 최초 검토사항 수정 필요 1. AWS에 서비스를 띄운다. 2. 유클라우드에 연결된 도메인을 AWS로 연결한다.
  20. 20. 최초 검토사항 수정 필요 1. AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다. 2. 유클라우드에 연결된 도메인을 AWS로 연결한다. 3. AWS에서 유클라우드 의존성을 걷어낸다.
  21. 21. 최초 검토사항 수정 필요 1. (1차 전략) AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다. 2. 유클라우드에 연결된 도메인을 AWS로 연결한다. 3. (2차 전략) AWS에서 유클라우드 의존성을 걷어낸다.
  22. 22. 최초 검토사항 수정 필요 1. (1차 전략) AWS에 유클라우드 의존적인(ex. DB) 서비스를 띄운다. 2. 유클라우드에 연결된 도메인을 AWS로 연결한다. a. 2차 전략을 위해서 선행 필요 3. (2차 전략) AWS에서 유클라우드 의존성을 걷어낸다.
  23. 23. 1. DNS TTL : 0으로 설정 2. 유클라우드 LB IP에서 AWS ELB로 설정 3. AWS CloudWatch : 유저 유입 확인 도메인 연결 : Route 53
  24. 24. 2차 전략으로 돌아가서
  25. 25. AWS에 서비스를 띄운다 : 2차 전략 유클라우드 AWS AP DB 비동기 워커 AP 캐시 크론 비동기 워커 크론 DB
  26. 26. AWS에 서비스를 띄운다 : 2차 전략 1. DB 이전 큰 그림 a. 유클라우드 MySQL Master - AWS MySQL Slave 구성 b. AWS MySQL Slave를 Master로 승격 2. 큰 그림만 마치면 이전 95% 완료
  27. 27. AWS에 서비스를 띄운다 : 2차 전략 1. DB 이전 큰 그림 a. 유클라우드 MySQL Master - AWS MySQL Slave 구성 i. SSH 터널링 구성 ii. Slave 무중단 생성 : Percona XtraBackup https://goo.gl/6hB1mn b. 유클라우드 AP - AWS MySQL Slave간 SSH 터널링 구성 c. AWS MySQL Slave를 Master로 승격 i. Slave) STOP SLAVE d. AP DB IP를 Slave IP로 변경 후 배포
  28. 28. AWS에 서비스를 띄운다 : 2차 전략 1. DB 이전 큰 그림 a. 유클라우드 MySQL Master - AWS MySQL Slave 구성 i. SSH 터널링 구성 ii. Slave 무중단 생성 : Percona XtraBackup https://goo.gl/6hB1mn b. 유클라우드 AP - AWS MySQL Slave간 SSH 터널링 구성 c. AWS MySQL Slave를 Master로 승격 i. Slave) STOP SLAVE d. AP DB IP를 Slave IP로 변경 후 배포 2. 서비스 정상 작동 확인
  29. 29. 1. 비동기 워커 a. KT, AWS 동시 운영 후 KT AP 트래픽이 사라지자 비동기 워커도 자동 소멸 2. 크론 a. KT, AWS 동시 운영 후 스케쥴별로 점진 이전 3. HTTPS 트래픽 a. 유클라우드 사용 시절 HTTP, HTTPS 로드밸런서를 따로 운영 i. 유클라우드 서비스 초기 HTTPS 로드밸런서 미지원 ii. HTTP 트래픽을 먼저 옮기고 HTTPS는 차후 이전하였음. 4. 고정 IP 대응 a. 일부 클라이언트(학교) 방화벽 정책 : IP 화이트리스트 b. 고정 IP는 구입 불가 c. 해당 IP에서 운영중인 서버를 프록시 서버로 전환 d. 프록시 서버는 AWS 서버 HTTP 호출 ETC
  30. 30. Q&A 1. 왜 AWS RDS, DMS를 사용하지 않았나요? a. MySQL 5.5 GTID 미지원 b. MySQL 5.5 binlog_format=STATEMENT 상태 c. Percona XtraBackup은 디렉토리 직접 접근 필요하나 RDS는 SSH 접속 미지원
  31. 31. 감사합니다 내용이 많아 PPT에 못 담은 내용이 많습니다. 문의 : sinwoobang@add2paper.com

×