무작정 따라 해보는 배포 5
무작정 따라 해본 배포 - 무중단 배포
무작정 따라 해보는 배포 5
무중단 배포란?
왜 BLUE-GREEN이어야 할까?
이전 프로젝트에서 BLUE-GREEN 무중단 배포를 사용했기에 정확히 알고 싶어서, 책에 나와있는 방법이라..
장점
- 장점 1
단점
- 단점1
BLUE-GREEN을 위해 필요한 것은?
- (로드밸런서로의) NGINX
- 8081, 8082 포트 중 어느 서버로 요청을 전송해야 하는지 결정
- upstream을 통해 서버의 그룹을 관리 한다.
- upstream은 기본적으로 round robin 방식으로 동작하므로 특정 port로 요청을 보내도록 고정하는 명령어가 별도로 실행되어야 한다. (depoly.sh에서 고정됨, reload 필요)
- Blue-Green 배포에서는 8081 또는 8082로 요청을 보내야 한다.
- deploy.sh에서의 추가적인 동작
- 현재 어느 포트에서 서버가 실행 중인지 확인
- 사용되지 않는 포트에서 jar 파일을 실행
- 새로운 포트에서 실행한 서버에 대한 health check (해당 서버로 트래픽을 받아도 충분한가에 대한 테스트)
- 모든 트래픽을 새롭게 실행된 서버가 받도록 NGINX를 Reload
- 이전에 사용되고 있는 포트에서 실행되는 서버를 종료
나의 걱정과 고민들…
걱정 1 : deploy.sh에서 property파일을 어떻게 교체하는거지? EC2에 property파일이 있어야 하나?
NO!!
1
nohup java -jar -Dspring.profiles.active=blue deploy-study-0.0.1-SNAPSHOT.jar 1>stdout.txt 2>err.txt &
다음과 같이 실행을 하면 resouces/application-blue.properties를 property로해 jar 파일이 실행된다. 즉, active=${IDLE_PROFILE} 현재 사용중이지 않은 profile로 jar 파일을 실행할 수 있게 된다.
nohup: 터미널 세션이 종료되어도 SIGHUP(Hangup) 시그널을 무시하고 프로세스를 계속 실행-Dspring.profiles.active=blue: application-blue.properties로 jar 파일을 실행1>stdout.txt: 표준 출력(stdout)을 stdout.txt로 리다이렉션(stdout.txt에 표준 출력을 작성)2>err.txt: 표준 에러(stderr)를 err.txt로 리다이렉션- & : 백그라운드로 실행
걱정 2 : NGINX가 들어오는 요청을 8081 또는 8082로 보내야하는데 그건 어디서 설정해야하지? deploy.sh에서 설정하면 된다. deploy.sh에서 NGINX의 설정 파일을 변경(overwrite 된다.)하고, reload해 요청이 새로운 포트에서 실행되는 스프링부트 서버에게 전달되도록 한다.
1
2
# etc/nginx/conf.d/service-prod-url.inc
set $service_url http://127.0.0.1:8081;
health-check에 성공한 후, 다음 명령어가 실행됨과 동시에 service-url.inc 내부 내용은 다음과 같이 바뀐다.
1
2
echo "set \$service_url http://localhost:${IDLE_PORT};" | sudo tee /etc/nginx/conf.d/service-prod-url.inc
sudo service nginx reload
1
2
# etc/nginx/conf.d/service-prod-url.inc
set $service_url http://127.0.0.1:8082;
NGINX 설정
deploy.sh
마주했던 문제점
deploy.sh에서 set \$service_url http://localhost:${IDLE_PORT};라고 명령어를 넣어서 “no resolver defined to resolve localhost”라는 오류를 만났다.
This post is licensed under CC BY 4.0 by the author.