← 글 목록

notes

로드밸런서 사용 가이드

로드밸런서 생성·백엔드 연결·헬스체크 설정을 정리한 사용 가이드.


1. 로드밸런서

로드 밸런서는 요청이 들어오는 트래픽을 각 서버에 알맞게 분산해주는 네트워크 기술이자 특정 서버를 말합니다.

2. 사용법

  • EC2 인스턴스 2개를 생성합니다.
  • EC2 인스턴스에 원격 접속 후, 아래 명령어를 입력합니다.
sudo apt-get install -y nginx

  • 해당 IP를 브라우저에 입력 시 아래와 같은 화면이 나오면 성공입니다.

80 포트를 개방해주지 않았다면 브라우저에서 아래와 같은 화면을 확인할 수 있습니다.

  • 터미널에 다음 코드를 입력합니다. (Nginx의 index.html 파일 수정)
sudo vi /var/www/html/index.nginx-debian.html

  • Welcome to nginx!를 Server1로 각각 수정합니다.

i # 입력 상태로 변경

# <h1></h1> 내의 Welcome to nginx!를 server01로 문구 변경

esc + : + wq # 해당 값이 적용

  • 다른 인스턴스에서도 동일한 과정을 진행합니다.

    (Welcome to nginx!를 Server2로 각각 수정합니다.)

  • 로드밸런서 → Create load balancer → Application Load Balancer를 클릭합니다.
  • 이름을 작성하고, 리스너는 HTTP를 사용합니다.

  • 가용 영역을 모두(2개 이상) 선택합니다.

  • 보안 그룹은 새로 생성해도 되고, 기존의 보안 그룹을 사용해 됩니다. (단, 80번 포트 개방 필요)

  • 대상 그룹을 새롭게 생성합니다. (Create target group)
  • 이름을 기입한 후, 인스턴스를 선택합니다.

  • HTTP 프로토콜을 선택합니다.

  • 상대 경로는 (특정 경로가 없다면) 그대로 설정합니다. 고급 상태 검사 설정도 기본 값으로 설정합니다.
  • 상태 검사는 해당 로드 밸런서가 EC2 인스턴스의 상태를 체크하는 것입니다.

    해당 인스턴스에 문제가 있다면 다른 인스턴스로 요청을 보냅니다.

  • 고급 상태 검사 설정은 우리가 상태 검사를 할 때 값을 설정하는 부분입니다.

  • Next를 클릭합니다.
  • 마지막으로 우리가 생성한 인스턴스를 대상 그룹에 추가합니다.
  • 마지막으로 검토를 하고 생성을 합니다.
  • 생성한 타겟 그룹을 선택합니다.

  • 로드밸런서가 Active 상태가 되면, 해당 로드밸런서 클릭 후 DNS 값을 복사합니다.

  • 복사한 값을 브라우저에 입력 후 실행합니다.
  • Ctrl + Shift + r을 입력해 캐시 삭제 후 새로고침 해줍니다.
  • 위와 같이 요청에 따라 값이 변경되면 로드 밸런스를 통해 분산 처리를 하는 걸 확인할 수 있습니다.

3. Nginx

엔진엑스(Nginx)는 동시접속 처리에 특화된 웹 서버 프로그램입니다.

Igor Sysoev라는 러시아 개발자가 개발했습니다.

4. 사용 방법

[참고] 다음 가이드는 로드밸런서를 통해 연결된 EC2에서 각각 진행해야 합니다.

[참고] Nest js 프로젝트를 EC2를 통해 3000번 포트로 실행시킨 이후의 과정입니다. 보안을 위해, 인바운드에서 3000포트는 개방하지 않아야 합니다.

로드밸런서 가이드를 이행한 경우, nginx 설치는 생략이 가능합니다.

  • EC2 인스턴스에 접속 후, 터미널에 다음 명령어를 입력합니다. (nginx 설치)
sudo apt-get install -y nginx

  • 해당 IP를 브라우저에 입력 시, 아래와 같은 화면이 나오면 성공입니다.

[참고] 80 포트를 개방해주지 않으면, 사이트에 연결되지 않습니다.

  • 다음 경로에 접근합니다.
/etc/nginx/sites-available

  • 터미널에 다음 코드를 입력합니다. (connection 문서 생성)
sudo vi connection

  • connection 문서에 다음을 입력 후, esc + : + wq 를 통해 저장합니다.
server {
        listen 80;
        listen [::]:80;
        server_name _;
        
        location / {
                proxy_pass http://127.0.0.1:3000;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
        }       
}

  • 터미널에 다음 코드를 입력합니다. (sites-available 폴더의 default 문서 제거)
sudo rm -rf default

  • 터미널에 다음 코드를 입력합니다. (sites-enabled 폴더의 default 문서 제거)
cd ..
cd sites-enabled/
sudo rm -rf default

  • 터미널에 다음 코드를 입력합니다.
sudo ln -sf /etc/nginx/sites-available/connection /etc/nginx/sites-enabled/

  • 터미널에 다음 코드를 입력합니다.
sudo nginx -s reload

  • EC2 인스턴스의 퍼블릭 IPv4 주소를 주소창에 입력합니다.

    아래와 같이 서버(3000포트)로 연결되면 성공입니다.

5. HTTP 보안 서버 적용

EC2 HTTPS 설정 가이드와 동일합니다. (대상 그룹에 추가되는 인스턴스가 2개 이상이라는 점만 다릅니다.)