RHEL7 기반 Jboss, apache 연동 방법
1. JDK 설치
1.7.X 이상의 경우 openjdk 를 사용하는것도 무방함. 이하 (1.6.X 이하) 의 경우 oracle jdk 사용할 것을 권고 (oracle jdk 설치 시 /etc/profile.d/java.sh 생성이 필요할 수도 있음)
shell# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
2. jboss 설치
http://jbossas.jboss.org/downloads
shell# wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz
shell# tar xvzf jboss-as-7.1.1.Final.tar.gz -C /opt
# chkconfig service 를 위한 설정
shell# mkdir /etc/jboss-as
shell# vi /etc/jboss-as/jboss-as.conf
JBOSS_HOME=/opt/jboss-as-7.1.1.Final
JBOSS_USER=root
STARTUP_WAIT=10
SHUTDOWN_WAIT=10
# chkconfig service 등록 및 시작
shell# cp /opt/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss
shell# chkconfig jboss on
shell# service jboss start
# jboss management user 수동 생성
shell# cd /opt/jboss-as-7.1.1.Final/bin
shell# ./add-user.sh
# 노드 추가시에는 아래 파일 복사하여 사용 가능
/opt/jboss-as-7.1.1.Final/standalone/configuration/mgmt-users.properties
/opt/jboss-as-7.1.1.Final/domain/configuration/mgmt-users.properties
# 기본적으로 localhost 에서만 접근 가능함으로 아래 설정 변경
shell# vi /opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml
<interface name=”management”>
<!– <inet-address value=”${jboss.bind.address.management:127.0.0.1}”/> –>
<any-ipv4-address/>
</interface>
<interface name=”public”>
<!– <inet-address value=”${jboss.bind.address:127.0.0.1}”/> –>
<any-ipv4-address/>
</interface>
# .jsp 사용 가능하게
shell# vi /opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml
<deployment-scanner path=”deployments” relative-to=”jboss.server.base.dir” scan-interval=”5000″/>
<deployment-scanner path=”deployments” relative-to=”jboss.server.base.dir” scan-interval=”5000″ auto-deploy-exploded=”true”/>
# ROOT directory 변경
shell# vi /opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml
설정 부분에 아래 붉은색 추가, 수정
<subsystem xmlns=”urn:jboss:domain:web:1.1″ default-virtual-server=”default-host” native=”false”>
<configuration>
<jsp-configuration development=”true” check-interval=”1″ modification-test-interval=”1″ recompile-on-fail=”true” />
</configuration>
<connector name=”http” protocol=”HTTP/1.1″ scheme=”http” socket-binding=”http”/>
<virtual-server name=”default-host” enable-welcome-root=”false”>
<alias name=”localhost”/>
<alias name=”example.com”/>
</virtual-server>
</subsystem>
# ROOT directory 생성 및 테스트 jsp 작성 (디렉토리명이 .war 로 생성되어야 함)
shell# mkdir /opt/jboss-as-7.1.1.Final/standalone/deployments/ROOT.war
shell# vi /opt/jboss-as-7.1.1.Final/standalone/deployments/ROOT.war/nowTime.j네
<%@ page contentType=”text/html; charset=UTF-8″%>
<html>
<head><title>HELLO WORLD</title></head>
<body>
현재 시간: <%= new java.util.Date() %>
</body>
</html>
# jsp 를 위한 환경설정 적용하여 재시작
shell# service jboss restart
# 기타
/var/log/jboss-as/console.log
3. apache + mod_jk 설치 및 연동
# apache 설치 (RHEL-7.3, apache-2.4.6)
shell# yum install httpd httpd-devel httpd-tools
# mod_jk 설치
shell# wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
shell# tar xvzf tomcat-connectors-1.2.42-src.tar.gz
shell# cd tomcat-connectors-1.2.42-src/native
shell# ./configure –with-apxs=/usr/bin/apxs
shell# make
shell# make install
# apache mod_jk 모듈 로딩 및 mod_jk 관련 설정
shell# vi /etc/httpd/conf.d/mod_jk.conf
=========================================== mod_jk.conf ===========================================
# mod_jk 모듈 로드
<IfModule !mod_jk.c>
LoadModule jk_module modules/mod_jk.so
</IfModule>
# jk 로그파일 위치 지정
JkLogFile logs/mod_jk.log
# jk 로그레벨 설정 [debug|error|info]
JkLogLevel info
# jk 로그 포맷 설정
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “
JkRequestLogFormat “%w %V %T”
# JkOptions 지정
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# worker 파일 위치 지정, 아래는 APACHE_HOME/conf.d 아래에 위치하는 것으로 가정
JkWorkersFile conf.d/workers.properties
# uri 매핑 파일 위치 지정, 아래는 APACHE_HOME/conf.d 아래에 위치하는 것으로 가정
JkMountFile conf.d/uriworkermap.properties
# 로드 밸런싱을 위해 shared memory 설정
# SELinux를 사용할 경우에는 문제가 발생할 수 있으므로, 이때는 run/jk.shm 으로 변경
# https://bugzilla.redhat.com/show_bug.cgi?id=225452
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
<Location /jkstatus/>
JkMount jkstatus
Order deny,allow
Deny from all
# 관리자를 위한 페이지로 적절한 IP 대역으로 허용 설정
#Allow from 127.0.0.1
Allow from all
</Location>
=========================================== mod_jk.conf ===========================================
# jboss 인스턴스 연결 설정 (mod_jk.conf 에 통합 설정 가능하나 별도 파일 분리 시 주기적으로 (60초) 본 파일을 reload 함으로써 설정 변경 시 apache 재시작을 하지 않아도 변경된 설정 적용이 가능하여 별도 파일로 분리할 것을 추천)
# static or dynamic mapping 방법에 따라 선택하여 설정
shell# vi /etc/httpd/conf.d/workers.properties
=========================================== workers.properties ===========================================
################################################################################################
# static mapping
################################################################################################
worker.list=jkstatus, node1, node2
worker.jkstatus.type=status
# define node1
worker.node1.host=192.168.22.31
worker.node1.port=8009
worker.node1.type=ajp13
# define node2
worker.node2.host=192.168.22.32
worker.node2.port=8009
worker.node2.type=ajp13
################################################################################################
# dynamic mapping (load balance)
################################################################################################
worker.list=jkstatus, wlb
# load balance 를 사용하더라도 필요하다면 개별로 worker 정의 & 사용 가능
# worker.list=jkstatus, node1, node2, wlb
worker.wlb.type=lb
worker.wlb.balance_workers=node1, node2
worker.jkstatus.type=status
# define node1
worker.node1.host=192.168.22.31
worker.node1.port=8009
worker.node1.type=ajp13
worker.node1.lbfactor=1
# define node2
worker.node2.host=192.168.22.32
worker.node2.port=8009
worker.node2.type=ajp13
worker.node2.lbfactor=1
=========================================== workers.properties ===========================================
# jboss 로 전달할 request URI 매핑 설정 (mod_jk.conf 에 통합 설정 가능하나 별도 파일 분리 시 주기적으로 (60초) 본 파일을 reload 함으로써 설정 변경 시 apache 재시작을 하지 않아도 변경된 설정 적용이 가능하여 별도 파일로 분리할 것을 추천)
shell# vi /etc/httpd/conf.d/uriworkermap.properties
=========================================== uriworkermap.properties ===========================================
# 확장자가 .jsp, .do 파일 node1 worker 로 매핑
/*.jsp=node1
/*.do=node1
# 경로가 /helloworld, /helloworld 하위 경로를 node2 worker 로 매핑
/helloworld=node2
/helloworld/*=node2
# 경로가 /high, /high 하위 경로를 wlb worker 로 매핑
/high=wlb
/high/*=wlb
=========================================== uriworkermap.properties ===========================================
# 아래 예와 같이 <VirtualHost></VirtualHost> 내에 worker 를 지정하는 방법도 있음
# VirtualHost Worker 지정
<VirtualHost *:80>
<ServerName> test.com
<ServerAlias> www.test.com
…
…
JkMount /*.jsp worker_name
</VirtlaHost>
# jboss ajp 활성화 (mod_jk <-> jboss 간 통신 프로토콜)
shell# vi /opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml
<subsystem xmlns=”urn:jboss:domain:web:1.1″ default-virtual-server=”default-host” native=”false”>
<configuration>
<jsp-configuration development=”true” check-interval=”1″ modification-test-interval=”1″ recompile-on-fail=”true” />
</configuration>
<connector name=”http” protocol=”HTTP/1.1″ scheme=”http” socket-binding=”http”/>
<connector name=”ajp13″ protocol=”AJP/1.3″ scheme=”http” socket-binding=”ajp”/>
<virtual-server name=”default-host” enable-welcome-root=”false”>
<alias name=”localhost”/>
<alias name=”example.com”/>
</virtual-server>
</subsystem>
# load balance 연동 시 jboss 추가 설정 필요
# 설정하지 않을 시 rr 방식으로 동작은 잘되지만 session 사용시에 문제가 생길 수 있음으로 설정하는 것 추천
shell# vi /opt/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml
<subsystem xmlns=”urn:jboss:domain:web:1.1″ default-virtual-server=”default-host” native=”false”>
<subsystem xmlns=”urn:jboss:domain:web:1.1″ default-virtual-server=”default-host” native=”false” instance-id=”node1″>
*주의* instance-id=”value” 의 value 는 호스트별로 모두 다르게 지정되어야 함
# 기타
/etc/httpd/logs/mod_jk.log