Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 확인
- tomcat
- deploy
- 몽고DB
- restart
- 무중단
- no space left
- NoSQL
- web
- LocalRepository
- 톰캣
- httpd
- GRACEFUL
- 진행
- Pipeline
- troubleshooting
- 배포
- aggregation
- apache
- was
- 인덱스
- slowQuery
- longQuery
- 테크블로그
- 성능
- MongoDB
- projection
- kill
- 상태
- maven
Archives
- Today
- Total
boogie의 가벼운 개발 일기
[Infra] Apache-Tomcat 무중단 배포 구성기 (1) 구상 및 실패 사례 본문
회사 위키로 공유했던 내용 옮겨적기 ..
어떤 방식으로 할 것인가
- 무중단 배포의 방식
- Rolling
- Blue/Green
- Canary
- 일부 User(ex. 내부 테스터)만 새로운 버전으로 접근되도록 한 상태에서 모든 검증을 마친 뒤 전 사용자 대상으로 오픈한다
- 별도의 인프라를 구성하여 라우터에서 분기하거나, (모든 요청이 client에서 시작된다면) 내부 테스터의 hosts 파일을 수정하여 일부 사용자만 신규 버전에 접근하도록 할 수 있다
- 기존의 인프라 구성
- 물리 서버 한대에 아파치 httpd (web서버) 1대 + 톰캣 WAS 2대가 배포되어 있으며 2대 모두 트래픽을 받고 있음
- 어떤 방식을 적용할 것인가 (+ 기준)
- 운영중인 서비스들에 적용하는것이기 때문에 제 1 전제는 서비스의 퍼포먼스에 영향을 주지 않을 것
- 2대가 분산하여 트래픽을 받다가 한대로만 받는것은 물리서버 1대가 감당할수있는 트래픽의 총량이 줄어들게 된다.
- 무중단 배포만을 위해서 인프라 세팅을 변경하는것을 최소로 한다
- blue-green의 빠른 롤백은 큰 장점이나, 재배포에 걸리는 시간이 길지 않은 환경에서는 큰 차이가 없을 수 있음
- 어차피 Blue-Green도 배포 시점에는 두개의 WAS가 기동되어야 한다. WEB-WAS가 물리적으로 한 서버에 있는 우리 구조상, 별 이득이 없다. 어차피 서버 한대에서 2개의 WAS를 운용할수 있는 spec으로 유지해야 한다면. 성능을 최대한 쓰자
- == Rolling 방식을 적용하기로 함
- 운영중인 서비스들에 적용하는것이기 때문에 제 1 전제는 서비스의 퍼포먼스에 영향을 주지 않을 것
첫번째 시도 // Tomcat Parallel Deploy 기능 적용해보기
- 배포파일이 변경되면 자동으로 신규 버전을 띄우고 context switching 해주는 방식
- 처리중인 요청까지는 구버전에서 처리. 새로 들어오는 요청은 신버전에서 처리
- 더이상 구버전에서 처리중인 요청이 없다면 구버전을 자동으로 삭제
- 신규버전의 서버가 아직 마음의 준비가 안됐는데 요청이 인입된다
- 신버전이 배포된 후 서비스에 투입되는 시점을 조절(delay를 주거나 warm-up 처리를) 할 수 없다
- 신규 Context 배포 시점에 이슈 발생
두번째 시도 // 방화벽 차단 또는 Port Forwarding
- 아파치 오류 로그 대량 발생 + broken pipe + 응답지연
- retry로 인한 부하/지연 발생
- 아파치 --> 톰캣 사이의 연결이 끊어지면서,
- 아파치에서 대량의 오류로그가 발생하고
- 톰캣에서는 클라이언트가 요청을 중단한 것으로 감지, broken pipe error (=ClientAbortException)이 발생
- 아파치에서는 worker에서 오류 응답을 주더라도 설정된 시간동안은 worker의 상태를 전환하지 않음 (일시적 오류로 인해 worker가 fail-over되지 않도록)
- 아파치에서 응답을 받지 못하는경우는 더 한데, 요청 타임아웃까지 대기한 후 실패한 요청으로 처리한다.
- 실패한 요청들을 (retry_interval 설정에 따른)일정시간 이후 재시도 하게된다.
- 결국 (타임아웃동안 대기 OR 처리하다가실패,일정시간후 재시도) 함으로 인해서 응답지연이 발생하고, 일시에 대량의 요청을 받는 살아있는 worker도 부하를 받는다
- 기존 톰캣 down시점에 이슈 발생
나머지는 다음 글로..!!!
'Server, Infra' 카테고리의 다른 글
[Infra] Apache-Tomcat 무중단 배포 구성기 - (2) 최종 적용 방식 및 warm-up (0) | 2021.06.29 |
---|---|
[Infra] 빌드 배포 서버에서 user home 디렉토리 용량 가득 참 (0) | 2021.06.29 |