Graceful shutdown? kill -9를 통해 프로세스를 죽일 때와 달리kill -15 프로세스를 죽일 때에는 정상적으로 프로세스가 종료되어야한다. 때문에 모든 요청이 처리될 때까지 기다린 다음에 종료되어야한다. 때문에 이러한 옵션을 위해서는 application yaml 파일의 server.shutdown 옵션을 수정하면 된다. 위와 같이 기본 옵션인 immediate는 요청을 처리하다가도 정상 종료를 받으면 즉시 모든 요청까지 종료시킨다. 이는 오토스케일링되는 환경에서 파드의 변경 발생 시 요청이 중단되는 현상을 발생시킬 수 있으므로 활성화해도록 하자 server.shutdown = graceful 설정 시 앞으로 들어오는 요청을 중지시키고 남은 요청을 모두 처리한 후에 프로세스를 종료시킨다.
ALB, NLB idle timeout, keepalive 차이점, 문제상황 및 해결방법 ALB, NLB 차이점 ALB는 http header까지 모두 확인하여 트래픽을 전달하고, NLB는 4계층 까지의 정보만 확인 후 전달한다. 이때 ALB에서는 이러한 트래픽을 Proxying 하게 되는데, 때문에 서버에서 tcpdump 시 반대쪽 IP가 alb의 IP로 찍히게 된다.(EC2에서 client로 전달되는 패킷은 DSR 방식으로 처리된다.) NLB에서는 client의 ip가 그대로 전달되며 proxying하지 않고 패킷 포워더와 같이 작동한다. client → NLB(80 listening) → ec2(8080 listening)일 때, NLB는 트래픽의 포트만을 변경하여 패킷을 ec2로 전송한다. 이때문..
기존 terraform 스크립트에서 aws_ami를 검색한 다음 사용하도록 구성하였는데, 오랜만에 apply하니까 이러한 메시지가 떴다. The architecture 'x86_64' of the specified instance type does not match the architecture 'arm64' of the specified AMI원인은 위 에러 메시지가 무색하게도 단순히 검색되는 이미지가 없을 때 발생하는데, 이럴 때에는 그냥 terraform docs에서 제공하는 형식으로 aws_ami data 블록을 구성하자 data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubun..
로드밸런싱을 수행하는 유형에는 대표적으로 2가지의 구조가 존재하는데, DSR(Direct Server Return)과 Inline 이다. DSR(Direct Server Return) Client에서 Server로 전송하는 요청은 LoadBalancer를 통해 들어가고, 응답은 서버에서 LoadBalancer를 거치지 않고 전송한다. Inline inline 구조는 서버로의 요청과 서버에서의 응답 패킷이 모두 로드밸런서를 거친다.
TCP keepalive tcp에서 수립된 세션은 원래 요청이 처리된 이후 일반적으로 끊기게되지만, server와 client 측 중 하나라도 keepalive를 사용하게 된다면 요청을 수행한 이후에도 세션을 종료하지 않고 소켓을 유지시킨다. 참고로 이러한 keepalive는 nginx, apache에서 적용하던 http keepalive와 linux kernel parameter 값으로 설정할 수 있는 TCP Parameter가 존재한다. TCP keepalive parameter TCP keepalive parameter에는 다음과 같이 총 3개가 존재한다. net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_..