[AWS] 36. WEB-WAS 서버 구성(Apache & Tomcat)
ㅇ 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
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에 세션 아이디가 저장되어있기 때문에 이와 같이 세션 유지 가능