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 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 으로 설정했을 경우의 샘플입니다.

/etc/sysconfig/iptables
-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 (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 환경 설정 디렉토리에 mod_cluster 관련 설정 파일을 생성합니다.

vi /app/httpd-2.2.27/conf/extra/httpd-mod_cluster.conf

아래의 내용으로 설정한 후 저장합니다.

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 파일 제일 하단에 아래와 같이 설정파일을 추가한 후 저장합니다.

conf/extra/httpd-jboss.conf
# JBoss mod_cluster
Include conf/extra/httpd-mod_cluster.conf

아래의 명령을 실행하여 Apache HTTPD Server 를 재시작 합니다.

service httpd restart

Sticky Session 을 활성화 하실하실 경우에만 설정하시면 됩니다. 관련 항목에 대한 자세한 내용은 Server-side Configuration Properties 링크를 참고하시면 됩니다.

JBoss 의 Standalone Clustering Node 들의 설정 파일을 편집합니다. (각 노드별로 개별적으로 설정합니다.)

vi /app/jboss-as/nodes/node01/configuration/standalone-ha.xml

설정 파일에서 아래의 항목을 추가 및 수정합니다.

  • mod-cluster-configsticky-session : 설정을 하지 않으셔도 되며, 기본으로 true 로 설정됩니다.
  • mod-cluster-configproxy-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 에 대한 호스트 명을 등록한 후 저장합니다.

/etc/hosts
192.168.122.22    node03
로그인하면 댓글을 남길 수 있습니다.
  • jboss_eap_6.x_-_jboss_eap_6.x_apache_httpd_2.2.x_mod_cluster_1.2.x_session_clustering_구성.txt
  • 마지막으로 수정됨: 2016/05/20 14:10
  • 저자 koov