문제 발생
현재 진행중인 프로젝트는 컨테이너와 nginx를 이용해서 blue-green 배포를 구현하였고,
이는 github의 특정 branch에 merge가 발생하면 일련의 과정을 거쳐 새로운 컨테이너가 생성됨과 동시에 기존 컨테이너가 내려가는 방식이다.
이렇게 무중단 배포가 실행되는 과정에서 서버의 CPU 이용률이 치솟으며 서버가 정상적으로 동작하지 않는 상황이 발생하였다.
더 문제되었던 것은 모든 무중단 배포 과정에서 이런 문제가 발생하는 것이 아니라, 규칙성없이 이런 문제가 발생하는 발생한다는 사실이었다.
원인
EC2 재부팅시에도 여전히 CPU 사용률이 치솟아 서버가 정상 동작하지 못하는 상황이 발생했는데,
이 부분과 서버 컨테이너가 두 개 동작하고 있다는 점, 그리고 EC2 재부팅시 아주 짧은 시간동안에는 서버가 정상 동작한다는 점에서 원인을 유추하였다.
다른 곳에서 문제가 생겨 CPU 사용률이 치솟았고 그 결과 컨테이너가 제대로 종료되지 않았다고 생각하고 있었지만,
- 컨테이너 종료시에 문제가 발생하여 제대로 종료되지 않는 문제가 발생하였고, 두 컨테이너가 한 번에 동일한 포트를 차지하려다 보니 계속해서 경합이 발생하여 그 결과로 CPU 사용률이 치솟는 문제가 발생한 상황
- 종료하는 과정 자체에서 문제가 발생했다는 상황
이 두 상황중에서 문제가 발생한 것이라 생각하게 되었다.
컨테이너가 제대로 닫히지 않은 문제는 정확히 파악할 수 없었지만, 아마 리소스를 정리하는 과정에서 꼬인 부분이 있을거라 짐작하고 있다.
해결
결국 컨테이너만 제대로 종료시키면 해결되는 문제라 판단하였다.
무중단 배포를 위한 스크립트에 기존 컨테이너의 종료를 계속해서 체크하고, 종료되지 않았으면 컨테이너 종료 작업을 추가로 실행하는 로직을 추가하였다.
# 이전 컨테이너 종료
echo "> $BEFORE_COMPOSE_COLOR down start"
while docker ps -q --filter name=nanal-${BEFORE_COMPOSE_COLOR} | grep -q .; do
docker-compose -p nanal-${BEFORE_COMPOSE_COLOR} -f docker-compose.${BEFORE_COMPOSE_COLOR}.yml down
sleep 1
done
그리고 이렇게 설정했음에도 문제가 될 경우를 대비해 EC2 재부팅시 컨테이너가 자동으로 올라오지 않도록 컨테이너 재시작 조건을 always에서 default값으로 변경해주었다.
위와 같이 설정했음에도 문제는 계속해서 발생하였다.
그러던 중 가용 메모리에 대해 확인하게 되었고 약 70 mb 만이 가용한 것을 확인하게 되었다. 이후 swap 설정을 통해 가용 메모리를 늘려주게 되었고 해당 문제는 해결되었다.
'Infra' 카테고리의 다른 글
[AWS] codedeploy 에서 S3에 위치하는 파일 경로 설정 방법. (0) | 2022.08.24 |
---|