실습예제 풀이
리눅스 운영체제와 우리가 실습했던 Centos 환경은 약간의 다른 점이 있지만,
google 에 검색해보며 차이점을 해결하는 방법을 강구해야 한다.
<강사님 풀이>
wordpress 와 db를 먼저 연동시키고 인스턴스를 중지시키고 커스텀 AMI를 생성
Health Check - 주기를 적절히 수정해야한다
분명히 정상적인 health 를 가지고 있는데도 불구하고 응답시간이 조금 늦었다고 해서
ELB가 un-health 한 상태로 판단할 수 있기 때문임
타겟그룹으로 가서 health check를 보고 정상적으로 작동하는지에 대해 확인 할 수 있거나, 인스턴스 별로 생성되는 퍼블릭 IP를 크롬 접속창에 접속해서 확인 해 볼 수 있다.
정상적으로 wordpress 가 작동했지만, 타겟그룹 Health Check 부분에서는 unhealthy 가 떠있다
그 이유는?
Health Check Path 오류일 수 가 있음
인스턴스 하나 생성
이름 : tomcat
키페어 : rapa
vpc : rapa-vpc
서브넷 : rapa-vpc-pri-sub1
퍼블릭 IP 자동 할당 : 활성화 (정상적인 방법은 아님)
보안그룹 : rapa-vpc-pri-sg
정상적으로 접속 확인
Apache Tomcat 설치를 위한 패키지 설치
[ec2-user@ip-10-10-2-35 ~]$ sudo yum -y install java-1.8.0-openjdk.x86_64
[ec2-user@ip-10-10-2-35 ~]$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.zip
[ec2-user@ip-10-10-2-35 ~]$ ls
apache-tomcat-10.0.27.zip
[ec2-user@ip-10-10-2-35 ~]$ sudo unzip apache-tomcat-10.0.27.zip
# 압축 해제
[ec2-user@ip-10-10-2-35 ~]$ ls
apache-tomcat-10.0.27 apache-tomcat-10.0.27.zip
[ec2-user@ip-10-10-2-35 ~]$ sudo mv ./apache-tomcat-10.0.27 ./tomcat
#이름 변경
[ec2-user@ip-10-10-2-35 ~]$ sudo chmod 777 -R ./tomcat/
# 권한 부여
[ec2-user@ip-10-10-2-35 ~]$ cd tomcat/
[ec2-user@ip-10-10-2-35 tomcat]$ sudo ./bin/startup.sh
Using CATALINA_BASE: /home/ec2-user/tomcat
Using CATALINA_HOME: /home/ec2-user/tomcat
Using CATALINA_TMPDIR: /home/ec2-user/tomcat/temp
Using JRE_HOME: /
Using CLASSPATH: /home/ec2-user/tomcat/bin/bootstrap.jar:/home/ec2-user/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
# 톰캣 시작
[ec2-user@ip-10-10-2-35 tomcat]$ sudo chmod +x /etc/rc.d/rc.local
[ec2-user@ip-10-10-2-35 tomcat]$ sudo vi /etc/rc.d/rc.local
*****
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
sudo /home/ec2-user/tomcat/bin/startup.sh
*****
was 인스턴스를 2개 띄어서 ALB로 로드밸런싱 하되, web의 mode proxy와 Interal 로 로드밸런싱
되도록 해보자
풀이순서
1. 방금 생성한 톰캣 인스턴스를 중지시키고 이미지 Amazone AMI로 추출한다.
2. tomcat-img(AMI)로 인스턴스 tomcat1 , tomcat2 를 띄운다.
3. 베스천 호스트 생성 - 프라이빗 서브넷에 존재하는 톰캣 인스턴스들에게 접속 해서 파일 설정 위함
4. 베스천 호스트에 scp로 rapa-pri 키페어 전달
5. tomacat1 인스턴스에 접속
6. tomcat1 의 ROOT 경로에 test.jsp 파일을 생성하여 java html 파일을 생성
7. curl 명령어를 통해 test.jsp 가 성공적으로 적용됐는지 그리고, IP 주소가 노출되는지 확인
8. 성공적으로 적용이 됐다면 tomcat2 인스턴스에 접속
9. tomcat2 의 ROOT 경로에 test.jsp 파일을 생성하여 java html 파일을 생성
10. curl 명령어를 통해 test.jsp 가 성공적으로 적용됐는지 그리고, IP 주소가 노출되는지 확인
11. 두 인스턴스의 적용이 성공적으로 끝났다면, 로드밸런서 생성
12. 리스너 8080 포트 / 타겟 그룹은 was-tg의 이름으로 생성한다 마찬가지로 프로토콜은 8080 이며
health check 의 path 는 /test.jsp
13. 프로지비저닝이 완료됐다면, 베스천 호스트 서버의 쉘로 돌아가서 httpd 패키지 설치
14. httpd.conf 파일 수정 - mod_proxy를 심어주고, ProxyPassMatch 에서 방금 생성한
로드밸런서의 dns 앤드포인트를 입력 http://<dns>:8080
15. httpd 서비스 재시작
16. 베스천 호스트에서 curl <dns>:8080/test.jsp 입력해서 로드밸런싱이 되는지 확인
[ec2-user@ip-10-10-1-117 ~]$ sudo yum -y install httpd
[ec2-user@ip-10-10-1-117 ~]$ sudo vi /etc/httpd/conf/httpd.conf
************************************************************
# Enable HTTP/2 by default
#
# https://httpd.apache.org/docs/2.4/mod/core.html#protocols
<IfModule mod_http2.c>
Protocols h2 h2c http/1.1
</IfModule>
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyRequests On
ProxyPreserveHost On
<Proxy *>
Order Deny,allow
Allow from all
SetEnv force-proxy-request-1.0.1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
</Proxy>
ProxyPassMatch "^/.*\.(jsp|do)$" "http://internal-tomcat-alb-1275076679.ap-northeast-2.elb.amazonaws.com:8080/"
Timeout 120
</VirtualHost>
************************************************************
# tomcat 1 인스턴스로 접속
[ec2-user@ip-10-10-1-117 ~]$ ssh -i rapa-pri.pem ec2-user@10.10.2.125
Last login: Thu Dec 29 03:32:40 2022 from ip-10-10-1-117.ap-northeast-2.compute.internal
[ec2-user@ip-10-10-2-125 ~]$ cd tomcat/webapps/ROOT/
[ec2-user@ip-10-10-2-125 ROOT]$
[ec2-user@ip-10-10-2-125 ROOT]$ sudo vi test.jsp
**********************************************************************
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : <%= new java.util.Date()%>
<%@ page import="java.net.InetAddress" %><br>
<%InetAddress inet= InetAddress.getLocalHost();%>
WAS ip : <%=inet.getHostAddress()%>
</h2>
</body>
</html>
**********************************************************************
[ec2-user@ip-10-10-2-125 ROOT]$ curl 10.10.2.125:8080/test.jsp
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : Thu Dec 29 05:25:13 UTC 2022
<br>
WAS ip : 10.10.2.125
</h2>
</body>
</html>
# tomcat 2 인스턴스로 접속
[ec2-user@ip-10-10-1-117 ~]$ ssh -i rapa-pri.pem ec2-user@10.10.12.52
Last login: Thu Dec 29 03:43:25 2022 from ip-10-10-1-117.ap-northeast-2.compute.internal
[ec2-user@ip-10-10-12-52 ~]$ cd tomcat/webapps/ROOT/
[ec2-user@ip-10-10-12-52 ROOT]$ sudo vi test.jsp
*******************************************************
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : <%= new java.util.Date()%>
<%@ page import="java.net.InetAddress" %><br>
<%InetAddress inet= InetAddress.getLocalHost();%>
WAS ip : <%=inet.getHostAddress()%>
</h2>
</body>
</html>
*******************************************************
[ec2-user@ip-10-10-12-52 ROOT]$ curl 10.10.2.125:8080/test.jsp
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : Thu Dec 29 05:27:47 UTC 2022
<br>
WAS ip : 10.10.2.125
</h2>
</body>
</html>
<!!!! freenorm 에러 이슈로 놓친 부분이 있어 kyeongseo 님 Notion 참고!!!! - 도메인 주소 다름>
호스팅영역 - 레코드 생성
빠른 레코드 생성 단게에 값목록에 방금 만든 Web server IP 퍼블릭 IP 넣어주기
레코드를 생성했으면 freenom 에 값을 알려줘야 한다
3Tier 아키텍처를 구현해보자!
<우리가 사용할 것은 dbtest.jsp 파일>
<tomcat>
설치
sudo yum -y install java-1.8.0-openjdk.x86_64
sudo wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.zip
sudo unzip apache-tomcat-10.0.27.zip
sudo mv ./apache-tomcat-10.0.27 ./tomcat
sudo chmod 777 -R ./tomcat/
cd tomcat
sudo ./bin/startup.sh
cat test.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : <%= new java.util.Date()%>
<%@ page import="java.net.InetAddress" %><br>
<%InetAddress inet= InetAddress.getLocalHost();%>
WAS ip : <%=inet.getHostAddress()%>
</h2>
</body>
</html>
cat dbtest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<h1>DB</h2>
<%
Connection conn=null;
try{
String Url="jdbc:mysql://<DB주소>/db";
String Id="<DB유저>";
String Pass="<암호>";
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(Url,Id,Pass);
out.println("was-db Connection Success!");
}catch(Exception e) {
e.printStackTrace();
}
%>
—----------------------------
sudo vi /etc/httpd/conf/httpd.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ProxyRequests On
ProxyPreserveHost On
<Proxy *>
Order Deny,allow
Allow from all
SetEnv force-proxy-request-1.0.1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
</Proxy>
ProxyPassMatch "^/.*\.(jsp|do)$" "http://localhost:8080/"
Timeout 120
</VirtualHost>