GCP에 접속해 보니 젠킨스 서버가...."vm에서 암호화폐 채굴로 인해 무료 서비스 약관을 위반하여 vm 인스턴스가 정지되었습니다."라는 안내와 함께 서버가 중지되어 있었다..
암호화폐 채굴한 적 없고 젠킨스 공부하고 있었다고 항소요청을 하니 5분도 안 돼서 정지를 풀어줬다
0. 목표 및 테스트 환경
- Nginx로 로드밸런싱하여 무중단으로 배포할 수 있는 환경을 구성
로드밸런싱을 진행하기 전 서버를 여러 개로 실행해야 하기 때문에 동일한 환경의 서버를 2개 더 생성했다
GCP의 경우 머신이미지 기능을 활용하면 간단하게 서버 복사가 가능하다
CentOS로 진행
- Jenkins를 실행시킬 jenkins-test-1
- Docker 컨테이너를 띄울 worker-test-1, 2, 3
- nginx를 실행시킬 nginx-instance
5개의 서버를 생성하였음
젠킨스가 생각보다 CPU를 많이 먹는지 서버가 다운돼서 CPU 4 코어, 램 16기가로 업그레이드해 줬다
1. Jenkins - SSH Servers 추가
Jenkins 관리 > 시스템 설정
메뉴로 이동하여 가장 하단으로 스크롤을 내리면 이전에 추가했던 worker-test-1 서버의 입력 정보가 나온다
추가 버튼을 클릭하여 worker-test-2, worker-test-3을 추가한다
Hostname을 입력할 때는 이전과 마찬가지로 같은 네트워크상에 있다면 내부 IP 주소를 입력
입력이 완료되면 [Test Configuration] 버튼을 클릭하여 Success 메시지가 조회되는지 확인!
만약 SSH 키가 없다는 내용의 에러가 발생한다면 공개키를 추가해 준다
이전글 참고!
2023.03.11 - [DevOps] - Jenkins 배포 환경 구축
2. 배포 스크립트 추가
이전 게시글에서 생성했던 worker-test1 deploy의 이름을 worker-test deploy로 변경하였다
test-2와 test-3 서버의 배포 스크립트도 추가해 보자
구성 메뉴로 이동한다
스크롤을 가장 하단으로 이동하여 [Add Server] 버튼을 클릭한다
2번과 3번 서버를 추가하고 배포 스크립트를 작성한다
로그를 남길 수 있도록 스크립트를 수정
nohup docker run -p 8080:8080 tyakamyz/spring-boot-cpu-bound > nohup.out 2>&1 &
docker를 모두 실행시킨 상태에서 빌드를 실행해 보면 정상적으로 동작한다
3. nginx 세팅
3.1 nginx 설치
sudo yum install nginx
3.2 nginx 실행
sudo systemctl start nginx
브라우저에 ip 주소를 입력하여 실행 확인
3.3 로드밸런싱 설정
vi 편집기를 통해 nginx 설정파일을 연다
sudo vi /etc/nginx/nginx.conf
nginx 로드밸런싱 문서를 참고하여 설정파일에 필요한 부분을 추가한다
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
upstream cpu-bound-app {
server {1번 서버 IP}:8080 weight=100 max_fails=3 fail_timeout=3s;
server {2번 서버 IP}:8080 weight=100 max_fails=3 fail_timeout=3s;
server {3번 서버 IP}:8080 weight=100 max_fails=3 fail_timeout=3s;
}
lcation / {
proxy_pass http://cpu-bound-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
설정이 완료되었다면 설정파일이 적용되도록 reload 명령어를 입력한다
restart와 다르게 reload는 재시작하지 않고 설정파일을 적용시킬 수 있다
sudo systemctl reload nginx
만약 reload 도중 에러가 발생한다면 아래 명령어를 통해 간단한 로그 정보를 얻을 수 있다
sudo nginx -t
nginx 서버에 로드밸런싱이 잘됐는지 확인해 보니?
에러가 발생한다
로그를 확인해 보니 connect() 함수는 기본적으로 실행이 막혀있어서 권한 문제가 발생하는 상황이었다
sudo tail -f /var/log/nginx/error.log
connect() 함수가 동작할 수 있도록 명령어를 실행한다
sudo setsebool -P httpd_can_network_connect on
nginx를 통한 로드밸런싱이 동작하는 것을 확인할 수 있다
'개발 지식 > DevOps' 카테고리의 다른 글
RabbitMQ (0) | 2023.04.02 |
---|---|
DB I/O bound 애플리케이션 + Message Queue (0) | 2023.04.02 |
Jenkins 배포 환경 구축 (0) | 2023.03.11 |
간단한 Docker 환경 구축하기 (0) | 2023.03.11 |
CPU bound Test (0) | 2023.03.08 |