AWS를 이용한 서버 구축2_아마존 EC2로 구축하기

안녕하세요. 오늘은 AWS를 이용한 서버 구축 1편에 이어 2편을 소개해드리려고 합니다.

혹시 1편에 대한 내용이 궁금하시다면,  AWS를 이용한 서버 구축1 을 통해 내용을 확인해주세요~

 

1. 클라우드란?

   EC2 구축에 들어가기 앞서 클라우드에 대해 간략하게 알아보겠습니다.

 

1)   클라우드 정의

     니콜라스 카스의 정의에 따르면 IT 자원을 구매하거나 소유할 필요 없이 필요한 만큼 사용료를 주고 사용하는 서비스 입니다.

 

2)   클라우드 분류

      IaaS : 인프라 자원을 서비스

      PaaS : 개발에 필요한 환경 서비스

      SaaS : 사용자가 원하는 소프트웨어 서비스

3)   IaaS 종류

     ① Amazon EC2

      Microsoft Azure

      Google Cloud Platform

      Naver Cloud Platform

 

4)   Amazon EC2 만의 장점

      ① 시장점유율이 가장 높음

       다양한 옵션을 맞춤 개발 가능

       앱설치를 위한 엘라스틱 빈스톡이나 EC2 컨테이너 서비스, AWS 람다 및 오토스케일링 같은 서비스도 제공

       방대한 툴과 서비스, 기업친화적 기능으로 어필

 

2. Apache Tomcat 서버 구축

클라우드에 대해 간략히 알아보았으니, 가장 대표적인 클라우드인 Amazon EC2를 활용하여 Tomcat 서버를 구축해 보겠습니다. 아래는 간단한 구성도 입니다.

1)   EC2 생성하기

      AWS Management Console > 컴퓨팅 > EC2 > 인스턴스 이동

      인스턴스 시작        

      Amazon Machine Image(AMI) 선택

         운영체제, 서버, 소스, 리눅스 초기 설정 등이 포함

      인스턴스 유형 선택

         cpu, 메모리, 네트워크 대역

     ⑤ 인스턴스 구성

         인스턴스 개수, 스팟 옵션, VPC, 가용영역, 퍼블릭 IP, IAM, 삭제방지, 모니터링 등 설정

     ⑥ 스토리지 추가

         Root 장치는 필수이며 EBS만 사용가능, 장치 이름, ID, 스토리지 크기, 볼륨 유형, 삭제 방지 등 설정

     ⑦ 보안 그룹 구성

         방화벽 설정

     ⑧ 시작하기

     ⑨ 생성된 인스턴스

2)   EC2 접속하기 (Xshell 기준)

     ① IPv4 퍼블릭 IP 복사

     ② ssh://{계정}:{패스워드}@{퍼블릭 IP}:22

     ③ 접속확인

 

3)   EC2에 소스 올리기 (FileZilla 기준)

     ① IPv4 퍼블릭 IP 복사

     ② 호스트, 사용자명, 비밀번호, 포트 입력 후 빠른 연결

     ③ 연결확인

     ④ 로컬에 있는 소스 더블클릭 또는 드래그하여 리모트로 파일 올리기

4)   Apache Tomcat 서비스 실행

      {Tomcat Home}/bin/catalina.sh start

5)   서비스에 접속하기

      {IPv4 퍼블릭 IP}:{port}

3. Amazon RDS 이용

구축한 서버에 Amazon에서 제공하는 DB를 연결해 보겠습니다.

아래는 간단한 구성도 입니다.

 

1)   RDS 생성

     ① AWS Management Console > 데이터베이스 > Amazon RDS > 데이터베이스

     ② 데이터베이스 생성    

     ③ 엔진 선택

     ④ 사용 사례 선택

     ⑤ DB 세부 지정

     ⑥ 고급 설정 구성

     ⑦ 생성확인

    

2)   접속하기(Toad for Oracle 기준)

     ① RDS 선택

     ② 연결 & 보안 탭에서 엔드포인트 및 포트 확인

     ③ Toad로 접속

     ④ 쿼리조회

 

3)   WAS서버 연결하기

     ① 엔트포인트 확인

     ② config 파일에 연결 정보 입력

     ③ catalina log에서 connection 확인

 

4.  Apache Web 서버를 이용한 이중화

이중화를 하기 위하여 톰켓 앞단에 WEB서버를 구축하고, 2개의 Tomcat 서버로 연결해보겠습니다.

아래는 간단한 구성도 입니다.

 

1)   Apache와 Tomcat 연결하기

     ① Tomcat EC2의 프라이빗 IP 확인

     ② httpd-vhosts.conf 파일 수정

     ③ workers.properties 파일 수정

2)   Apache 실행

     ① {Apache Home}/bin/apachetl start 명령어로 실행

     ② ps –ef | grep httpd 명령어로 실행 확인

3)   서비스 접속하기

     ① Apache EC2 인스턴스의 Ipv4 퍼블릭 IP 확인

     ② {Ipv4 퍼블릭 IP}:{port}

5. WEB서버 없이 ELB를 이용한 이중화

Apache WEB을 Amazon에서 제공하고 있는 Network load balancer로 교체하여 이중화를 해보겠습니다.

아래는 간단한 구성도 입니다.

1)   ELB 생성 및 Tomcat EC2와 연결

     ① AWS Management Console > 컴퓨팅 > EC2 > 로드밸런서 이동

     ② 로드 밸런서 생성

     ③ 로드 밸런서 유형 선택

     ④ 로드 밸런서 구성 지정

     ⑤ 보안 그룹 구성 지정

     ⑥ 대상그룹 생성

     ⑦ 대상 그룹에 인스턴스 추가

     ⑧ 대상 그룹 확인

     ⑨ 생성된 ELB 확인

2)   서비스 접속하기

     ① ELB의 DNS 이름 확인

     ② ELB DNS 이름으로 접속

6. AUTO SCALING 구축

전통적인 서버대신 IaaS를 사용할 경우 가장 큰 이점이 되는 AUTO SCALING을 적용해보도록 하겠습니다.

아래는 간단한 구성도 입니다.

1)   서버 부팅시 Tomcat 자동실행

      AUTO SCALING으로 자동 생성되는 EC2는 서버와 소스들은 전부 들어 있더라도 서비스가 시작되어 있지 않기 때문에 서버가 켜질 때 tomcat 서비스도 자동으로 실행이 되어야 합니다.

 

     ① tomcat1 서비스 생성

          vi /etc/rc.d/init.d/tomcat

    ② tomcat1 내용 작성

        #!/bin/bash

       # Startup script for the Tomcat Server

       # chkconfig: 345 50 50

       # description: Tomcat is a Web application server.

       # processname: java

       # directory : CATALINA_HOME=

       source /etc/profile

       export CATALINA_HOME=

       case "$1" in

              start)

                    echo "Starting tomcat: "

                    su - approot -c $CATALINA_HOME/bin/startup.sh

                    ;;

              stop)

                   echo "Shutting down tomcat: "

                   su - approot -c $CATALINA_HOME/bin/shutdown.sh

                    ;;

              restart)

                    echo "Restarting tomcat: "

                    su - approot -c $CATALINA_HOME/bin/shutdown.sh;

                    su - approot -c $CATALINA_HOME/bin/startup.sh

                    ;;

              *)

                   echo "Usage: service tomcat1 {start|stop|restart}"

                   exit 1

          esac

          exit 0

 

      ③ tomcat1 권한 변경

           chmod 755 tomcat

      ④ tomcat run level에 등록

          chkconfig --add tomcat

     ⑤ run level 에 등록되었는지 확인 (run level이 3,4,5 일 때 구동 된다.)

          chkconfig --list tomcat

 

2)   80 포트 사용하기

AUTO SCALING으로 자동 생성되는 EC2는 80 PORT로 ELB에 붙어 로드벨런싱이 되기 때문에 80으로 들어오는 트레픽을 tomcat 서비스 port로 연결을 해주어야 합니다.

 

     ① 방화벽 설정

        vim /etc/sysconfig/iptables

     ② 내용 변경

          # Generated by iptables-save v1.4.7 on

          *nat

           :PREROUTING ACCEPT [0:0]

           :POSTROUTING ACCEPT [32:2633]

           :OUTPUT ACCEPT [32:2633]

           -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

           COMMIT

           # Completed on

    ③ 설정한 방화벽 적용

         /etc/rc.d/init.d/iptables restart

    ④ iptables run level에 등록

        chkconfig --level 2345 iptables on

    ⑤ run level 에 등록되었는지 확인  

       chkconfig --list iptables

 

3)   AMI 생성하기

위의 설정을 마친 EC2 인스턴스로 AMI를 만들고 그 이미지로 EC2 인스턴스가 생성되어야만 AUTO SCALING이 정상 작동합니다.

     ① 인스턴스 우클릭 하여 이미지 생성

     ② 이미지 이름 및 볼륨 크기 설정

     ③ 생성된 AMI (1~5분 정도의 시간이 소요 됨)

4)   AUTO SCALING 시작 구성 생성

      ① AWS Management Console > 컴퓨팅 > EC2 > AUTO SCALING > 시작 구성 이동

      ② 시작구성생성  

      ③ 3) 에서 생성한 AMI 선택

      ④  cpu, 메모리 선택

      ⑤  시작 구성의 이름 지정

      ⑥ 스토리지 용량 및 볼륨 유형 지정

      ⑦ 방화벽 설정

      ⑧ 생성된 시작 구성 확인

 

5)   AUTO SCALING 그룹 생성

     ① AWS Management Console > 컴퓨팅 > EC2 > Auto SCALING > Auto Scaling 그룹이동

     ② Auto Scaling 그룹 생성

     ③ 4) 에서 생성한 시작 구성 지정

     ④  자동으로 만들어지는 인스턴스가 로드 밸런스로 들어오는 트래픽을 받을 수 있도록 로드 밸런서의 대상 그룹 지정

     ⑤  인스턴스가 몇개까지 늘어날지, 어떤 지표 상태에서 인스턴스가 추가가 될것인지 지정

     ⑥ Auto Scaling 그룹 생성

     ⑦ 생성된 Auto Scaling 그룹 확인

     ⑧ 시간이 지나면 자동으로 인스턴스가 0에서 1로 변한 것을 확인

     ⑨ 생성된 인스턴스 목록 확인

     ⑩ 인스턴스가 생성 될 시 활동 기록

     ⑪ 인스턴스가 삭제 될 시 활동 기록

 

7. 캐시서버 연결하기

 사용자의 지역과 서버의 지역이 같으면 페이지가 빠르게 로딩이 되지만 그렇지 않을 경우 매우 느리게 로딩이 됩니다. 이것을 해결 하기 위하여 캐시서버를 사용 하는데, Amazon에서는 CloudFront를 제공합니다. 속도 뿐만 아니라 캐시서버에서 응답을 대부분 처리하기 때문에 서버에 가해지는 트래픽이 감소하게 되는 이점이 있습니다. 지금까지 만들어진 서버에 CloudFront를 적용해 보겠습니다. 아래는 간단한 구성도 입니다.

1)   CloudFront 생성하기

     ① Create Distribution

     ② 전송 방식을 선택합니다.

         Web : 일반적인 웹서버, RTMP : 동영상 실시간 스트리밍

     ③ 오리진 설정

         오리진 도메인, 구분 ID 등 설정

     ④ 기본 캐시 동작 설정

         프로토콜, 캐시 유지기간, 쿠키 전달, 쿼리 문자열 전달, URL 제한 등 설정

     ⑤ 배포설정

         요금수준, 도메인 연결, SSL 인증서, Root 파일명, 접속로그, 메모 등 설정

     ⑥ 생성된 CloudFront

         배포가 모든 에지 로케이션에 전파되기 까지 약 15분~20분 소요

  2)   서비스 접속하기

 

8 . Jmeter로 성능 테스트 하기

APACHE 제단의 Open Source인 Jemeter는 서버의 성능을 측정하는 툴로 다양한 프로토콜을 지원하며, 서버의 Resouce 자원까지 모니터링이 가능하고, 다양한 plugin을 제공하고 있습니다. 또한 스크립트도 넣을수 있고, Max, Linux, Windows 에서 동작을 합니다. 여기서는 간략하게 사용방법을 알아보고, 직접 테스트까지 해보겠습니다.

 

1)   설치하기

     ① https://archive.apache.org/dist/jmeter/binaries/

        다운 받은 zip 파일 압축 해제

 

2)   실행

     ① /bin/jmeter 실행

 

3)   상단메뉴

 

4)   왼쪽 창

5)   비교 테스트

     ① 비교는 아래와 같이 요청 설정하였으며, 호출 간격은 1초를 주었고, 요청횟수는 20번을 요청하였습니다.

     ② 아래는 응답속도를 그래프로 나타낸 것이며, CloudFront = 전통 CloudFront > ELB > WEB = WAS > 전통 WEB 순으로 나왔습니다.

     ③ 아래는 각각의 평균 수치입니다.

 

 

 

 

New Multi-Channel Dynamic CMS