출처: https://blog.naver.com/sunguru/220934694128
■ 사전 지식 수준 요구 조건
이 게시물에서 설명하는 것을 이해하기 위해 아래와 같은 지식이 사전에 필요하다.
* 리눅스 기초 ( CentOS 6.6, 7.3 ) * 리눅스 관리 ( CentOS 6.6, 7.3 ) * 리눅스 네트워크 ( CentOS 6.6, 7.3 ) |
이 게시물에서 아파치 톰캣(Apache Tomcat) 설치 및 아파치 웹 (Apache HTTP)와 연동 구성을 하는 방법에 대해 간단하게 기술한다. CentOS 7.3 리눅스 네트워크 내용에서는 WEB - WAS - DB 1:1 구조로 구성을 했었다. 하지만 실무 환경에서는 이중화 또는 WEB, WAS 다중화와 DB 이중화로 구성되어 있다.
그래서 WEB, WAS 이중화 구성을 위해 각 역할을 하는 가상머신을 각각 두 대씩 만든 것이다. 아파치 톰캣 같은 경우 세션 클러스터(Session Cluster)까지 구성해야 완전한 이중화 구성이 된다. 아니면 하나의 아파치 톰캣 서버가 물리적으로 장애 나는 경우 그 서버에 연결되고 있는 세션 정보가 다 날아가기 때문이다. 세션 클러스터는 나중에 다뤄보도록 할 것이다. 우선 서버 인프라 뼈대 만드는 것을 최우선으로 할 것이다.
■ WAS01, WAS02 가상머신에 아파치 톰캣(Apache Tomcat) 설치
WAS01과 WAS02 가상머신에 CentOS 7.3 리눅스 DVD IOS 파일을 연결한 후 아래와 같은 명령을 사용하여 아파치 톰캣(Apache Tomcat) 설치를 한다. 그리고 서비스 시작 후 접속 테스트를 해본다.
[root@was01 ~]# cd /etc/yum.repos.d/ [root@was01 yum.repos.d]# vi CentOS-Media.repo [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///run/media/root/CentOS\ 7\ x86_64/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@was01 yum.repos.d]# yum -y --disablerepo=\* --enablerepo=c7-media install tomcat tomcat-webapps [root@was01 yum.repos.d]# firewall-cmd --permanent --zone=public --add-port=8080/tcp [root@was01 yum.repos.d]# firewall-cmd --permanent --zone=public --add-port=8009/tcp [root@was01 yum.repos.d]# firewall-cmd --reload [root@was01 yum.repos.d]# systemctl enable tomcat [root@was01 yum.repos.d]# systemctl start tomcat [root@was01 yum.repos.d]# systemctl status tomcat ● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (running) since 월 2017-02-13 15:14:39 KST; 10s ago Main PID: 40354 (java) CGroup: /system.slice/tomcat.service └─40354 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/sh... [root@was01 yum.repos.d]# |
호스트 또는 다른 가상머신의 웹 브라우저를 열어 톰켓(Tomcat)에 접속 테스트를 한다. URL을 입력할 때 도메인 또는 IP 주소 뒤에 8080 포트를 명시하는 것을 잊지 말자.
■ 아파치 웹(HTTP)와 톰캣(Apache Tomcat) 연동
이 게시물에 첨부된 mod_jk.so.Z 파일을 내받아 드래그 앤 드롭으로 또는 FTP 를 사용하여 WEB01, WEB02 가상머신에 업로드한다. 그리고 아래와 같이 명령을 실행하여 Apache HTTP의 모듈 디렉터리에 mod_jk.so 파일을 이동시킨다.
[root@web01 ~]# ls mod_jk.so.Z mod_jk.so.Z [root@web01 ~]# uncompress mod_jk.so.Z [root@web01 ~]# mv mod_jk.so /usr/lib64/httpd/modules/ |
아래와 같은 명령을 실행하여 mod_jk를 가지고 아파치 웹 (Apache HTTP)와 톰캣 (Tomcat_ 을 연동하기 위해 WEB01, WEB02에 관련 파일들을 구성한다.
root@web01 ~]# cd /etc/httpd/conf.modules.d/ [root@web01 conf.modules.d]# vi 00-modjk.conf LoadModule jk_module modules/mod_jk.so [root@web01 conf.modules.d]# vi 00-proxy.conf #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so <= 주석 처리 [root@web01 conf.modules.d]# [root@web01 conf.modules.d]# cd ../conf.d/ [root@web01 conf.d]# vi mod_jk.conf JkWorkersFile /etc/httpd/conf/workers.properties JkShmFile /var/run/httpd/mod_jk.shm JkLogFile /var/log/httpd/mod_jk.log JkLogLevel info [root@web01 conf.d]# cd ../conf [root@web01 conf]# vi workers.properties worker.list=router worker.router.type=lb worker.router.balance_workers=worker1,worker2 # first worker.worker1.type=ajp13 worker.worker1.host=was01 worker.worker1.port=8009 worker.worker1.lbfactor=1 worker.worker1.redirect=worker2 # second worker.worker2.type=ajp13 worker.worker2.host=was02 worker.worker2.port=8009 worker.worker2.lbfactor=1 worker.worker2.redirect=worker1 [root@web01 conf]# vi httpd.conf <VirtualHost *:80> JkMount /*.jsp router JkMount /*.png router <=== 제일 아래에 내용 추가 JkMount /*.jpg router </VirtualHost> [root@web01 conf]# |
구성 파일 생성 및 수정을 완료하였다면 변경 적용을 위해 아래와 같은 명령을 실행하여 Apache HTTP를 재실행한다.
[root@web01 conf]# systemctl stop httpd [root@web01 conf]# systemctl start httpd |
■ 아파치 웹(HTTP)와 톰캣(Apache Tomcat) 연동 테스트
호스트 또는 다른 가상머신의 웹 브라우저를 열어 URL 창에 L401 가상머신 주소인 192.168.80.3을 입력한다. 그럼 아래와 같이 WEB01, WEB02 가상머신의 index.html 파일 내용이 출력될 것이다.
F5 키를 누르면 web01가 web02가 변경되면서 내용이 출력될 것이다. 이렇게 출력되는 것은 HAProxy를 사용하여 웹 서버 부하 분산을 위한 라운드 로빈(Round Robin) 알고리즘 때문이다. 이번에는 URL에 http://192.168.80.3/index.jsp를 입력하여 접속해보자. 마찬가지로 F5 키를 누르면 was01과 was02가 번갈아 가면서 접속되는 것을 알 수 있다.
어떻게 알 수 있느냐? was01과 was02 서버의 /usr/share/tomcat/webapps/ROOT/ 디렉터리에 있는 index.jsp 파일 내용을 아래와 같이 수정했기 때문이다. index.jsp 웹 페이지가 열릴 때 타이틀에 WAS01 또는 WAS02가 나타나기 때문에 어떤 WAS 서버로 접속했는지 알 수 있게 되는 것이다.
<head> <title>WAS01-<%=request.getServletContext().getServerInfo() %></title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head> |
■ 아파치 웹(HTTP)와 톰캣(Apache Tomcat) 장애 테스트
각 WEB 서버 httpd.conf 구성 파일에 내용을 아래와 같이 설정하였기 때문에 jsp, png, jpg 파일 요청에 대해서만 AJP 프로토콜(8009 포트 통신)을 사용하여 WAS 서버로 관련 파일에 대한 서비스 요청을 보내는 것이다. 나머지에 대해서는 WEB 서버가 처리하게 된다.
<VirtualHost *:80> JkMount /*.jsp router JkMount /*.png router <=== 제일 아래에 내용 추가 JkMount /*.jpg router </VirtualHost> |
다시 말해 index.html은 WEB 서버에 있는 파일 내용이 출력된다. 그리고 index.jsp는 WAS 서버에 있는 파일 내용이 출력됩니다. 이렇게 함으로 해서 장애 유도 시 서비스 에러가 나면 어느 부분이 문제가 있는지 알 수 있게 된다. 장애는 쉽게 발생시킬 수 있다. 아래 그림과 같이 VMware Workstation 창의 우측 하단에 네트워크 아이콘이 있는데 이것을 connect 또는 disconnect로 변경하면 네트워크 장애 발생 또는 장애 처리를 만들 수 있게 되는 것이다.
'프로그램 활용 > 웹서버' 카테고리의 다른 글
[TOMCAT] 톰캣 세션 클러스터링 테스트 (1) | 2023.10.24 |
---|---|
아파치 톰캣 세션 클러스터링 (1) | 2023.10.24 |
서버 이중화 (0) | 2023.10.24 |
Tomcat - 웹서버 연동 (0) | 2023.10.24 |
아파치 톰캣 (Apache Tomcat) 란? (0) | 2023.10.24 |