[AWS] 36. WEB-WAS 서버 구성(Apache & Tomcat)

2020. 9. 18. 09:57AWS

반응형

ㅇ WEB 서버

    > 정적 서버 콘텐츠를 수행하는 서버로 웹 브라우저의 클라이언트로부터 HTTP 요청을 받아오는 역할 수행

 

ㅇ WAS 서버

    > 동적 서버 콘텐츠를 수행하는 서버로 일반적인 웹서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행

 

ㅇ 구성

    (0) 아키텍처

 

(1) Web 서버 구성(Apache)

    > Apache 설치 및 시작

        yum install -y httpd

        systemctl start httpd

 

    > External ALB 설정 및 연결

        * 각 서버의 Security Group에 80번 포트를 열어두어야 함

        * 경로를 index.html로 설정하여 서버 접근 시 시작 페이지를 index.html로 읽을 수 있도록 설정

 

    > index.html 생성

        cd /var/www/html

        vi index.html

<html>
<body>WEB-A 서버입니다.</body>
</html>

 

    > Health Check

        1) DNS를 통한 Health Check

            > External ALB의 DNS 주소를 통해 WEB서버의 시작페이지 호출가능

 

        2) curl 명령어를 통한 Health Check

            > curl -v (External ALB 주소)의 결과로 HTTP 200이라는 결과와 HTML 코드가 출력되는 것을 통해 Health Check 가능

 

(2) Was 서버 구성(Tomcat)

    > 톰캣 다운로드 

        * 링크: https://tomcat.apache.org/download-80.cgi (링크가 사라졌을 경우, https://tomcat.apache.org/ 에서 직접 다운로드)

 

    > scp명령어를 통해 public 인스턴스에서 private 인스턴스의 /usr/local/src 경로로 파일 이동

        scp -i (Keypair) (인스턴스 내 Tomcat 설치 경로)/(Tomcat.tar.gz) ec2-user@(Private 인스턴스 IP):(이동 경로)

 

    > 파일 압축 해제

        tar xvzf apache-tomcat-8.5.47.tar.gz

 

    > 심볼릭 링크 생성

        ln -s apache-tomcat-8.5.47 tomcat

 

    > 자바 다운로드

        * 링크: https://www.oracle.com/java/technologies/javase-jdk14-downloads.html (링크가 사라졌을 경우, https://www.oracle.com 에서 직접 다운로드)

 

    > Tomcat과 마찬가지로 Was 서버가 될 Private 인스턴스의 /usr/local/src로 이동 및 압축 해제

        tar svzf jdk-14_linux-x64_bin.tar.gz

 

    > 톰캣 및 JDK 경로 설정

        vim /etc/profile

 

        export JAVA_HOME=/usr/local/src/jdk-14

        export CATALINA_HOME=/usr/local/src/tomcat

 

    > 경로 확인

        source /etc/profile

        echo $JAVA_HOME

        echo $CATALINA_HOME

 

    > Tomcat 서비스 등록

        cd /etc/init.d

        vi tomcat

 

        * tomcat 파일에는 아래의 내용 추가 후 저장

#!/bin/bash
# Startup script for the Tomcat Server
# chkconfig : 345 50 50
# description: Tomcat is a Web application server.
# processname : java
# directory :
CATALINA_HOME=/usr/src/tomcat
export JAVA_HOME=/usr/src/jdk-14
export CATALINA_HOME=/usr/src/tomcat
case "$1" in
start)
echo "Starting tomcat: "
$CATALINA_HOME/bin/startup.sh
;;
stop)
echo "Shutting down tomcat: "
$CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo "Restarting tomcat: "
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
;;
*)
echo "Usage: service tomcat
start|stop|restart
exit 1
esac
exit 0

        chmod 755 tomcat

        service tomcat start

 

    > Security Group에는 8080포트를 Open

 

    > WAS 서버의 index.html 생성

        cd /usr/local/src/tomcat/webapps/ROOT

        vi index.html

<html>
<body>WAS-A 서버입니다.</body>
</html>

 

(3) WEB 서버와 WAS 서버 상태 확인

    > External ALB의 대상 그룹에서 WEB 서버와 ALB의 연결 상태 확인

 

    > Internal ALB의 대상 그룹에서 WAS 서버와 ALB의 연결 상태 확인

 

(4) WEB서버 - Internal ALB - WAS서버 연동

    > WEB서버 내부에 httpd.conf 파일에 코드 추가

        vi /etc/httpd/conf/httpd.conf

###New Configuration
<VirtualHost *:80>
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://internal-int-alb-232790873.ap-northeast-2.elb.amazonaws.com:8080/ disablereuse=on
    ProxyPassReverse / http://internal-int-alb-232790873.ap-northeast-2.elb.amazonaws.com:8080/
</VirtualHost>

 

    > 설정파일 검증 및 서비스 재시작

        1) WEB 서버

            httpd -t

            systemctl restart httpd.service

 

        2) WAS 서버

            cd /usr/local/src/tomcat/bin

            ./shutdown.sh

            ./startup.sh

 

        * 위의 과정을 모두 마쳤을 경우, External ALB의 DNS로 접근했을 시, WAS-A와 WAS-C의 시작페이지가 번갈아가며 출력됨

 

(5) Redis 서버 설치

    > [EalstiCache 서비스] - [Redis] - [생성] 선택 후 기본 옵션만을 선택해 Redis 생성

        * 이번 실습에서 노드 유형은 가장 작은 t2.micro로 생성함

 

 

    > Redis 생성이 성공하면 다음과 같은 정보 확인 가능

 

    > telnet 명령어를 통해 redis 접속 및 사용 가능

        telnet (redis 기본 엔드포인트 주소) (포트번호)

 

(6) WAS 서버 - Tomcat 연동 및 세션 클러스터링

    > 세션 유지 확인을 위한 jsp파일 생성

        cd /usr/local/src/tomcat/webapps/examples

        vi sessionExam.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
http://www.w3.org/TR/html4/loose.dtd>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Session Exam</title>
</head>
<body>
[Site C(WAS-C)]
session id = <%= session.getId() %>

<%      Integer counter = (Integer)session.getAttribute("counter");
        counter = ( counter == null )
                ? new Integer(1) : new Integer(counter.intValue() + 1);
        session.setAttribute("counter",counter);
%>
counter = <%= session.getAttribute("counter") %>
Host = <%= java.net.InetAddress.getLocalHost() %>
</body>
</html>

 

        * WAS-A 서버는 [Site A(WAS-A)], WAS-C 서버는 [Site C(WAS-C)]로 설정

 

    1) StickySession X, Redis X

        > 반복적으로 새로고침 수행 시 세션 아이디와 서버가 변경되는 것을 확인 가능

            (External ALB DNS 주소)/exampeles/sessionExam.jsp

 

 

 

        > Internal ALB의 대상 그룹에서 Sticky Session 설정

            * Classic Load Balancer의 경우 [로드밸런서] 탭에서 설정 가능

 

    2) StickySession O, Redis X

        > Sticky Session으로 인해 서버와 세션 ID가 고정되는 것을 확인 가능

 

 

 

 

        > Redis 다운로드 및 압축 해제

            cd /home/ec2-user

            wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/2.0.4/tomcat-cluster-redis-session-manager.zip

            unzip tomcat-cluster-redis-session-manager.zip

 

        > conf, lib 디렉토리 파일 복사

            cd /home/ec2-user/tomcat-cluster-redis-session-manager/conf

            cp redis-data-cache.properties /usr/local/src/tomcat/conf/

            cd /home/ec2-user/tomcat-cluster-redis-session-manager/lib

            cp * /usr/local/src/tomcat/lib/

 

    > conf파일 Endpoint 수정

            vi /usr/local/src/tomcat/conf/redis-data-cache.properties

            [변경 전]

 

            [변경 후]

 

        > context.xml 수정

            vi /usr/local/src/tomcat/conf/context.xml

            [변경 전]

 

            [변경 후]

 

    > web.xml 수정

        vi /usr/local/src/tomcat/webapps/examples/WEB-INF/web.xml

        [변경 전]

 

        [변경 후]

 

    > Tomcat 재기동

        cd /usr/local/src/tomcat/bin

        ./shutdown.sh

        ./startup.sh

 

3) StickySession O, Redis O

    > Sticky Session 설정으로 반복적으로 새로고침을 수행해도 세션 아이디와 서버가 변경되지 않음을 확인 가능

        * 연동된 Redis에 세션 아이디가 저장되어있기 때문에 이와 같이 세션 유지 가능

 

반응형

'AWS' 카테고리의 다른 글

[AWS EC2] 38. AutoScaling 정책  (0) 2020.09.24
[AWS] 37. yum과 wget의 차이  (0) 2020.09.22
[AWS] 35. Tomcat 설치  (0) 2020.09.14
[AWS] 34. 윈도우 AD(Active Directory)  (0) 2020.09.09
[AWS WAF & Shield] 33. WAF & Shield  (0) 2020.07.30