Day 62.5 - AWS 3tier 구성하기
tomcat was를 사용한 3tier를 GCP에서는 만들었는데 AWS에서 구축은 안해본 상태였다
우리가 한번 도전해보자라는 팀원분의 의견이 있었고 토요일 저녁 10시~일요일 새벽 3시 40분까지,, 대장정을 거쳐 구현을 성공할 수 있었다
구성도 아닌 구성도는 다음과 같다 (정말 정말 간략하게 그림)
구성도를 두개정도 그렸는데 이게 더 보기가 편해서 이걸로 가져왔다
하핫
다같이 동일한 조건으로 구축하기 위해 다음과 같은 rule을 정했다
name | IP / CIDR | - | |
VPC | 3tier-vpc | 10.0.0.0/20 | |
subnet (web) | 3t-web-sub | 10.0.0.0/22 | Public |
subnet (web2) | 10.0.9.0/24 | 다른가용영역 | |
subnet (was) | 3t-was-sub | 10.0.4.0/23 | Private |
subnet (was2) | 10.0.10.0/24 | 다른가용영역 | |
subnet (redis) | 3t-redis-sub | 10.0.6.0/24 | Private |
subnet(rds) | 3t-db-sub | 10.0.7.0/24 | Private |
임시 CIDR (rds생성위해) | 10.0.8.0/24 | 다른가용영역 | |
라우팅 / 인터넷 게이트 | 3t-rt / 3t-ig | 연결할 서브넷 만! (3t-web-sub) | |
Load balancer(was) |
3t-lb-was |
||
Load balancer(web) |
3t-lb-web |
||
was LB 타겟그룹 | was-lb-tg | ||
web LB 타겟그룹 | web-lb-tg | ||
SG |
3t-sg | all tcp / icmp open |
크게 고민했던(?), 중간에 수정이 들어갔던 사항은 다음과 같다
1. RDS를 사용하려면 VPC subnet에서 두 지역 이상의 가용영역에 위치하고 있어야 한다
-- 처음 subnet을 만들때 모든 subnet을 가용영역을 한군데로 지정하고 만들었다가 RDS가 만들어 지지않아 급하게 한 서브넷 가용영역을 옮겨주었다
2. ALB를 사용하려면 이또한 다른 가용영역을 사용하는 서브넷이 있어야 한다(최소 2개)
-- 이 사실을 몰라서 처음 subnet을 만들때 web, was, rds 하나씩 주었다 web, was단 앞에는 LB를 넣어주었는데
ALB를 만들기 위해서 다른 가용영역을 사용하는 2개의 서브넷이 있어야 하는걸 알게되어 중간에 추가하게 되었다
이 두가지는 모두 서비스 안정성을 위한 방법이다 가용영역은 IDC 센터로 볼수있는데 만에하나 하나의 IDC 센터가 다운되더라도 다른 IDC 센터의 서브넷에서 서비스를 운영할 수 있도록 하는 것
3. nginx conf 파일 문제
-- nginx.conf에 upstream - proxy_pass 설정시 css가 깨져서 나오는 문제가 있었다 회원가입이나 로그인창을 누르면 nginx error가 발생했는데 was vm에 직접 접속했을때는 문제가 없는걸보면 nginx 설정문제라고 생각했다 (캡쳐 못함,,)
nginx 설치 후 생성되는 nginx.conf 파일에 proxy_pass를 설정하지 말고 k8s 컨테이너로 3tier(java-was) 구성시 사용한 nginx.conf 파일로 proxy_pass를 구성하면 css가 깨지지 않고 잘 나왔다
문제의 두 파일은 이부분만 달랐는데 .. 음 모르겠다
문제 파일
types_hash_max_size 4096;
include /etc/nginx/mime.types;
문제 없는 파일
types_hash_max_size 2048;
include 설정 없음
- types_hash_max_size, server_names_hash_bucket_size
- 호스트의 도메인 이름에 대한 공간을 설정하는 것으로 이 값이 낮을 경우 많은 가상 호스트 도메인을 등록한다거나, 도메인 이름이 길 경우 bucket 공간이 모자라 에러가 생길 수 있으므로 넉넉하게 설정한다.
- include 옵션 :
- 가상 호스트 설정이나 반복되는 옵션 항목을 inlcude를 통해 불러올 수 있다. EX) 리버스 프록시를 각 도메인에 설정한다고 했을 떄 헤더 처리 옵션등을 conf.d 디렉토리에 넣어두고 incldue 명령을 통해 불러올 수 있다.
문제가 났던 파일이 types_hash_max_size가 더 커서 정말 의아하다.. ㅋㅋ
보완사항
1. 방화벽을 어떻게 해야할지 몰라 일단 tcp,icmp를 모두 열고 했는데 다음에는 필요한 port만 열어서 구축해보는 방식으로 하고싶다
느낀점
aws를 또 나름 오랜만에 첨부터 구현하니까 부족한 점이 많이 보였다 ,,(저번 2tier는 급하게 하느라 vpc 마법사를 사용했었다)
cidr 계산이나 구성도 부분은 다른 조원분이 많이 도와주셨는데 큰 도움이 되었다
또 중간중간 모르는 부분이나 헷갈리는 부분은 같이 토론하고 공유하면서 해결해갈 수 있어서 좋은 경험이었다 만약 혼자 도전했더라면 ㅜㅜ 죙일걸렸을 것 같다 함께 문제를 해결해갈 수 있는 동료들이 있어서 감사했다
CIDR을 배우고나서 한번 더 조원들과 메뉴얼 만들기를 따로 진행해볼 것 같다 아자아자 화이팅!