NGINX 로드 밸런서 Failover 알아보기
이 포스트에서는 NGINX 로드 밸런서 로 구성하였을 때 여러 대 서버를 사용할 경우 한 개가 장애가 발생해도 나머지 업스트림 서버로 서비스 되는지 알아보겠습니다.
목차
1. 왜 서버를 여러 대로 구성하게되는가?
1-1 Scale-down을 사용하기 위한 NGINX 로드 밸런서 구성
2. 서버를 여러 대로 구성했을 때 한 대가 장애가 발생해도 작동되는지 알아보자
웹 기술 영역에서는 애플리케이션의 가용성, 확장성 및 성능을 보장하는 것이 무엇보다 중요합니다. 여기서 로드 밸런싱, 특히 L4(Layer 4) 및 L7(Layer 7) 로드 밸런싱이 시작됩니다. NGINX 및 NGINX Plus는 로드 밸런싱뿐만 아니라 애플리케이션의 원활한 장애 조치를 보장할 수 있는 강력한 도구로 등장했습니다.
1. 왜 서버를 여러 대로 구성하게되는가?
서버를 사용하면서 사용자가 많아질 경우 서버에 트래픽이 증가하여 서버에 많은 부하를 가하게 되는데요.많은 트래픽을 받게되면 서버는 장애를 일으키게 됩니다. 많은 사용자를 받을 수 있는 방법은 없을까요?

많은 사용자들을 받기 위해서는 서버를 확장시키게 되는데 이 방법은 크게 2가지가 있습니다.
Scale-up, Scale-down이 있는데요 Scale-up의 경우는 해당 서버의 성능을 업그레이드 하는 것입니다.
하지만 Scale-up의 경우, 1대의 서버의 성능을 업그레이드 하는 것이기 때문에 한계가 있습니다.
Scale-down의 경우, 서버를 1가 아니라 여러 대의 서버를 사용하게 됩니다. 같은 서버를 여러 대를
추가하는 것만으로 트래픽을 추가적으로 감당할 수 있기 때문에 계속해서 확장 가능합니다.
1-1 Scale-down을 사용하기 위한 NGINX 로드 밸런서 구성

Scale-down의 방식을 사용하기 위해 로드 밸런서를 사용합니다.
로드 밸런서는 NGINX에 서버를 여러 대를 연결하여 하나의 서버를 사용하는 게 아니라 여러 개의 서버를 사용할 수 있고 사용자에게 로드 밸런서 알고리즘에 따라 하나의 서버를 접속하게 됩니다.
NGINX 로드 밸런서 의 알고리즘은 종류가 여러개가 있는데요. 그중 기본설정인 Round-Robin 방식을 사용하였습니다. 라운드 로빈 방식은 사용자에게 받은 요청을 로드 밸런서의 대상 서버에 순서대로 할당하는 방식입니다.
이로 인해 균등하게 트래픽이 분산됩니다.
2. NGINX 로드 밸런서 를 통해 장애 시나리오 재현
테스트를 위해 로드 밸런서 설정을 간단하게 해주었습니다. 같은 가상환경에서 NGINX와 WAS서버를 구동하였기에 upsteam서버를 127.0.0.1로 했고 포트만 다르게 지정하였습니다.
upsteam 그룹에 로드 밸런서 알고리즘을 지정해주지 않는다면 기본설정인 라운드 로빈 방식으로
지정됩니다.

$ systemctl restart nginx.service
NGINX가 로드 밸런서 설정이 되있어야하고 업스트림에 사용 할 서버는 node express로 진행하였습니다.
const express = require('express');
const app = express();
app.use('/', (req,res)=>{
res.send("<h1>node server</h1> n <h3>test server 111</h3>")
// WAS 서버 구분을 위해 사이트에 표시할 구문을 다 다르게 작성해주었습니다.
console.log(req.header["x-forwarded-for"] || req.connection.remoteAddress)
});
app.listen(3000, () => {
console.log('open 3000 port')
})
//동일한 가상환경에서 진행하였기 때문에 포트번호를 각각 3000, 3001포트로 지정하였습니다.
업스트림 서버 그룹에 지정된 서버 3개가 아닌 2개를 작동시켜 인위적인 장애를 발생시켜보도록 하겠습니다.

업스트림 서버 그룹 3개의 서버중 3000번 포트와 3001번 포트의 서버만 실행하였습니다.


위 사진과 같이 NGINX 주소로 들어가게 된다면 test server 1, 2가 나오게 되는데 현재 장애가 발생하지 않은 서버가 test server 1,2가 작성되어 있기 때문에 장애가 발생한 test server 3은 나오지 않게 됩니다.
아래 뉴스레터를 구독하고 NGINX의 최신 정보들을 빠르게 전달받아보세요.
댓글을 달려면 로그인해야 합니다.