BE전문가 프로젝트

4. 고가용성 환경 생성 본문

AWS 실습

4. 고가용성 환경 생성

원호보고서 2021. 12. 16. 10:57

- 고가용성으로 배포되어야 일부 구성 요소에 장애가 발생하더라도 정상적으로 서버가 운영될 수 있다.

- 이번 실습은 단일 Ec2 인스턴스에서 실행되는 Application으로 시작한 다음 이를 변환하여 가용성을 높인다.

- Load Balancer 및 AutoScaling 그룸을 생성하고 보안 그룹을 업데이트하고 애플리케이션의 가용성이 높은지 테스트

최종 아키텍처

VPC검사

- AWS Cloud Formation을 통해 리소스가 이미 프로 비저닝되어있다.

 

1. VPC를 클릭한 후 Filter by VPC에서 Select a VPC상자를 클릭 후 Lab VPC를 선택한다.

 

2. 왼 쪽 탐색창에서 Your VPCs를 클릭한다.

- 여기서 사용자가 생성한 Lab VPCs를 볼 수 있다.

 

3. 왼 쪽 탐색창에서 Subnet를 클릭한 후 Public Subnet1의 세부 정보를 확인한다.

- VPC는 lab VPC

- IPv4 값은 10.0.0.0/24

- 가용영역을 볼 수 있다.

 

4. Route Table탭을 클릭한다.

- VPC CIDR(10.0.0.0/20) 내로 향하는 트래픽이 VPC 내에서 라우팅 되는 것을 확인할 수 있다.

- 0.0.0.0/0으로 향하는 트래픽이 IGW-xxxx로 라우팅되도록 지정한다.

 

5. Network ACL을 클릭한다.

- 규칙을 확인한다.

 

6. Security Group을 클릭한 후 inventory_DB 보안그룹을 선택한다.

VPC(10.0.0.0/20)내 어디서나 MYSQL 트래픽을 허용하는 것을 확인할 수 있으며 나중에 애플리케이션 서버의 트래픽만 허용하도록 설정할 것이다.

 

 

Application Load Balancer 생성

서버 간에 트래픽 분산을 할 수 있는 방법이 필요한데 Load Balancer를 통하여 수신되는 애플리케이션 트래픿을 여러 인스턴스로 자동 분산이 가능하며 Health Check기능을 하기도 한다.

 

1. EC2를 클릭한 후 Target groups를 클릭한다.

- Target groups를 지정하여 트래픽을 전송할 위치를 정의한다. 이번 실습에서는 하나의 그룹 대상만 지정할 예정이다.

 

2. Create target group을 클릭한다.

- specify group details페이지가 표시될 것이다.

 

3. Basic configuration 섹션에서 아래와 같이 구성한다.

- Choose a targer type을 instanse로 선택한다.

- Target group name에 Inventory-App를 입력한다.

- VPC를 LabVPC로 선택한다.

 

4. Advanced health check settings 섹션을 확장한다.

- load Balancer에서 모든 인스턴스에 대해서 Health check를 자동으로 수행하여 요청에 응답하는지 확인한다.

 

5. 값을 구성한다.

- Healthy threshold : 2

- Interval : 10

 10초마다 상태 검사를 수행하며 두번 올바르게 응답이 온다면 정상상태로 간주한다.

 

6. next를 클릭하면 Register targets페이지가 나오는 것을 확인한다.

- Targets는 load Balancer의 요청에 응답할 개별 인스턴스이다. 아직 웹 Application인스턴스가 없기때문에 이 단계를 건너 뛸 수 있는 것이다.

 

7. 타켓그룹이 성공적으로 생성되었다는 초록불이 뜨면 왼쪽 탐색창에 Load Balancer를 클릭한다.

 

8. Create Load Balancer를 클릭한다.

 

9. Application Load Balancer세션에서 Create를 클릭한다.

 

10. Network mappling 섹션에서 아래와 같이 구성한다.

- 첫번째 가용 영역 서브넷 리스트에서 PublicSubnet1을 선택한다.

- 두번째 가용 영역 서브넷 리스트에서 PublicSubnet2을 선택한다.

 

11. Listeners and routing에서 아래와 같이 구성한다.

- Listener HTTP:80에서 Default Action 드롭다운 메뉴에서 Inventory-App를 선택한다,

 

12. Create load balancer를 클릭한다.

 

13. load balancer가 성공적으로 생성되었다는 초록불이 뜨는 것을 확인한다.

 

14. View load balancers를 클릭한다.

- 이제 Application Load Balancer가 백그라운드에서 프로비저닝된다.

 

15. Ec2를 클릭한 후 Instances아래에서 Launch Templates를 선택한다.

 

16. Create launch template을 선택한다.

 

17. launch template name and description 섹션에서 다음을 구성한다.

- Launch template name : Lab-template-NUMBER (Number에 임의의 값을 넣는다.)

- Template version description : version 1

   - 인스턴스의 루트 볼륨에 대한 템플릿이며 운영체제, Application server 및 application을 포함할 수 있는 Amazon Machine Image(AMI)를 선택하라는 메시지가 표시된다. AMI에서 인스턴스를 바로 시작할 수 있는데 이 인스턴스는 AMI의 사본으로 클라우드에서 실행되는 가상 서버이다.

 

 

 

18.  AMI에서 Amazon Linux 2 AMI with 64-bit(x86) 아키텍처를 선택한다.

 

19. Instance tyoe에서 t3.micro를 선택한다.

 

20. Securoty group에서 Inventory-App을 선택한다.

 

21. Advenced details를 확장한다.

 

22. IAM instance profile에서 Inventory-App-Role을 선택한다.

 

23. User data섹션에 다음을 추가한다.

#!/bin/bash
# Install Apache Web Server and PHP
yum install -y httpd mysql
amazon-linux-extras install -y php7.2
# Download Lab files
wget https://us-west-2-tcprod.s3.amazonaws.com/courses/ILT-TF-200-ARCHIT/v6.8.27/lab-2-webapp/scripts/inventory-app.zip
unzip inventory-app.zip -d /var/www/html/
# Download and install the AWS SDK for PHP
wget https://github.com/aws/aws-sdk-php/releases/download/3.62.3/aws.zip
unzip aws -d /var/www/html
# Turn on web server
chkconfig httpd on
service httpd start

 

24. Create launch template를 클릭한다.

 

25. View launch template를 클릭한다.

 

 

Auto Scaling 그룹 생성

-사용자가 정의한 정책, 일정 및 상태 확인에 따라 자동으로 EC2 인스턴스 시작 또는 종료하도록 설계된 웹서비스이다. 또한 가용 영역에 인스턴스를 자동 분산하여 고가용성 애플리케이션으로 생성할 수도 있다.

 

- Private Subnet에 Ec2 인스턴스를배포하는 Auto Scaling 그룹을 생성한다. Private Subnet의 인스턴스는 인터넷에서 액세스할 수 없다. 따라서 사용자가 대산 Application Load Balancer에 요청을 보내면 해당요청을 Private Subnet에 있는 EC2 인스턴스에 전달한다.

 

1. 왼쪽 탐색창의 Auto Scaling아래 Auto Scaling Groups를 클릭한다.

 

2. Create an Auto Scaling group을 클릭하고 다음을 구성한다.

-Name : Inventory-ASG

- Launch template : 생성한 시작 템플릿을 선택한다.

Next를 클릭한다.

 

3. Network 섹션에서 다음을 구성한다.

- VPC : Lab VPC

- Subnets : private Subnet 1, Private Subnet 2를 선택한 후 Next를 누른다.

 

4. Configure advances options페이지에서 다음을 구성한다.

- Attach to an exosting load balancer를 선택한다.

- Choose from your load balancer target groups를 선택한다.

- Choose a target group for your load balancer : Inventory-AppIHTTP를 선택한다.

(자동 스케일링 그룹이 이전에 생성한 Inventory-AppIHTTP 대상 그룹의 일부로 새 EC2 인스턴스를 등록하도록한다. Load Balancer가 이 대상 그룹에 있는 인스턴스로 트래픽을 보낸다.)

 

- Health check grace period : 200

- Monitoring : Enable group metrics collection within CloudWatch

- Next

 

5. Configure group size and scaling policies 페이지에서 다음을 구성한다.

- Desired capacity : 2

- Minimum capacity : 2

- Maximum capacity : 2

- Next

(항상 2의 인스턴스를 유지하도록 설정했음)

 

6. Tag 페이지가 표시될 때 까지 Next를 클릭한다.

 

7. Add tag를 클릭 후 다음을 구성한다.

- Key : Name

- Value : Inventory-App

(Auto-Scaling 그룹에 이름으로 태그가 지정되고 Auto Scaling 그룹에서 시작한 EC2인스턴스에도 표시된다.)

- Next

 

8. Auto Scaling 그룹의 세부 정보를 확인한 다음 Create Auto Scaling group을 클릭한다.

- 애플리케이션이 곧 2개의 가용영역에서 실행될 것이며 Auto Scaling이 인스턴스 또는 가용영역에서 장애가 발생하는 경우에도 해당 구성을 유지한다.

 

9. Auto Scaling그룹을 클릭한다.

- Group Details를 검토하여 Auto Scaling 그룹에 대한 정보를 확인한다.

 

 

 

보안그룹 업데이트

-배포한 Application에는 3티어 아키텍처가 있다. 이번에는 아래의 이미지와 같이 티어를 적용하도록 보안그룹을 구성다.

로드 밸런서 보안그룹

- 로드 밸런서 보안그룹은 앞에서 이미 구성했음

 

애플리케이션 보안 그룹

- 로드밸런서에서 수신되는 트래픽만 허용하도록 구성한다.

 

1. 왼쪽 탐색창에서 Security Groups를 클릭한다.

 

2. Inventory-App를 선택한다.

 

3. Inboud rules탭을 클릭한다

- load Balancer는 HTTP를 통해 HTTPS요청을 전달도록 구성되어있다.

 

4. edit inbound rules를 클릭한다.

 

5. Add rule을 클릭하고 다음을 구성한다.

- Type : HTTP

- Source 

   - Custom 오른쪽에 있는 상자에 sg를 입력한다.

   - 표시되는 목록에서 Inventory-LB를 선택한다.

- Description : Traffic from load balancer

 

6. Save rules를 클릭한다.

- 이제 애플리케이션 서버가 load balancer의 트래픽을 수신할 수 있다.

 

DB 보안 그룹

- 애플리케이션에서 수신되는 트래픽만 허용되는 DB Security Group을 구성한다.

 

1. Inventory-DB를 선택한다.

- 기존 인바운드 규칙 MYSQL(80)에서 VPC 내에 있는 모든 IP 주소의 트래픽을 허용한다.

 

3. Inboud rules탭을 클릭한 후 edit inbound rules를 클릭한다.

 

4. DELETE를 클릭하여 기존 inbound rules를 삭제한다.

 

5. ADD rule를 클릭한 후 아래와 같이 구성한다.

- Type에서 드롭다운을 클릭해서 MYSQL를 선택한다.

- Source  : Custom 오른쪽에 있는 상자에 sg를 입력한 후  Inventory-App를 선택한다.

- Description : Traffic from app servers를 입력한다.

 

6. Save rules를 클릭한다.

 

 

애플리케이션 테스트

1. 왼쪽 탐색창에서 Target Groups를 선택한다.

 

2. Name의 inventory-App를 클릭한다.

 

3. 페이지하단에서 Target탭을 클릭한다.

 - Registered targets 섹션에 2개의 인스턴스가 표시될 것이며  Status열에슨 인스턴스에 대해 수행한 로드 밸런서 상태 확인결과가 표시되며 healthy로 표시될 때 까지 기다린다.

 

4. 왼쪽 탐색창에 load balancers를 클릭한다.

 

5. 페이지 하단의 Description탭에서 DNS name을 복사한 후 브라우저에 검색해본다.

 

 

고가용성 테스트

- 인스턴스 중 하나를 중지하여 장애를 시뮬레이션 할 것이다.

1. 왼쪽 탐색창에서 Instances를 클릭한다.

 

2. Inventory-App 인스턴스 중 하나를 선택한다.

 

3. Instance State버튼을 클릭 후 Terminate instance를 선택한 후 Terminate를 클릭한다.

 

4. 웹 브라우저에 있는 Inventory application tab으로 돌아가 페이지를 여러번 새로고침한다.

 - 페이지 하단에 표시된 가용 영역은 동일하게 유지된다. 2개의 인스턴스를 실행하도록 Auto Scaling을 구성했기 때문에 Auto Scalinf이 자동으로 대체 인스턴스를 시작한다.

 

5. EC2 Mangement Console에 로그링 한 후 새 EC2가 나타날때까지  새로고침을 누른다.

 

6. Inventory application 탭으로 돌아가 페이지를 새로고침을 여러번하면 instance ID가 바뀌는 것을 확인할 수 있다.

 

 

DB를 고가용성으로 만들기

1. RDS를 선택 후 왼쪽 탐색창에 Databases를 클릭한다.

 

2. Inventory-db 식별자를 클릭한다.

 

3. modify를 클릭한다.

 

4. DB instance class에서 db.t3.small을 선택한다.

- 두배로 늘어난다

 

5. Allocated storage에 10을 입력한다.

- 두배로 늘어난다

 

6. Multi-AZ deployment 아래 Create a standby instance를 선택한 후 Continue를 누른다.

- 여러 데이터센터(가용영역)에서 실행하도록 DB를 변환하는 데 필요한 유일한 단계이다.

- 하나의 인스턴스가 기본 인스턴스로 모든 요청을 처리하지만 다른 인스턴스는 보조 인스턴스로 시작되고 기본에서 장애가 발생 시 이를 대신해준다.

 

7. Scheduling of modifications 섹션에서 Apply immediately를 선택한다.

 

8. Modify DB instance를 클릭한다.

 

 

NAT GateWay를 고가용성으로 만들기

- 애플리케이션 서버는 프라이빗 서브넷에서 실행되고 있으며 인터넷을 액세스해야하는 경우(ex 다운로드)요청은 Public Subnet을 통해야만 가능하다.

- 현재 Public Subnet1에  Nat Gateway는 한개만 있다. 따라서 Nat GateWay에 장애가 발생했을 때 애플리케이션 서버가 인터넷과 통신을 할 수없다. 이런문제를 해결하기 위해 Nat GateWay를 고가용성으로 만드는 것이다.

 

1. VPC를 클릭 후 왼쪽 탐색창에서 Nat GateWay를 클릭한다.

 

2. Create NAT GateWay를 클릭한 다음 아래를 구성한다.

- Name : my-nat-gateway

- Subnet : 왼쪽에 표시되는 subnet을 Public Subnet2로 선택한다.

- Allocate Elastic IP address를 클릭한다.

- Create a nat GateWay를 클릭한다.

 

3. 왼쪽 탐색창에서 Route Tables를 클릭한다.

- Name tag : Private Route Table 2

- VPC : Lab VPC

 

4. Create Route Table를 클릭한 다음 Route 탭을 클릭한다.

 

5. Edit routes를 클릭한다.

 

6. Add route를 클릭 후 다음을 구성한다.

- Destination : 0.0.0.0/0

- Target : NAT GATEway > my-nat-gateway 선택

- Save change를 클릭한다.

 

7. Subnet Associations 탭을 클릭 후 Edit subnet associations를 클릭한다.

 

8. Private Subnet2를 선택한다.

 

9 Save Associations를 선택한다.

-이제 Private Subnet2의 인터넷 바운드 트래핏을 동일한 가용 영역에 있는 NatGateWay로 보낸다

Comments