Tomcat & nginx 운영 · 업스트림 부하분산과 장애 격리 · 퀴즈
퀴즈: 업스트림 부하분산
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
nginx 오픈소스판의 `max_fails=3 fail_timeout=30s` 설정이 의미하는 것은?
- 30초마다 헬스체크 URL 을 호출해 3번 실패하면 제외한다
- 실제 요청 처리 중 30초 안에 3번 실패하면 그 서버를 30초 동안 제외한다
- 3초 안에 응답하지 않으면 30번 재시도한다
- 서버당 최대 3개의 커넥션만 허용한다
업스트림 Keep-Alive 를 켤 때 반드시 함께 설정해야 하는 세 가지는?
- keepalive, proxy_read_timeout, gzip
- keepalive, proxy_http_version 1.1, proxy_set_header Connection ""
- keepalive, ip_hash, least_conn
- keepalive, client_max_body_size, proxy_buffering
업스트림 Keep-Alive 를 설정하지 않아 매 요청마다 커넥션이 생성될 때 장기적으로 나타나는 증상은?
- 커넥션 객체가 회수되지 않고 쌓여 프록시 메모리가 계속 늘어난다
- 매번 새 연결로 압축 협상을 다시 해 gzip 압축률이 떨어진다
- 연결 수립·종료가 매번 기록되어 액세스 로그가 빠르게 커진다
- TIME_WAIT 소켓이 쌓여 로컬 포트가 고갈되고 간헐적으로 연결이 실패한다
`ip_hash` 를 쓰는 시스템에서 백엔드 서버를 한 대 추가했을 때 주의할 점은?
- 서버 수가 바뀌면 ip_hash 지시자가 문법 오류로 처리되어 reload 가 실패한다
- 새 서버에는 가중치가 없어 기존 서버들의 weight 설정이 초기화된다
- 업스트림 구성이 바뀌면서 SSL 세션 캐시가 비워져 재협상이 몰린다
- 해시 대상이 바뀌어 일부 클라이언트가 다른 서버로 가고, 메모리 세션이면 로그아웃된다
요청 처리 시간 편차가 큰 서비스(빠른 조회와 느린 리포트가 섞임)에서 라운드로빈보다 `least_conn` 이 나은 이유는?
- 요청 건수를 서버마다 정확히 균등하게 나눠 주기 때문에
- 처리 중인 연결이 적은 쪽으로 보내므로, 느린 요청이 몰린 서버를 피하기 때문에
- 각 서버의 CPU 사용률을 재서 여유 있는 쪽으로 보내기 때문에
- 서버별 평균 응답 시간을 캐시해 두고 빠른 쪽을 고르기 때문에
부하분산 환경에서 액세스 로그에 `$upstream_addr` 를 반드시 남겨야 하는 이유는?
- 로그 크기를 줄이기 위해
- gzip 압축률을 계산하기 위해
- SSL 인증서를 검증하기 위해
- 특정 백엔드에서만 발생하는 오류를 식별하기 위해