웹사이트 검색

Linux에서 Nginx를 HTTP 로드 밸런서로 사용하는 방법


중복성을 위해 여러 애플리케이션 서버를 설정할 때 로드 밸런싱은 들어오는 서비스 요청이나 네트워크 트래픽을 백엔드 서버 그룹 전체에 효율적으로 배포하기 위해 일반적으로 사용되는 메커니즘입니다.

로드 밸런싱에는 중복성을 통한 애플리케이션 가용성 증가, 안정성 및 확장성 증가(트래픽이 증가하면 더 많은 서버를 혼합하여 추가할 수 있음) 등 여러 가지 이점이 있습니다. 또한 향상된 애플리케이션 성능과 기타 여러 이점을 제공합니다.

권장 읽기: Nginx 웹 서버의 보안, 강화 및 성능 향상을 위한 궁극적인 가이드

Nginx는 효율적인 HTTP 로드 밸런서로 배포되어 들어오는 네트워크 트래픽과 작업 부하를 애플리케이션 서버 그룹에 분산할 수 있으며, 각 경우에 선택한 서버에서 응답을 반환합니다. 적절한 클라이언트.

Nginx에서 지원하는 부하 분산 방법은 다음과 같습니다.

  • 라운드 로빈 – 라운드 로빈 방식으로 애플리케이션 서버에 요청을 배포합니다. 메소드를 지정하지 않은 경우 기본적으로 사용되며,
  • 최소 연결 – 사용량이 적은 서버(활성 연결 수가 가장 적은 서버)에 다음 요청을 할당합니다.
  • ip-hash – 해시 함수를 사용하여 클라이언트의 IP 주소를 기반으로 다음 요청에 어떤 서버를 선택해야 하는지 결정합니다. 이 방법을 사용하면 세션 지속성이 가능합니다(클라이언트를 특정 애플리케이션 서버에 연결).

게다가 서버 가중치를 사용하여 고급 수준에서 Nginx 로드 밸런싱 알고리즘에 영향을 미칠 수 있습니다. Nginx는 오류와 함께 응답이 실패하는 경우 서버를 실패로 표시하는 상태 확인도 지원합니다(구성 가능한 시간 동안 기본값은 10초). 한동안 후속 수신 요청을 위한 서버입니다.

이 실무 가이드에서는 NginxHTTP 부하 분산기로 사용하여 각각 동일한 애플리케이션의 인스턴스가 있는 두 서버 간에 들어오는 클라이언트 요청을 분산하는 방법을 보여줍니다.

테스트 목적으로 각 애플리케이션 인스턴스에는 실행 중인 서버를 나타내기 위해 사용자 인터페이스에 레이블이 지정됩니다.

테스트 환경 설정

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

각 애플리케이션 서버에서 각 애플리케이션 인스턴스는 tecmintapp.lan 도메인을 사용하여 액세스하도록 구성됩니다. 이것이 완전히 등록된 도메인이라고 가정하면 DNS 설정에 다음을 추가합니다.

A Record   		@   		192.168.58.7

이 레코드는 도메인이 어디로 연결되어야 하는지 클라이언트 요청에 알려줍니다(이 경우에는 부하 분산기(192.168.58.7)). DNS A 레코드는 IPv4 값만 허용합니다. 또는 다음 항목을 사용하여 클라이언트 시스템의 /etc/hosts 파일을 테스트 목적으로 사용할 수도 있습니다.

192.168.58.7  	tecmintapp.lan

Linux에서 Nginx 로드 밸런싱 설정

Nginx 로드 밸런싱을 설정하기 전에 표시된 대로 배포용 기본 패키지 관리자를 사용하여 서버에 Nginx를 설치해야 합니다.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

다음으로, /etc/nginx/conf.d/loadbalancer.conf라는 서버 블록 파일을 생성합니다(원하는 이름 지정).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

그런 다음 다음 구성을 복사하여 붙여넣습니다. 로드 밸런싱 방법이 정의되지 않았으므로 이 구성은 기본적으로 라운드 로빈으로 설정됩니다.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

위 구성에서 proxy_pass 지시문(이 경우 / 위치 내부에 지정되어야 함)은 다음을 사용하여 참조되는 HTTP 프록시 서버에 요청을 전달하는 데 사용됩니다. upstream 지시문(서버 그룹을 정의하는 데 사용됨)의 단어 backend. 또한 요청은 가중치가 부여된 라운드 로빈 균형 조정 메커니즘을 사용하여 서버 간에 분산됩니다.

최소한의 연결 메커니즘을 사용하려면 다음 구성을 사용하십시오.

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

ip_hash 세션 지속성 메커니즘을 활성화하려면 다음을 사용하세요.

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

서버 가중치를 사용하여 부하 분산 결정에 영향을 미칠 수도 있습니다. 다음 구성을 사용하면 클라이언트로부터 6개의 요청이 있는 경우 애플리케이션 서버 192.168.58.5에 4개의 요청이 할당되고 2개는 192.168.58.8로 이동됩니다.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

파일을 저장하고 종료하십시오. 그런 다음 최근 변경 사항을 추가한 후 다음 명령을 실행하여 Nginx 구성 구조가 올바른지 확인하세요.

sudo nginx -t

구성이 정상이면 Nginx 서비스를 다시 시작하고 활성화하여 변경 사항을 적용합니다.

sudo systemctl restart nginx
sudo systemctl enable nginx

Linux에서 Nginx 로드 밸런싱 테스트

Nginx 부하 분산을 테스트하려면 웹 브라우저를 열고 다음 주소를 사용하여 탐색하세요.

http://tecmintapp.lan

웹사이트 인터페이스가 로드되면 로드된 애플리케이션 인스턴스를 기록해 둡니다. 그런 다음 계속해서 페이지를 새로 고치세요. 어떤 시점에서는 로드 밸런싱을 나타내는 두 번째 서버에서 앱이 로드되어야 합니다.

Linux에서 Nginx를 HTTP 부하 분산기로 설정하는 방법을 배웠습니다. 아래 피드백 양식을 통해 이 가이드, 특히 Nginx를 로드 밸런서로 사용하는 것에 대한 귀하의 생각을 알고 싶습니다. 자세한 내용은 Nginx를 HTTP 부하 분산 장치로 사용하는 방법에 대한 Nginx 설명서를 참조하세요.