JBoss EAP 6.x – Apache HTTPD 2.2.x + mod_cluster 1.2.x Session Clustering 구성
원문링크 : http://blog.beany.co.kr/archives/4194 이상훈 (imfjbh@gmail.com)
작업 환경
- CentOS 6.5 (x86_64)
- JBoss EAP 6.2
- Apache HTTPD 2.2.27
- mod_cluster 1.2.6
사전 작업
Apache HTTPD Server 설치
Apache HTTPD Server 2.2.x 설치 문서 를 참고하여 설치합니다.
JBoss EAP 6.2 설치 및 Clustering 구성
- JBoss EAP 6.x – Standalone Session Clustering 문서의 JBoss 설치 및 Clustering 구성 부분을 참고합니다.
- JBoss 의 Bind Address (jboss.bind.address) 설정은 해당 Server IP 로 설정해주셔야 합니다.
JBoss Server 방화벽 설정
mod_cluster 는 JBoss 의 AJP Port 를 통하여 서비스를 하며, 만약 원격으로 JBoss Server 가 여러대가 설치 되어있을 경우, 서버의 AJP Port 에 대한 방화벽을 허용해주셔야 합니다. 해당 서버의 root 권한으로 접속하여 아래의 명령을 실행하여 방화벽 정책 파일을 편집합니다.
vi /etc/sysconfig/iptables
아래와 같이 AJP Port 와 mod_cluster 에 대한 방화벽 정책을 추가합니다. 단일 Node 에서의 기본 AJP Port 는 “8009” 이며, 아래의 설정은 한대의 서버에 두개의 JBoss Node 를 설치한 후, Binding port off set (jboss.socket.binding.port-offset) 을 100 으로 설정했을 경우의 샘플입니다.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6666 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8109 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8209 -j ACCEPT
아래의 명령을 실행하여 방화벽 정책을 적용합니다.
service iptables restart
mod_cluster 설치
아래의 명령을 실행하여 mod_cluster (linux-x86_64 mod_cluster binaries 버전) 를 다운로드 받습니다.
wget http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz
다운로드 받은 mod_cluster 파일의 압축을 해제합니다.
tar xvzf mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz
mod_cluster so 파일을 <Apache HTTPD 설치 디렉토리>/modules
디렉토리로 복사합니다.
cp mod_advertise.so mod_manager.so mod_proxy_cluster.so mod_slotmem.so /app/httpd-2.2.27/modules
Apache HTTPD 환경 설정
Apache HTTPD 환경 설정 디렉토리에 mod_cluster 관련 설정 파일을 생성합니다.
vi /app/httpd-2.2.27/conf/extra/httpd-mod_cluster.conf
아래의 내용으로 설정한 후 저장합니다.
LoadModule slotmem_module modules/mod_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule advertise_module modules/mod_advertise.so <IfModule manager_module> Listen 192.168.122.23:6666 ManagerBalancerName modcluster <VirtualHost 192.168.122.23:6666> <Location /> Order deny,allow Deny from all Allow from all </Location> KeepAliveTimeout 60 MaxKeepAliveRequests 0 AdvertiseFrequency 5 EnableMCPMReceive # ServerAdvertise on http://@IP@:6666 # AdvertiseSecurityKey secret # AdvertiseGroup @ADVIP@:23364 <Location /mod_cluster_manager> SetHandler mod_cluster-manager Order deny,allow Deny from all Allow from all </Location> </VirtualHost> </IfModule>
Apache HTTPD Server 의 설정 파일 (httpd.conf) 을 편집합니다.
vi /app/httpd-2.2.27/conf/httpd.conf
httpd.conf 파일 제일 하단에 아래와 같이 설정파일을 추가한 후 저장합니다.
# JBoss mod_cluster Include conf/extra/httpd-mod_cluster.conf
아래의 명령을 실행하여 Apache HTTPD Server 를 재시작 합니다.
service httpd restart
JBoss EAP 환경 설정
Sticky Session 을 활성화 하실하실 경우에만 설정하시면 됩니다. 관련 항목에 대한 자세한 내용은 Server-side Configuration Properties 링크를 참고하시면 됩니다.
JBoss 의 Standalone Clustering Node 들의 설정 파일을 편집합니다. (각 노드별로 개별적으로 설정합니다.)
vi /app/jboss-as/nodes/node01/configuration/standalone-ha.xml
설정 파일에서 아래의 항목을 추가 및 수정합니다.
mod-cluster-config
→sticky-session
: 설정을 하지 않으셔도 되며, 기본으로true
로 설정됩니다.mod-cluster-config
→proxy-list
: Apache HTTPD Server 가 원격에 설치되어있는 경우 해당 Apache HTTPD Server 의 IP 주소와 포트 번호를 입력합니다. 여러대일 경우에는,
(콤마) 로 구분하여 입력합니다.만약 JBoss 의 Bind Address (jboss.bind.address) 가0.0.0.0
으로 설정시에는 입력하지 않으셔도 방화벽에서 해당 포트 (6666) 가 열려 있는 경우에는 자동적으로 인식합니다.instance-id
: Sticky session 을 사용할 경우jvmRoute
의 Node 별 이름을 사용자가 설정하고 싶을 경우 사용하며, instance-id 를 설정하지 않을 경우 JBoss 에서 임의의 문자열 (UUID) 로 생성합니다.
<?xml version='1.0' encoding='UTF-8'?> <server xmlns="urn:jboss:domain:1.5"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <profile> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <subsystem xmlns="urn:jboss:domain:modcluster:1.1"> <mod-cluster-config advertise-socket="modcluster" connector="ajp" sticky-session="true" proxy-list="192.168.122.22:6666,192.168.122.23:6666"> <dynamic-load-provider> <load-metric type="busyness"/> </dynamic-load-provider> </mod-cluster-config> </subsystem> <subsystem xmlns="urn:jboss:domain:web:1.5" default-virtual-server="default-host" instance-id="${jboss.node.name}" native="false"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/> <connector name="ajp" 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> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </profile> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </server>
JBoss Clustering Node 들에 대한 설정이 완료된 후 전체 노드를 재시작 합니다.
/app/jboss-as/nodes/all-restart.sh
JBoss Clustering Node 들을 확인하면 아래와 같이 mod_cluster 의 jvm-route 의 값이 생성된 것을 확인할 수 있습니다. standalone-ha 파일에서instance-id 를 지정하였을 경우에는 아래와 같은 메시지가 나타나지 않습니다.
08:29:40,540 INFO [org.jboss.modcluster] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) MODCLUSTER000011: jboss.web will use 2c80925c-d057-3d61-a8f7-eada993452ed as jvm-route
실행 확인
브라우저의 주소창에 mod_cluster 관리 URL (http://192.168.122.23:6666/mod_cluster_manager) 로 접속하게 되면 JBoss 의 Session Clustering 된 Node 들을 확인하실 수 있습니다.
오류 관련
mod_proxy_balancer 관련 충돌
오류 내용
Apache HTTPD Server 기동시 아래와 같이 error_log 파일에 로그가 발생
[Fri Apr 25 09:23:13 2014] [error] Module mod_proxy_balancer is loaded it must be removed in order for mod_proxy_cluster to function properly
해결
아래의 명령을 실행하여 Apache HTTPD Server 의 환경 설정 파일을 편집합니다.
vi /app/httpd-2.2.27/conf/httpd.conf
mod_proxy_balancer.so
부분에 대하여 주석 처리 합니다.
# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
(EAI 2)Name or service not known ~
오류 내용
Apache HTTPD Server 기동시 Console 에 아래와 같은 로그 출력
[error] (EAI 2)Name or service not known: Failed to resolve server name for 192.168.122.23 (check DNS) -- or specify an explicit ServerName
해결
아래의 명령을 실행하여 host 등록 파일을 편집합니다.
vi /etc/hosts
아래와 같이 해당 IP 에 대한 호스트 명을 등록한 후 저장합니다.
192.168.122.22 node03