클라우드 | 가상화/AWS

AWS - 4. 이중화(ALB) 및 Tomcat 설치

mamdragors 2025. 12. 9. 18:44

 

이중화(ALB)

다음과 같은 구성으로 2중화를 진행할 것이다.
보안 서버는 공인아이피로 접속하고 NAT 게이트웨이를 통해 was 서버에 접속할 것임
web 서버는 공인아이피를 할당받아 다이렉트로 접속해도 되고 보안서버를 통해 접속해도 됨
web 서버는 2A, 2C  2개의 인스턴스를 생성하고 로드밸런서를 통해 하나의 도메인으로 서비스 되도록 할 것임.

*NAT (Network Address Translation) : 공인 IP 를 사설 IP 로 바꿔준다

 
1. VPC 영역을 생성한다.

이름 : JON-PRD-VPC
IPv4 CIDR 블록 : 10.250.0.0/16
[VPC생성]

 
2. 서브넷을 5개 생성한다.
 

VPC > 서브넷 [서브넷 생성]
VPC  ID : JON-PRD-VPC

서브넷 이름 가용 영역 IPv4 서브넷 CIDR 블록
JON-PRD-VPC-NGINX-PUB-2A 아시아 태평양(서울) ap-northeast-2a 10.250.1.0/24
JON-PRD-VPC-BASTION-PUB-2A 아시아 태평양(서울) ap-northeast-2a 10.250.4.0/24
JON-PRD-VPC-NGINX-PUB-2C 아시아 태평양(서울) ap-northeast-2c 10.250.11.0/24
JON-PRD-VPC-TOMCAT-PRI-2A 아시아 태평양(서울) ap-northeast-2a 10.250.2.0/24
JON-PRD-VPC-TOMCAT-PRI-2C 아시아 태평양(서울) ap-northeast-2c 10.250.12.0/24

 

 

3. 인터넷 게이트웨이 생성

VPC > 인터넷 게이트웨이 
[인터넷 게이트웨이 생성] 클릭
 
이름 태그 : JON-PRD-IGW
[인터넷 게이트웨이 생성] 클릭

 
 

4. NAT 게이트웨이 생성

* 보안 서버(BASTION) 에서 private 서버에 접속하기 위해 공인 ip 를 사설 ip 로 변경해야 한다.
 
VPC > NAT 게이트웨이 > [NAT게이트웨이 생성] 클릭
 
이름 : JON-PRD-NGW-2A
가용성 모드 : 리전별 -신규
VPC : JON-PRD-VPC
연결유형 : 퍼블릭
탄력적 IP : 자동
[NAT 게이트웨이 생성] 클릭

 

5. 라우팅 테이블 생성

VPC> 라우팅 테이블 > [라우팅 테이블 생성]
 
VPC : JON-PRD-VPC
아래 2개 이름으로 생성
JON-PRD-RT-PUB
JON-PRD-RT-PRI

 
목록에서 JON-PRD-RT-PUB  선택 > 라우팅 탭 > [라우팅 편집] 클릭
[라우팅 추가]
대상 : 0.0.0.0/0
인터넷 게이트웨이 선택
JON-PRD-IGW 선택

목록에서 JON-PRD-RT-PUB  선택 > 서브넷 연결 탭 > [서브넷 연결 편집] 클릭 
아래 3개 선택하고 [연결 저장]
JON-PRD-VPC-NGINX-PUB-2A 
JON-PRD-VPC-NGINX-PUB-2C
JON-PRD-VPC-BASTION-PUB-2A

 
목록에서 JON-PRD-RT-PRI  선택 > 라우팅 탭 > [라우팅 편집] 클릭
[라우팅 추가]
대상 : 0.0.0.0/0
NAT 게이트웨이 선택
JON-PRD-NGW-2A 선택


목록에서 JON-PRD-RT-PRI  선택 > 서브넷 연결 탭  > [서브넷 연결 편집] 클릭
아래 2개 선택하고 [연결 저장]
JON-PRD-VPC-TOMCAT-PRI-2A
JON-PRD-VPC-TOMCAT-PRI-2C

 

6. 보안그룹 생성

서브넷 마다 보안그룹 필요 + 로드밸런서용 보안그룹. 총 6개의 보안 그룹을 생성해야 한다.

 
VPC : JON-PRD-VPC  모두 동일하게 선택
보안그룹 이름, 설명(이름과 동일) 만 입력하고 생성한다. 생성후 편집 

보안그룹 이름, 설명  참고
JON-PRD-VPC-NGINX-PUB-SG-2A  NGINX서버 2A 용 보안그룹
JON-PRD-VPC-NGINX-PUB-SG-2C NGINX서버 2C 용 보안그룹
JON-PRD-VPC-BASTION-PUB-SG-2A BASTION 서버 용 보안그룹
JON-PRD-VPC-TOMCAT-PRI-SG-2A 톰켓서버 2A 용 보안그룹
JON-PRD-VPC-TOMCAT-PRI-SG-2C 톰켓서버 2C 용 보안그룹
JON-PRD-ALB-SG Application load balancer 용 보안그룹

 

 
 

목록에서 JON-PRD-ALB-SG 선택. 인바운드 규칙 탭 > [인바운드 규칙 편집]
HTTP,
HTTPS 추가

 
JON-PRD-VPC-BASTION-PUB-SG-2A  선택.인바운드 규칙 탭 > [인바운드 규칙 편집]
모든  ICMP -IPV4,
SSH 추가

 
JON-PRD-VPC-NGINX-PUB-SG-2A  선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
모든  ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

 

JON-PRD-VPC-NGINX-PUB-SG-2C  선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
모든  ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

 
JON-PRD-VPC-TOMCAT-PRI-SG-2A 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
사용자 지정 TCP (포트 8080), 
모든  ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

JON-PRD-VPC-TOMCAT-PRI-SG-2C 선택 . 인바운드 규칙 탭 > [인바운드 규칙 편집]
사용자 지정 TCP (포트 8080), 
모든  ICMP -IPV4,
SSH,
HTTP,
HTTPS 추가

 

7. EC2 인스턴스 생성

EC2  > 인스턴스 [인스턴스 시작]
어플리케이션 및 OS 이미지 : Ubuntu    22.04LTS
인스턴스 유형 : t3.micro
키페어 : 본인 키페어 선택
네트워크 설정 > [편집] 클릭
VPC : JON-PRD-VPC

이름 , 서브넷 (동일하게 입력, 선택) 퍼블릭IP
자동 할당
보안그룹 기본 IP
JON-PRD-VPC-NGINX-PUB-2A 활성화 JON-PRD-VPC-NGINX-PUB-SG-2A 10.250.1.0/24
JON-PRD-VPC-BASTION-PUB-2A 활성화 JON-PRD-VPC-BASTION-PUB-SG-2A 10.250.4.0/24
JON-PRD-VPC-NGINX-PUB-2C 활성화 JON-PRD-VPC-NGINX-PUB-SG-2C 10.250.11.0/24
JON-PRD-VPC-TOMCAT-PRI-2A 비 활성화 JON-PRD-VPC-TOMCAT-PRI-SG-2A 10.250.2.0/24
JON-PRD-VPC-TOMCAT-PRI-2C  활성화 JON-PRD-VPC-TOMCAT-PRI-SG-2C 10.250.12.0/24

 

 
생성 완료후 목록

 
생성된 인스턴스 중 nginx 2a, 2c 서버에 nginx 를 설치하고 설정하는 것은
아래 페이지참고
https://mamdragors.tistory.com/m/27

 

AWS - 3. NGINX 설치 및 이중화(CLB)

AWS 에서 VPC 를 생성했으므로 생성된 서버에 접속하여 Nginx 를 설치해볼 것이다. vpc 생성은 아래 참고https://mamdragors.tistory.com/25 AWS - 2. VPC생성하여 쉘접속아래 작업을 진행할 것이다. 1. 도메인생성

mamdragors.tistory.com

 

8. 로드 밸런싱 생성(ALB)

EC2 > 로드 밸런서 > [로드밸런서 생성]

로드 밸런서 유형 : Applicatino Load Balancer 
로드 밸런서 이름 : JON-PRD-ALB
체계 : 인터넷 경계
로드 밸런서 IP 주소 유형 : IPv4
네트워크 매핑
    - VPC : JON-PRD-VPC
    - 가용 영역 및 서브넷
        ap-northeast2-2a    :   JON-PRD-VPC-NGINX-PUB-2A
        ap-northeast2-2c    :   JON-PRD-VPC-NGINX-PUB-2C
보안그룹 : JON-PRD-ALB-SG
리스너 및 라우팅
    - HTTP:80  -  대상 그룹 JON-PRD-ALB-TG
    - HTTPS:443   -  대상 그룹 JON-PRD-ALB-TG
보안 리스너 설정
    - 인증서(ACM에서) : 생성한 인증서 선택
 
[로드밸런서 생성] 클릭

 
목록에서 JON-PRD-ALB 활성 상태 확인

 
 

9. 호스팅 영역 레코드 생성

 
Route 53 > 호스팅 영역 > 호스팅 영역 이름 의 링크 클릭
호스팅 영역 세부정보 화면에서 [레코드 생성] 클릭
2개 레코드 추가 (레코드 이름 없이1개, 레코드 이름 www 1개)
레코드 유형 : A
별칭 : 활성화
트래픽 라우팅 대상 : Application/Classic Load Balancer, 
아시아 태평양(서울)
JON-PRD-ALB
 
 

 
목록에서 생성된 레코드 확인

 
https://도메인 으로 접속 되는것을 확인한다.

 
여기까지 ALB 이중화 끝.


 

TOMCAT 서버 설정

 

1. 보안 키파일 복사

JON-PRD-VPC-TOMCAT-PRI-2A, JON-PRD-VPC-TOMCAT-PRI-2C 인스턴스 생성시 지정한 키페어의 .pem 파일이 필요하다.
지정한 키페어를 생성시 PC 에 다운로드 해 두었다면 해당 파일을 BASTION 서버에 FTP 로 업로드 한다.
 
[ 아래는 xshell 프로그램을 사용한 방법 ]
 
BASTION 에 접속한 상태에서 FTP 아이콘 클릭

 
***.pem 파일을 /home/ubuntu 폴더에 업로드 한다.

 

BASTION 으로 접속된 쉘에서 pem 파일의 권한을 변경한다.

sudo -i
chmod 400 파일명.pem

 
pem 키를 숨김 폴더로 이동 한다. /home/ubuntu /.ssh 

mv 파일명.pem ~/.ssh/
또는
mv 파일명.pem ./.ssh/

 
ssh 로 단축 접속 하기 위한 설정파일을 만든다

vi /home/ubuntu /.ssh/config

------------- 내용 -------------

Host nginx2a
    HostName 10.250.1.240
    User ubuntu
    IdentityFile ~/.ssh/jongnoaws.pem
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host nginx2c
    HostName 10.250.11.240
    User ubuntu
    IdentityFile ~/.ssh/jongnoaws.pem
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host tomcat2a
    HostName 10.250.2.240
    User ubuntu
    IdentityFile ~/.ssh/jongnoaws.pem
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host tomcat2c
    HostName 10.250.12.240
    User ubuntu
    IdentityFile ~/.ssh/jongnoaws.pem
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

------------- 내용 끝 -------------

 

또는  /etc/ssh/ssh_config 파일 하단에 추가하여 모든 계정에서 접속 가능하도록 설정할 수도 있다.

이때 pem 의 경로는 절대경로로 설정한다. 그러나 모든 계정에게 열어주면 보안에 안좋겠지.

vi + /etc/ssh/ssh_config


설정파일을 만든 후 ssh 서비스를 재시작 한다.

sudo systemctl restart ssh

 

2. ssh 접속

  내부 IP
JON-PRD-VPC-TOMCAT-PRI-2A 10.250.2.240
JON-PRD-VPC-TOMCAT-PRI-2C 10.250.12.240

 
BASTION ip 로 접속하여 ssh 로 Tomcat2A, Tomcat2C 에 접속한다.
ip 를 지정하여 접속하거나    ssh -i (자신의 펨키 이름) (계정명)@내부IP

ssh -i /home/ubuntu/.ssh/파일명.pem ubuntu@10.250.2.240
ssh -i /home/ubuntu/.ssh/파일명.pem ubuntu@10.250.12.240

 
alias 를 이용할 수도 있다. alias 를 이용한 접속은 ubuntu 계정 상태일때 사용 가능하다.

ssh tomcat2a
ssh tomcat2c

 
2.240 서버와 12.240 서버 둘 다에서 진행
root 계정으로 변경하고 apt update

 

3. JDK 설치( 2A, 2C 둘다 진행)

sudo apt install openjdk-11-jdk -y

 

4. 환경변수 추가 ( 2A, 2C 둘다 진행)

맨 아래 추가한다.

sudo vim + /etc/profile

---- 추가할 내용 ----
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar

 
 

4. TOMCAT 설치 ( 2A, 2C 둘다 진행)

apt 로 목록을 한번 확인하고

 
아카이브에서 파일을 다이렉트로 다운로드 받는다

wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.108/bin/apache-tomcat-9.0.108.tar.gz

 
그룹추가, 폴더추가, 추가한 폴더에 압축해제, 유저 추가

sudo groupadd tomcat
sudo mkdir /home/tomcat
sudo tar -xf apache-tomcat-9.0.108.tar.gz -C /home/tomcat/
sudo useradd -s /usr/sbin/nologin -g tomcat -d /home/tomcat tomcat
ls /home/tomcat/apache-tomcat-9.0.108/

 

 
tomcat 설정파일 생성

sudo vi /etc/systemd/system/tomcat.service

----- 내용 -----
[Unit]
Description=Apache Tomcat 9.0 Web Application Container
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Environment=CATALINA_PID=/home/tomcat/apache-tomcat-9.0.108/temp/tomcat.pid
Environment=CATALINA_HOME=/home/tomcat/apache-tomcat-9.0.108
Environment=CATALINA_BASE=/home/tomcat/apache-tomcat-9.0.108
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/home/tomcat/apache-tomcat-9.0.108/bin/startup.sh
ExecStop=/home/tomcat/apache-tomcat-9.0.108/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

----- 내용 끝-----

 

 
설정 적용

sudo systemctl daemon-reload
sudo systemctl enable tomcat.service


그룹, 소유자, 권한 변경

sudo chgrp -R tomcat /home/tomcat/
sudo chown -R tomcat /home/tomcat/
sudo chmod +x /home/tomcat/apache-tomcat-9.0.108/bin/*.sh

 
서비스 시작

sudo systemctl start tomcat

 
 
Tomcat 설치가 완료되면 curl 명령어를 통해 테스트 가능. html 페이지가 출력된다.

curl localhost:8080