AWS 고가용성 Web 구축
2019-08-03
AWS를 이용한 Private 멀티 AZ에 존재하는 Nginx web 서버 구성에 대한 정리이다.
조건
네트워크
- VPC의 경우 172.31.0.0/16 CIDR 제공되는 것을 사용한다.
- Public 2개, Private 2개로 총 4개의 서브넷을 구성한다.
- Public 서브넷에 NAT 게이트웨이를 1개씩 생성한다.
- Private 서브넷을 위한 라우팅 테이블을 각각 만들고 각각의 NAT 게이트웨이를 연결한다.
- Private 인스턴스를 각각 서브넷에 실행한다.
- Public 서브넷에 Bastion host를 두어 Private 인스턴스에 22번 포트로 접근가능하게 한다.
Web 서버
- Private 서브넷에 Nginx web server를 설치하고 가동시킨다.
- ALB를 생성하여 각 Private 인스턴스로 접근가능한지 확인한다.
- 한 서버를 다운 시켜도 ALB를 통한 접근은 계속 가능해야 한다.
Subnet 구성
- 멀티 AZ를 위해 서울리전의 a,c zone에 각각 서브넷을 생성한다.
- 조건에 일치하도록 Public 2개, Private 2개를 생성하고 이름으로 구분한다.
라우팅 테이블 생성
- Private 서브넷이라 명명하였지만 연결된 라우팅 테이블이 인터넷 게이트웨이(igw)로 통하기 때문에 Public한 접근이 가능하다.
-
igw가 없는 라우팅 테이블을 생성
- Private 서브넷에 연결
NAT 게이트웨이 생성
- Private 서브넷에 Nginx web server를 설치하기 위해서는 인터넷 연결이 필요하다.
- 인터넷에서는 Private 인스턴스와의 연결을 막아야 한다.
- NAT 게이트웨이 서비스를 이용한다.
- 엘라스틱 IP도 생성하여 NAT 게이트웨이에 연결한다.
NAT 게이트웨이, 라우팅 테이블 연결
- 생성한 NAT 게이트웨이를 라우팅 테이블에 연결해준다.
- 0.0.0.0/0을 값으로 설정하여 모든 Private 인스턴스들이 NAT 게이트웨이 접근토록 한다.
Private 인스턴스 생성
-
인스턴스를 생성하고 Private 서브넷에 위치하도록 한다.
- 보안 그룹은 default를 사용했다.
- 키 페어가 없으면 새롭게 생성하고 해당
pem
파일은 보관에 유의한다. - 생성이 완료되면 아래와 같이 퍼블릭 주소가 없는 인스턴스가 생성된다.
- c존의 서브넷에도 동일한 인스턴스를 생성한다.
Bastion host 구성
- Public 서브넷에 인스턴스를 생성하고 엘라스틱 IP를 할당하여 외부에서 접속이 가능하도록 한다.
-
보안상 Bastion host는 특정 IP만 접근하도록 한다.
- pem키를 이용하여 접속 완료
Nginx 설치 및 가동
- Public 서브넷의 Bastion host를 통해 Private 인스턴스에 접속해 작업을 진행하도록 한다.
- Bastion host에서 다시 pem키를 이용해 각각의 Private 인스턴스로 접속한다.
- Nginx 설치 및 가동
sudo amazon-linux-extras install nginx1.12 -y sudo service nginx start
ALB 생성
- 각각의 Private 인스턴스에서 가동중인 Nginx를 브라우저로 확인하기 위해 ALB를 생성하고 그 DNS로 접근해본다.
- 접속 완료
검증방법
- 한쪽의 Nginx를 다운시켜도 계속해서 접속이 가능해야 한다.
- a존의 Nginx를 다운시키고 다시 들어가본다.
sudo service nginx start
- 실제로 ALB가 a존의 상태를 비정상으로 보고한다.
- 웹서버 2로 잘 들어가고 있다.