
web-was-DB 로 연결되는 3티어를 이미지 찍어놓았다.
이제 LB을 적용해보자.
web과 was만 이미지를 찍어두었기 때문에, mysql은 만들어줘야 한다.
was에 올릴 myweb.jar는 사용해야만 하는 사용자와 데이터베이스가 있기에 이것도 추가해줘야 한다.
was의 LB와 DB는 fqdn으로 설정해줄 것이기 때문에 cloud dns도 만들어줘야 한다.
was LB의 IP 주소는 was.rapa.local로,
db의 IP 주소는 db.rapa.local로 만들어준다.

→ MySQL 5.7버전은 Enterprise에서만 지원하기 때문에
먼저 Enterprise을 선택하고 MySQL 5.7을 선택해준다.
(MySQL 5.7을 선택하는 이유는 was로 올려줄 myweb.jar가 이 버전에서만 동작할 수 있기 때문이다.)

("개발"로 지정하면 비용을 절감할 수 있기 때문에 개발로 지정해주자)
가장 아래의 영역 지정은 내가 만든 인스턴스들의 영역과 같은 것으로 지정해주자

→ DB는 비공개로 설정하고 default 네트워크를 할당해준다.
공개도 설정해줄 수 있는데, DB가 잘 동작하는지 확인해주기 위해 공개로 설정할 수도 있다.
→ 하지만 나중에 was에서 mysql을 바라보게 만들 것이기 때문에 나는 비공개 IP만 설정했다.
DB를 비공개로 설정하는 이유는...
공개로 설정하면 DB의 공개IP 주소를 아는 경우, 누구든지 DB에 접근하여 데이터를 수정할 수 있기 때문이다.

→ 삭제 보호 사용 설정을 체크해두면 삭제할 때 까다롭기 때문에 해지해둔다.
실수로 삭제 보호 사용 설정을 체크하고 만든 경우, 수정을 눌러 해당 설정을 해지하면 쉽게 삭제할 수 있다.
GCP의 편리한 GUI에서 추가해보자!

→ mysql이 만들어진 것을 확인할 수 있다.
클릭하면 사용자와 데이터베이스를 추가할 수 있다.
사용자부터 추가해보자.


→ 사용자 frodo를 추가해줬다.
이제 데이터베이스도 추가해주자!


→ 데이터베이스 frodo를 추가해줬다!
이제 mysql은 준비가 끝났다.
우리는 was와 db의 IP 주소 대신에 fqdn을 쓸 것이므로,
cloud dns를 설정해줘야 한다.

검색에 cloud dns라고 검색한 뒤 설정하면 편하다.
영역을 rapa
DNS 이름을 rapa.local
db의 fqdn을 db.rapa.local
was의 fqdn을 was.rapa.local로 설정해줬다.
(was의 fqdn은 임시로 was 인스턴스의 내부 IP 주소로 지정해줬다.)
(나중에 was의 LB 내부 IP 주소로 바꿔야한다.)

IP 주소를 만든 db의 내부 IP주소로 넣어줬다.
자, 이제 mysql과 cloud dns의 세팅은 끝났다.
web과 was의 템플릿까지 만들어져 있으니,
was의 인스턴스 그룹이 db를 잘 바라보는지 확인하고 was의 내부 LB를 만들고 (내부 LB가 정상 동작하는지 확인하고)
was의 내부 LB의 IP 주소를 was.rapa.local로 지정해주고
web의 인스턴스 그룹이 was의 myweb.jar를 잘 여는지 확인하고 web의 외부 LB를 만들어야 한다.
1) was의 인스턴스 그룹을 생성한 뒤에
2) 만들어진 was 인스턴스 그룹 중 1개의 ssh창에서 ping db.rapa.local이 되는지 확인하고
3) was의 LB를 만든다.
이때, LB는 내부 로드밸런스로 만든다!
(web의 LB만 외부에 노출되고, 나머지는 모두 비공개로 만들어줄 것이기 때문이다!)
(우리가 그린 3티어 구성도에서 확인할 수 있다.)
그렇게 내부와 외부로 3티어를 구성한 이유는 보안에 있다.
많이 사용하는 Apache - tomcat를 예시로 살펴보자.
tomcat은 보안에 취약하기 때문에 client가 직접 tomcat으로 접속하지 못하게 하고, 앞단에 apache 혹은 nginx를 만들어준다.
즉, nginx를 통해서만 tomcat으로 접속할 수 있게 만들어준다.
말이 길었으니 이제 was 세팅을 해보도록 하겠다!

→ 만들어뒀던 was-template를 설정해준다.

→ 영역과 리전은 내가 지금까지 설정해줬던 것과 동일하게 설정해준다.
→ 비용 절감을 위해 인스턴스는 2~3개만 만들 수 있게 설정해준다.

→ 만든 was-ig을 확인할 수 있다.
인스턴스가 2개 생성된 것을 확인할 수 있으니, VM 인스턴스로 가서
만들어진 인스턴스들이 db를 잘 바라보고 있는지 확인하자!
💡 주의할 점
cloud dns를 잘 설정했는지 확인해라!
db.rapa.local을 mysql의 내부 IP 주소로 설정했는지 확인해라!

→ 인스턴스 그룹으로 생성된 인스턴스들
중 하나의 ssh 창으로 접속해서 db를 잘 바라보는지 확인하면!

→ db로 ping이 잘 가는 것을 확인할 수 있다!
→ 인스턴스 그룹들이 잘 만들어졌으니 이제 was 내부 LB를 만들면 된다!

검색 창에 load balancing이라고 검색해서 들어오면 편하다.

was는 네트워크 부하분산기 - 프록시 부하분산기 - 내부 부하분산기로 만들어준다!

💡 인스턴스 그룹 was-ig의 번호 이전을 8080으로 설정해준 이유
was-lb는 최종적으로 java파일을 열어야 하기 때문이다.
일반적으로 자바 웹 애플리케이션을 실행하거나 서버를 구성할 때 사용되는 기본 포트는 8080입니다.

→ 상태 확인도 만들어주고, 세션 어피니티도 설정해준다.
세션 어피니티를 설정해주는 이유는 스티키를 사용하는 이유와 비슷하다.
client가 계속 같은 vm(?)으로 세션을 맺도록 만들기 위함이다.

→ 내가 만들던 같은 리전으로 선택해준다.
(테스트 환경이니까 비용 절감을 위해 항상 같은 리전과 영역으로 선택해준다!)
자, 이제 부하분산기의 프론트엔드를 만들어보자!

→ web에서 바로 연결될 LB이므로 IP주소는 임시(자동)으로 설정해준다.
여기에서 정말 주의해야할 점이 있는데, 포트 설정이다!!!
💡 포트 8080으로 설정!!!하는 이유
nginx.conf 수정을 보면 알 수 있다.
sudo vi /etc/nginx/nginx.conf 에 설정해뒀던 것을 생각해보자,,,
proxy_pass http://was.rapa.local:8080;
→ web에서 was로 접속할 때, 8080 포트를 통해 접속하라고 설정해줬다!
//nginx.conf 수정해야할 부분
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / { //요기 부분 수정하기!!!
proxy_pass http://was.rapa.local:8080; //->fqdn으로 나타내면 좋음!
//was의 fqdn은 !!!!!!!!!!!!여기 사용하는게 중요!!!!
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
엇,,, 이렇게 만들었는데 부하 분산기 생성에 실패했다,,!!ㅠㅠ
이유는 모르겠지만 빠르게 만들기 위해 네트워크 - 스루패스 로드밸런스로 만들어줬다!!
아래는 내가 was-lb로 설정해준 내용이다,, 혹시 몰라서 첨부해둔다!

????어떻게 하지??



→ web의 인스턴스 그룹이 잘 만들어진 것을 확인할 수 있다.
→ 인스턴스가 0->2로 증가하는 것을 확인할 수 있다.

→ vm 인스턴스에서 인스턴스들이 잘 만들어진 것을 확인할 수 있다.
💡 주의해야할 점!!!
was.rapa.local의 IP주소를 was 내부 LB의 IP 주소로 바꿨는지 확인해라!!!

→ was까지 잘 연결되는 것으로 보아 web의 인스턴스들도 잘 만들어진 것을 알 수 있다.
다만, sudo reboot을 진행한 후에 curl localhost에 성공하였는데,
아무래도 이미지를 뜨기 전에 web과 was와 sql을 뒤죽박죽 만들어서 그런 것 같다...?

//영상 첨부
가비아에 web LB의 공개IP주소 입력하여 https://www.minipig.shop 연결되는지 확인하기

url 창에 https://www.minipig.shop

→ 이렇게 뜨면 성공!!!