웹사이트 검색

Nginx 로드 밸런싱을 설정하는 방법


로드 밸런싱 정보

로드 밸런싱은 수신 트래픽을 여러 가상 사설 서버 주변으로 분산시키는 유용한 메커니즘입니다. 처리 메커니즘을 여러 시스템에 할당함으로써 응용 프로그램에 중복성이 제공되어 내결함성 및 향상된 안정성을 보장합니다. 로드 밸런싱을 위한 라운드 로빈 알고리즘은 방문자를 IP 집합 중 하나로 보냅니다. 가장 기본적인 수준에서 구현하기 쉬운 라운드 로빈은 서버 응답 시간 및 방문자의 지리적 지역과 같은 미묘한 요소를 고려하지 않고 서버 로드를 분산합니다.

설정

이 튜토리얼의 단계는 사용자가 VPS에 대한 루트 권한을 가지고 있어야 합니다. 사용자 자습서에서 설정 방법을 확인할 수 있습니다.

nginx 부하 분산을 설정하기 전에 VPS에 nginx가 설치되어 있어야 합니다. apt-get으로 빠르게 설치할 수 있습니다.

sudo apt-get install nginx

업스트림 모듈

라운드 로빈 로드 밸런서를 설정하려면 nginx 업스트림 모듈을 사용해야 합니다. 구성을 nginx 설정에 통합합니다.

계속해서 웹 사이트 구성을 엽니다(예제에서는 일반 기본 가상 호스트에서 작업할 것임).

sudo nano /etc/nginx/sites-available/default

로드 밸런싱 구성을 파일에 추가해야 합니다.

먼저 다음과 같은 업스트림 모듈을 포함해야 합니다.

upstream backend  {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

그런 다음 구성에서 모듈을 추가로 참조해야 합니다.

 server {
  location / {
    proxy_pass  http://backend;
  }
}

nginx를 다시 시작합니다.

sudo service nginx restart

모든 가상 사설 서버가 있는 한 이제 로드 밸런서가 방문자를 연결된 서버에 균등하게 분배하기 시작할 것입니다.

지침

이전 섹션에서는 여러 가상 서버에 부하를 균등하게 분산하는 방법에 대해 설명했습니다. 그러나 이것이 데이터 작업에 가장 효율적인 방법이 아닐 수 있는 데는 여러 가지 이유가 있습니다. 사이트 방문자를 보다 효과적으로 안내하기 위해 사용할 수 있는 몇 가지 지침이 있습니다.

무게

사용자를 보다 정확하게 서버에 할당하기 시작하는 한 가지 방법은 특정 시스템에 특정 가중치를 할당하는 것입니다. Nginx를 사용하면 각 서버로 전달되어야 하는 트래픽의 비율을 지정하는 숫자를 할당할 수 있습니다.

서버 가중치를 포함하는 부하 분산 설정은 다음과 같습니다.

upstream backend  {
  server backend1.example.com weight=1;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;
}

기본 가중치는 1입니다. 가중치가 2이면 backend2.example은 backend1보다 2배 많은 트래픽을 보내고, backend3은 가중치가 4이면 backend2보다 2배, 백엔드보다 4배 많은 트래픽을 처리합니다. 1.

해시시

IP 해시를 통해 서버는 IP 주소에 따라 클라이언트에 응답하여 방문자가 방문할 때마다 동일한 VPS로 다시 보낼 수 있습니다(해당 서버가 다운되지 않는 한). 서버가 비활성 상태인 것으로 알려진 경우 다운된 것으로 표시해야 합니다. 다운 서버로 라우팅되어야 하는 모든 IP는 대체 서버로 지정됩니다.

아래 구성은 예를 제공합니다.

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
 }

최대 실패

기본 라운드 로빈 설정에 따라 nginx는 서버가 응답하지 않는 경우에도 가상 사설 서버로 데이터를 계속 보냅니다. 최대 실패는 설정된 시간 동안 응답하지 않는 서버를 작동하지 않도록 하여 이를 자동으로 방지할 수 있습니다.

최대 실패와 관련된 두 가지 요소는 max_fails 및 fall_timeout입니다. 최대 실패는 서버가 비활성으로 간주되기 전에 발생해야 하는 최대 연결 실패 시도 횟수를 나타냅니다.

샘플 구성은 다음과 같습니다.

upstream backend  {
  server backend1.example.com max_fails=3  fail_timeout=15s;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;

더보기

지금까지 간단한 라운드 로빈 로드 밸런싱에 대한 간략한 개요였습니다. 또한 서버 속도를 높이고 최적화하는 다른 방법이 있습니다.

  • Nginx를 Apache용 프런트 엔드 프록시로 구성하는 방법
  • Ubuntu 12.04에서 Apache로 Varnish를 설치 및 구성하는 방법
  • Ubuntu 12.04에서 Memcache를 설치하고 사용하는 방법