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개 이상이라는 점만 다릅니다.)