티스토리 뷰

728x90
반응형

 포스팅은 mod proxy balancer 를 이용한 Active/Passive 구성 가이드입니다.


Apache와 WildFly의 연동방식으로는 mod_jk를 사용하는 방법 이외에도 mod_proxy를 사용하여 연동할수도 있습니다.

또한 mod_proxy_balancer라는 모듈을 추가하여 LoadBalancing 및 Active/Passive 구성이 가능합니다.

 

mod_jk 를 이용한 Web-WAS 연동가이드는 아래 포스팅에서 참고하세요.

 

진행하기 전에 Standalone Mode에서의 Clustering환경 구성이 필요하니, 지난 포스팅을 꼭 참고해주세요.

 

1.Apache-WildFly 연동과 Active/Passive 구성에 필요한 모듈을 로드합니다.


- httpd.conf

..

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so


- mod_proxy,mod_proxy_http : 연동에 필요한 모듈입니다.

- mod_proxy_balancer : Load Balance를 위한 모듈입니다.

- mod_slotmem_shm : memory provider

  (mod_slotmem_shm is a memory provider which provides for creation and access to a shared memory segment in which the datasets are organized in "slots.)

 

해당 모듈을 로드하지않았을때의 error.log

[Thu Aug 09 14:47:53.085668 2018] [proxy_balancer:emerg] [pid 13998:tid 140686319273856] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Thu Aug 09 14:47:53.085727 2018] [:emerg] [pid 13998:tid 140686319273856] AH00020: Configuration Failed, exiting

 

2.Active/Passive 구성에 필요한 설정입니다.


- httpd.conf

..

<Proxy balancer://mycluster>
       Order deny,allow
       Allow from all

       BalancerMember http://localhost:8380 loadfactor=1 retry=10        //Active node1

       BalancerMember http://localhost:8580 loadfactor=5 retry=10        //Active node2
       BalancerMember http://localhost::8480 status=+H retry=0            //Passive node
</Proxy>

 

ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid
ProxyPassReverse /4  http://localhost::8380/
ProxyPassReverse /4  http://localhost::8480/

ProxyPassReverse /4  http://localhost::8580/


- Proxy balancer : balancer의 명

- BalancerMember : Acitve,Passive 노드의 호출정보

- loadfactor : Active 노드들의 부하분산

- retry : 해당 node가 error status 가 되면, retry시간 까지 요청을 보내지 않고 다른 서버로 요청을 보낸다.

- status=+H : 백업노드

- stickysession : jsessionid명을 지정합니다.

- ProxyPassReverse : context path와 노드들의 호출정보

 

테스트 구성 - Active Node 1 : A application

                - Active Node 2 : B application

                - Passive Node 3 : S application

 

(모든 노드는 클러스터링 되어있으며, 각 deploy된 application들은 세션 공유가 가능합니다.)

 

테스트 시나리오

a. 노드 1(Active),노드 2(Active),노드 3(Passive) 모두 기동상태에서 application 호출

b. Active노드간 Loadbalancing 확인

c. Active노드 shutdown 후 Passive노드가 요청을 처리하는지 확인

d. Active 노드를 기동하였을때, 다시 Active 노드에서 요청을 처리하는지 확인

 

테스트 시작

 

1. session.jsp 호출 - Count 1 : Active Node 1(A application)에서 요청을 받음  


- http://localhost/session.jsp 

 

access.log

- 172.21.70.24 - - [09/Aug/2018:16:20:49 +0900] GET /4/session.jsp HTTP/1.1 200 620 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1


 

2. session.jsp 재호출 - Count 2~6 : Active Node 2(B application)에서 요청을 받음  


- http://localhost/session.jsp

 

access.log 

- 172.21.70.24 - - [09/Aug/2018:16:21:08 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1
- 172.21.70.24 - - [09/Aug/2018:16:21:23 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1
- 172.21.70.24 - - [09/Aug/2018:16:21:25 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1
- 172.21.70.24 - - [09/Aug/2018:16:21:28 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1
- 172.21.70.24 - - [09/Aug/2018:16:21:28 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1


 

3. session.jsp 재호출 - Count 7 : 다시 Active Node 1(A application)에서 요청을 받음     


 

access.log

- 172.21.70.24 - - [09/Aug/2018:16:21:29 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1


 

두 Active 노드간의 처리 비율이 설정한대로 1:5인것을 확인할 수 있습니다.

 

4. Active 1,2 노드를 shutdown하겠습니다.

 

5.session.jsp 재호출 - Count 8  : Passive Node(S application)에서 요청을 받음 


 

Apache에서는 아래와 같은 에러와 함께 요청을 Passive 노드로 던집니다.

 

error.log

[Thu Aug 09 16:24:53.645645 2018] [proxy:error] [pid 24462:tid 140609398200064] AH00959: ap_proxy_connect_backend disabling worker for (172.21.70.24) for 10s
[Thu Aug 09 16:24:53.645650 2018] [proxy_http:error] [pid 24462:tid 140609398200064] [client 172.21.70.219:57831] AH01114: HTTP: failed to make connection to backend: 172.21.70.24

 

하지만 Passive 노드는 요청을 정상적으로 처리합니다.

 

access.log

- 172.21.70.24 - - [09/Aug/2018:16:24:53 +0900] GET /4/session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i yivcCQTMtwKW0d7ItRUMVL95dFOyu-lNXJyJoimG default task-1


 

6.두 Active 노드를 기동하겠습니다.

 

7.session.jsp 재호출 - Count 9  : Active Node에서 요청을 받음  



  

다시 Active노드로 호출이 요청되는것을 확인할 수 있습니다.

 

이와같이 Active/Passive 구성방식은 Active 노드의 이슈발생시에만 Passive 노드가 동작하는 방식으로, 장비의 효율성을 높일뿐만 아니라 무중단 서비스를 제공할 수 있습니다.

 

고맙습니다.

 

 

 

728x90
반응형