503 Error 해결 과정 및 HAProxy 설정 수정

김상진 ·2025년 4월 7일

Problem Solving

목록 보기
3/10

503 Error 해결 과정 및 HAProxy 설정 수정

1. 503 에러 발생

서버에서 503 에러가 발생했습니다. 이 문제를 해결하기 위해 먼저 어플리케이션 로그를 확인했는데, 특정 서버에서 상태 체크에 실패한 것을 확인할 수 있었습니다.

2. HAProxy 로그 분석

다음으로 HAProxy 로그를 확인해봤습니다. Layer7 timeout과 같은 오류 메시지가 발생했음을 알 수 있었고, 서버가 제대로 연결되지 않고 있음을 확인했습니다.

3. HAProxy 설정 파일 수정

문제의 원인을 파악한 후, HAProxy 설정 파일인 haproxy.cfg 파일을 수정했습니다. 기존 설정에서 서버 상태 체크 간격(inter)과 상태 변환 기준(rise, fall)을 적절히 조정하여, 좀 더 안정적인 상태 체크를 할 수 있도록 변경했습니다.

기존 설정:

inter 2s rise 1 fall 1

변경된 설정:

inter 4s rise 3 fall 3

설명:

  • inter 4s: 상태 체크 주기를 2초에서 4초로 늘려서 서버 상태 체크를 여유 있게 할 수 있도록 설정했습니다. 이 설정은 불안정한 상태에서 자주 체크가 이루어지지 않게 하여, 장애 발생 시 지나치게 빠르게 상태가 변경되지 않도록 합니다.
  • rise 3 fall 3: 서버가 안정적이라 판단되기 위한 성공적인 체크 횟수를 3번으로 늘렸고, 실패한 체크가 3번 연속될 때만 DOWN 상태로 처리되도록 설정했습니다. 이 설정은 일시적인 오류로 서버가 DOWN 상태로 처리되지 않도록 하여, 좀 더 안정적인 서비스 제공을 할 수 있습니다.

4. HAProxy 재시작

수정 후, HAProxy를 재시작하여 변경된 설정을 적용했습니다. 이후 503 에러가 해결되었고, 서버가 정상적으로 동작하는 것을 확인할 수 있었습니다.

재시작 명령어:

5. 주기 변경 시 장단점

장점:

  1. 과도한 상태 변화 방지:

    • 상태 체크 주기를 늘리면 서버 상태가 일시적으로 불안정하거나 장애가 발생했을 때, 지나치게 자주 상태 변경이 이루어지지 않아 불필요한 DOWN 상태로의 전환을 방지할 수 있습니다. 예를 들어, 상태가 불안정하거나 서비스가 잠깐 중단되었을 때, 너무 자주 상태를 체크하면 장애 발생 여부를 지나치게 빠르게 판단하게 되므로, 주기를 늘려 안정적인 상태 판단이 가능합니다.
  2. 리소스 절약:

    • 상태 체크를 자주 하지 않음으로써 HAProxy가 불필요한 상태 체크 요청을 줄여 시스템 리소스를 절약할 수 있습니다. 이는 서버에 부담을 덜어주고, 다른 중요한 작업을 처리하는 데 리소스를 집중할 수 있도록 합니다.
  3. 단기적인 장애로 인한 불필요한 상태 변경 방지:

    • 서버에 일시적인 장애가 발생했을 때, 체크 주기를 늘리면 한 번의 장애로 서버가 바로 다운되지 않도록 방지할 수 있습니다. 상태 체크 주기를 늘리면 잠깐의 장애로 서비스의 상태를 지나치게 자주 변경하지 않아 시스템 안정성을 높일 수 있습니다.

단점:

  1. 상태 확인 지연:

    • 상태 체크 주기를 늘리면, 서버의 상태를 확인하는 주기가 길어지기 때문에 장애 발생 시 이를 확인하고 처리하는 데 시간이 더 걸릴 수 있습니다. 즉, 장애 발생 후 상태가 DOWN으로 전환되기까지 시간이 더 걸리므로, 장애 발생에 대한 대응이 늦어질 수 있습니다.
  2. 불필요한 장애를 놓칠 수 있음:

    • 상태 체크 주기가 길어지면, 장애가 발생했을 때 상태 변환이 느려지기 때문에, 짧은 시간 동안 서비스가 다운되었을 때 이를 감지하지 못할 가능성이 있습니다.

6. 결론

이와 같이 HAProxy의 서버 상태 체크 간격 및 상태 변환 기준을 적절히 수정하여 503 에러 문제를 해결할 수 있었습니다. 이 과정에서 inter, rise, fall 값을 환경에 맞게 조정하는 것이 중요함을 알게 되었고, 이후 발생할 수 있는 서버의 불안정성에 대비할 수 있었습니다. 상태 체크 주기를 변경하는 것이 시스템의 안정성에 큰 영향을 미친다는 점을 다시 한번 느끼게 되었습니다.

또한, 주기를 변경할 때에는 장단점을 고려하여 환경에 맞는 적절한 값을 설정해야 하며, 변경 후에는 충분한 테스트를 통해 문제가 해결되었는지 확인하는 것이 중요합니다.

profile
알고리즘은 백준 허브를 통해 github에 꾸준히 올리고 있습니다.🙂

0개의 댓글