SharedIT | 묻고 답하기(AMP)

Nginx Load Balancer 프록시 서버 운영 문의

안녕하세요 우분투 서버에 Nginx를 통해 프록시 서버로 LoadBalancing 설정하여 사용하고 있습니다.

해당 서버를 A라 지칭 하겠습니다.

A서버에서 프록시 설정해놓은 도메인 서버가 접속은 되는데 엄청 느려서 

A서버로 ping을 로컬-로컬 환경에서 보냈는데 2000~ 3000ms로 지연이 엄청 발생 했습니다.


그래서 방화벽 및 스위치 모니터링 진행했고 트래픽 상 전혀 지장 없는 수준인 건 확인 했으며, 

해당 A 서버와 같은 구성으로 방화벽,스위치에 연결되어 있는 B,C 서버를 ping 로컬-로컬 테스트 했는데 

지연이 전혀 없이 정상 통신을 하는 상황이었습니다.


A서버는 단순히 프록시 서버 역할에서 내부 서버 간 포트를 통해 LoadBalancing만 해주고 있습니다.

더 이해가 안가는 건 A서버에서 nginx 비활성화하면 ping 정상 통신 수준으로 돌아 옵니다.

nginx 서비스 자체에서 리소스 차지하거나 느려지게 하는 원인이 될만한 게 있을까요?


Tags : 태그가 없습니다.

4개의 답변이 있습니다.

inside07
  0 추천 | 4달 전

일정 시간 이후 2일 모니터링 했는데 현재 변경 설정 없이 정상화 되어 원인 파악이 쉽지 않은 상황이지만

단순히 서버 리소스 모니터링 뿐만 아니라

 ngix에 대한 상세 설정이나 모니터링 방식 공유 주셔서 감사합니다!

wansoo
  0 추천 | 4달 전

proxy server라는 것은 대신해 주는 서버가 되겠는데...

실제 서비스하는 서버와 클라이언트 사이에서 중재하는 서버가 되겠는데요.


간단하게 생각해 본다면... 클라이언트가 서버에 직접 접속해서 서비스를 받는 것이 더 빠르죠.

그렇지만, 서버가 과부하가 걸린다거나 서버 성능이 느릴 경우라면... 중간에서 대신 처리해 주는 서버가 도와 줌으로 인해 클라이언트가 원하는 결과를 서버를 통해 서비스 받는 것 보다 더 빨리 결과를 얻을 수 있게 해 주게 되는 것인데요.

proxy 서버가 자주 요청하는 데이터를 캐쉬해서 가지고 있다거나 등을 통해 처리 성능을 높여 주는 역할을 하게 되는데...

캐시되어 있지 않은 자주 찾지 않는 자료를 요청할 경우라면, 프락시 서버에서 찾아 보았다가 다시 서버로 부터 자료를 받아와서 다시 클라이언트에게 전달해야 해서 처리 성능이 더 늦어 지는 결과를 가져 올 수 있기는 하지만...

프락시 서버에 캐시되어 있지 않은 자료를 요청해서 프락시 서버에 의해 지연되는 시간이 발생하더라도 클라이언트가 느끼는 체감 지연 시간이 미미하기 때문에 느리게 느껴지지 않는 것이 일반적인데...

프락시 서버를 통해서 접속하는 시간이 많이 느리다면 프락시 서버 설정에 문제가 있기 때문이 되겠죠.

캐시 되는 저장 영역이 많이 느린 장치로 설정된 것은 아닌지, 접속하는 클라이언트에 대한 제한이 있지 않은지, 서버와의 통신에 제한이 가해 지지 않은지 등의 프락시 서버 설정을 다시 한번 하나 하나 점검해 볼 필요가 있을 것 같네요.

topkslee
  0 추천 | 4달 전

nginx 리소스 문제는 다양한 이유가 있었을 수 있을것 같아요.

nginx를 비활성화 하면 정상으로 돌아온다는 말은 과도한 트래픽을 밝생시키는 것 같습니다.

1. 우선 nginx debug를 해보세요.

access_log, error_log 등을 설정하여 로그를 보고 판단하셔야할것 같습니다.

nginx.conf 파일에 access_log와 error_log 찾아서 경로 맨 뒤에 debug 붙이시면 됩니다.

예) error_log / var/log/nginx/error.log debug

2. CPU, Memory 사용량을 체크해보시구요. (top, vmsate 등 활용)

어떤 프로세스가 많이 점유하고 있는지 체크해보시면 좋을것 같아요.

3. 네트워크 트래픽 분석기로 통신 트래픽도 도움 될것 같습니다. 

앵그리파파
  0 추천 | 4달 전

비슷한 경험이 있어 체크사항을 공유하니, 해결하는데 참고하세요.

NginX에서 프록시 역할을 하는 서버에서 성능 문제가 발생하는 경우 체계적으로 확인해봐야 할 부분이 있습니다. 단계별로 접근해서 특정 구성이나 리소스가 영향을 주는지 모니터링하고 필요한 조치를 취해주는 것이 중요합니다.

  • Nginx 구성, 특히 프록싱 및 로드 밸런싱과 관련된 설정이 환경에 맞게 잘 구성되어 있는지 다시 한번 체크해 보세요.

  • Nginx 오류 로그와 액세스 로그에서 오류 메시지나 비정상적인 패턴이 있는지 확인해 보세요. 지연 원인에 대한 포인트를 발견할 수 있습니다.

  • Nginx가 실행되는 동안 서버 A의 리소스 사용량, 특히 CPU, 메모리, 디스트 I/O를 자세히 들여다 보세요. 'top' 또는 'htop' 로 Nginx가 과도한 리소스를 소비하는지 모니터링 하면 도움이 될 것입니다.

  • Nginx 작업자 프로세스 수를 확인해 보세요. 숫자가 너무 높으면 리소스 경합이 발생할 수 있습니다. Nginx 구성에 Worker_processes 를 적절하게 조정해보세요. (예) Worker_processe auto;

  • Nginx가 연결 및 시간 초과를 어떻게 처리하는지 방법에 대한 부분도 검토가 필요합니다. 애플리케이션에 따라 'keepalive_timeout' 및 'proxy_read_timeout' 와 같은 설정을 조절하면 됩니다.
    (예)  keepalive_timeout 15s;
           proxy_read_timeout 60s;

  • 버퍼링으로 인해 특히 클라이언트의 경우 지연이 발생할 수 있으므로 프록시 버퍼링 설정도 조정하세요.  (예) proxy_buffering off;

  • 서버 A의 보안 SW나 방화벽이 성능에 영향을 미치는지도 확인이 필요해 보입니다. 일부 보안 솔루션은 프록싱을 방해하거나 지연을 초래하는 경우도 있습니다.

 외에도 네트워크 관련 이슈로 패킷이 손실되거나 정체는 없는지, 사용하지 않는 모듈은 불필요한 리소스를 소비할  있으니 필요한 Nginx 모듈만 활성화가 되어 있는지, Nginx 설정에 SSL/TLS가 포함되어 영향을 주는지 등 


이렇게 나열하다 보니 확인하고 모니터링 해야할 일이 많은데, 그래도 원인 파악하고 문제해결 하는 방법에 있어 나름대로 체계를 갖춰놓으면 나중에 비슷한 일이 발생했을 때 시행착오나 어려움이 반감되지 않을까 생각해 봅니다.