목차

고성능 부하분산을 위한 엔진엑스 활용 방법-1 (HTTP)

고성능 부하분산 필요성

오늘날 인터넷 서비스의 사용자 경험 향상을 위해 높은 성능과 가용성이 요구됩니다. 대규모 애플리케이션을 처리하려면 지능적인 부하분산 장치가 필요합니다. 엔진엑스는 사용자의 요청에 따라 효율적으로 부하를 분산해주는 솔루션을 제공합니다.

HTTP 부하분산 구현

엔진엑스는 upstream 블록과 http 모듈을 이용해 HTTP 서버 간에 부하를 분산할 수 있습니다. 예를 들면,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
upstream backend { 
  server 127.0.0.10:80         weight=1;
  server master.example.com:80 weight=2;
  server backup.example.com:80 backup;
} 
server { 
  location / { 
    proxy_pass http://backend;
  } 
}

위의 엔진엑스 설정은 80 포트를 사용하는 HTTP 서버 두 대로 부하를 분산합니다. 설정한 프라이머리 서버 두 대에 문제가 발생해 연결이 불가능하면 백업으로 지정한 서버를 사용합니다. 지정한 weight 매개변수 값에 따라 두 번째 서버는 첫 번째 서버보다 두 배 많은 요청을 받습니다. 참고로 weight의 기본값은 1이며 생략할 수 있습니다.

부하분산 알고리즘

엔진엑스는 다양한 부하분산 알고리즘을 지원합니다. 가중치를 적용할 수 있는 매개변수를 사용해 분산 알고리즘에 가중치를 적용할 수 있습니다. 엔진엑스 플러스는 특정 서버로의 연결 수를 제한하는 고급 매개변수와 가동된 지 얼마 안 된 서버로는 연결이 천천히 늘어가게 하는 고급 매개변수를 제공합니다.

서버 상태 확인

엔진엑스는 두 가지 서버 상태 확인 방법을 제공합니다. 오픈 소스 버전의 엔진엑스는 패시브 방식의 서버 상태 확인 기능을 제공하며, 엔진엑스 플러스에서는 액티브 방식을 사용할 수 있습니다. 액티브 방식은 로드 밸런서 장비가 스스로 업스트림 서버와 주기적으로 연결을 시도해 서버 응답에 문제가 없는지 확인하는 방법입니다. 패시브 방식은 사용자의 요청을 로드 밸런서가 받은 시점에 업스트림 서버와의 연결이나 응답을 확인하는 방법입니다.