티스토리 뷰

반응형

 

 

지난 글에서 Jenkins와 Github Webhooks를 이용하여 배포 자동화하는 방법에 대해 알아 보았다.

 

이번 글에서는 지금까지 구현한 프로젝트 내용과 Nginx를 이용하여 무중단 배포가 이루어 질 수 있도록

로드밸런싱을 설정하는 방법에 대해서 알아보자.

 

 


1. VM 인스턴스 추가

Rolling 배포를 구현하기 위해 서버를 2개이상 두어야 할 필요가 있다.

요구 성능에 따라서 여러개의 서버를 둘 수도 있지만, 서울 region에 서버를 4개를 초과하여 만들 수 없기 때문에 편의상 2개의 인스턴스만 이용해 보도록 하자.

 

우선 GCP에서, 이전에 생성해 둔 워커 인스턴스와 같은 설정으로 VM 인스턴스를 하나 더 추가하자.

그리고 이전 글에서 했던것 처럼 인스턴스에 SSH로 접속하여 lsofjava를 설치해 주자.

<noMenu/>
sudo yum -y install lsof
sudo yum -y install java-11-openjdk-devel.x86_64

그 다음 Jenkins 관리 -> 시스템설정에서 새로운 SSH Server를 추가해 주어야 한다.

마지막으로 Item의 구성에서 빌드 후 조치에 해당 서버를 추가해 주자.

빌드 후 조치 -> Add Server로 서버 추가하면 된다.

 

그럼 아래와 같이 항목이 추가되는데, Name에서 시스템 설정에 새로 추가한 서버를 선택하고 Transfers의 하위 항목을 기존의 서버의 내용과 같게 입력해 주면 된다.

 

Exec command 에서는 무중단 배포가 이루어 지도록 하기 위해서, 기존의 스크립트에 sleep 30을 추가해 주자.

(서비스 마다 최적의 방법이 있겠지만 배포에 30초를 넘기지 않는다고 가정하고 간단하게 sleep 30으로 설정한 것)

 

 


2. Nginx 인스턴스 만들기

GCP에서 Nginx를 위한 새로운 인스턴스를 추가해 보자.

인스턴스 이름은 nginx-instance-1 로 설정했다.

머신유형은 medium으로 설정했다.

부팅 디스크는 CentOS

마지막으로 방화벽 2개에 체크해 주자.

 

 


3. Nginx 설치 및 실행

2에서 생성한 인스턴스에 아래의 스크립트를 통해서 Nginx를 설치하고 실행시켜 보자.

<noMenu/>
sudo yum -y install nginx
sudo systemctl start nginx

 

이후 Nginx 외부 IP로 접속하여 아래와 같은 창이 뜬다면 Nginx가 잘 실행되고 있다는 뜻이다.

 

 

 


4. 로드밸런싱 설정

먼저 Nginx 인스턴스에서 아래의 스크립트를 통해 nginx.conf 설정파일에 접근하고 'i'를 눌러 insert 모드로 설정해 보자.

<noMenu/>
sudo vi /etc/nginx/nginx.conf

 

그다음 스크롤을 내려 include와 server사이에 (아래 그림의 빨간 사각형 위치) upstream 변수를 추가해 주어야 한다.

upstream 변수는 server 설정에서 Nginx가 받아들인 요청을 어떤 서버로 흘려보내 줄 것인지 결정할 때 사용된다.

아래와 같은 스크립트를 IP와 PORT를 지정하여 입력해 주자. (upstream 이름은 app으로 설정)

IP는 이전에 만들어둔 서버의 내부 IP, PORT는 8080으로 지정해 주었다.

<noMenu/>
upstream app {
  server {worker-instance_1의_내부ip}:8080 weight=100 max_fails=3 fail_timeout=3s;
  server {worker-instance_2의_내부ip}:8080 weight=100 max_fails=3 fail_timeout=3s;
}

 

그 다음 server 스코프에 proxy와 관련된 설정들도 추가해 주어야 한다.

(proxy_pass는 이전에 설정한 upstream 이름인 app으로 설정해야 한다.)

<noMenu/>
location / {
  proxy_pass http://app;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;
}

 

잘 입력했다면 아래와 같이 스크립트를 설정했을 것이다.

Esc, shift+;, wq, Enter 를 차례대로 입력하여 변경된 내용을 저장해 주자.

 

이후 변경된 설정파일을 적용하기 위해서는 Nginx를 reload시켜야 한다.

<noMenu/>
sudo systemctl reload nginx

 

하지만 위와 같은 과정을 거쳐도 Nginx인스턴스 IP를 통해 API를 호출해도 로드밸런싱이 되지 않는 것을 볼 수 있다.

아래의 스크립트를 통해 오류로그를 확인 가능하므로 확인해 보자.

<noMenu/>
sudo tail -f /var/log/nginx/error.log

 

 

아래의 스크립트를 입력하여 오류 해결할 수 있다.

(오류내용을 검색하면 그 이유를 알 수 있으므로 왜 오류가 생긴지에 대해서는 언급하지 않고 넘어가겠다.)

<noMenu/>
sudo setsebool -P httpd_can_network_connect on

 

 

이제 Nginx 인스턴스의 IP를 통해 API를 호출해 보면 정상적으로 결과를 반환하는것을 확인해 볼 수 있다...!

 

 

 

 

다음 글에서는 무중단 배포가 잘 이루어 지는지 부하테스트를 통해 확인해 보는 방법에 대해서 알아보자.

 

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함