본문 바로가기

WEB & WAS/WildFly

[WildFly] apache wildfly 연동(mod_cluster)

반응형

개요

apache 웹서버와 연동하는 방법은 mod_jk, mod_proxy 그리고 mod_cluster 를 이용한 방법이 있습니다. 여기서는 mod_cluster를 이용한 방법에 대해 소개 하고자 합니다. mod_cluster의 가장 큰 이점은 서버측 로드 발란스를 제공한다는 것입니다.(즉 웹어플리케이션 서버의 부하에 따라 로드를 분산할수 있는 기능을 제공) 

테스트 환경

CentOS 7.6

apache 2.4.41

mod_cluster http module 1.3.11

wildfly 16

 

1. 아파치 웹서버에 mod_cluster http module 설치

mod_cluster http module : https://modcluster.io/source-code/ 에서 http module source code 다운로드

 

shell> unzip mod_proxy_cluster-master.zip

shell> cd mod_proxy_cluster-master/

shell> cd native/

shell> mkdir build

shell> cd build

shell> cmake ../               => apache를  rpm으로  설치 했을 경우  

shell> cmake  -DAPACHE_INCLUDE_DIR=/usr/local/httpd/include   ../       => apache를 소스 컴파일 설치 했을 경우

shell> make

shell> cp modules/* /usr/local/httpd/modules/

 

빌드가 완료된후 modules 디렉토리에 4개의 모듈이 생성됨, 이 파일을 apache modules 디렉토리에 복사

(mod_advertise.so, mod_cluster_slotmem.so, mod_manager.so, mod_proxy_cluster.so)

* httpd-devel rpm 설치 되어 있어야함

 

2. apache 환경 설정

httpd.conf

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

** mod_cluster 모듈은 proxy_ajp, proxy_balancer 모듈을 같이 구동시 오류 발생, proxy_balancer_module 주석 처리 

# Load mod_cluster module

LoadModule advertise_module         modules/mod_advertise.so

LoadModule cluster_slotmem_module  modules/mod_cluster_slotmem.so

LoadModule manager_module         modules/mod_manager.so

LoadModule proxy_cluster_module     modules/mod_proxy_cluster.so

 

Listen 192.168.0.130:6666

<VirtualHost 192.168.0.130:6666>

  <Directory />

     Order deny,allow

     Deny from all

     Allow from 192.168.0       => 연동할 wildfly의 서버 주소 

     Require all granted

  </Directory>

 

  <Location /mod_cluster-manager>

    SetHandler mod_cluster-manager

    Order deny,allow

    Deny from all

    Allow from 192.168.0       => /mod_cluster-manager URL 접근을 허용할 IP

  </Location>

 

  KeepAliveTimeout 60

  MaxKeepAliveRequests 0

  ManagerBalancerName mycluster

  ServerAdvertise on

  EnableMCPMReceive on

  AdvertiseFrequency 5

</VirtualHost>

 

ProxyPass /myapp balancer://mycluster stickysession=JSESSIONID|jsessionid nofailover=On

ProxyPassReverse /myapp balancer://mycluster

ProxyPreserveHost On

 

<VirtualHost>

    ServerName www.domain.com

    ProxyPass /myapp2 balancer://mycluster stickysession=JSESSIONID|jsessionid nofailover=On

    ProxyPassReverse /myapp2 balancer://mycluster

    ProxyPreserveHost On

</VirtualHost>

3. 접속 테스트

http://apache_ip:6666/mod_cluster-manager

[그림 1] mod_cluster-manager 접속

4. WildFly

wildfly 도메인 모드의 프로파일인 ha,full-ha와 standalone 모드의 standalone-ha.xml, statndalne-full-ha.xml 에서는  ajp mod_cluster 기본 활성화 되어있어 이 프로파일 사용시 별도의 설정없이 사용 가능합니다.

* wildfly 8 버전 부터 mod_cluster가 내장 되어 있기 때문에 별도의 설치과정은 필요 없습니다.

5. 정적 프록시 추가

mod_cluster는 기본적으로 멀티캐스트를 사용하여 연동할 웹서버를 찾는데, 웹서버와 WildFly 사이에 방화벽이 있을 경우 멀티캐스트 패킷이 정상적으로 전달이 되지 않을 경우가 발생합니다. 이럴경우  proxies(proxy list)지시자에  웹서버의 IP와 port를 지정한후 방화벽에서 OPEN 해주어야 합니다.

아래는 관리콘솔에서 Proxies(Proxy-list) 를 추가하는 방법에 대해서 설명합니다.

  step 1) proxy 추가( Configuration > Socket Bindings > full-ha-sockets(ha-sockets) > Add

  step 2) proxy 설정( Configuration > Profile > full-ha(ha) > Edit )

  step 3) proxy 설정( Configuration > Profile > full-ha(ha) > Adervrtising > Edit - Advertise OFF

 

참조

proxy 구성전 domain.xml (full-ha 프로파일)

proxy 구성후 domain.xml (full-ha 프로파일)

** wildfly 8 버전까지는 proxy-list로, 9 이상 버전 부터는 proxies로 지시자가 변경됨

<subsystem xmlns="urn:jboss:domain:modcluster:1.2">

    <mod-cluster-config advertise-socket="modcluster" connector="ajp" proxy-list="myproxy">

        <dynamic-load-provider>

            <load-metric type="busyness"/>

        </dynamic-load-provider>

    </mod-cluster-config>

</subsystem>

                                              <wildfly 8 버전 proxy-list>

  step 4) 웹서버의 ServerAdvertise 지시자 OFF(옵션)

반응형

'WEB & WAS > WildFly' 카테고리의 다른 글

[WildFly] Cluster 구성  (0) 2019.09.03
[WildFly] web Context 배제(exclude)  (0) 2019.09.03
[WildFly] 어플리케이션 배포  (0) 2019.08.30
[WildFly] Apache WildFly 연동(mod_jk)  (0) 2019.08.29
[WildFly] 설치 - domain 모드  (0) 2019.08.29