티스토리 뷰
본 포스팅은 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?? |
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/
- 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 노드에서 요청을 처리하는지 확인
테스트 시작
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 |
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 |
하지만 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 노드가 동작하는 방식으로, 장비의 효율성을 높일뿐만 아니라 무중단 서비스를 제공할 수 있습니다.
고맙습니다.
'④ 미들웨어 > ⓐ Apache' 카테고리의 다른 글
[Apache] Sticky Session 사용가이드 (0) | 2018.08.13 |
---|---|
[Apache] mod_status.c 를 이용한 Web Console 모니터링 (0) | 2018.08.13 |
[Apache] lbfactor를 이용한 Load Balancing (부하분산) (0) | 2018.08.09 |
[Apache 고수] Part 2. Apache Application Deploy (0) | 2018.07.31 |
[Apache 고수] Part 1. Apache Install & Windows Service (0) | 2018.06.05 |
- Total
- Today
- Yesterday
- apache
- JEUS7
- 쿠버네티스
- openstack tenant
- kubernetes
- node.js
- 마이크로서비스 아키텍처
- JBoss
- nodejs
- Architecture
- aws
- Docker
- JEUS6
- TA
- OpenStack
- MSA
- git
- 아키텍처
- jeus
- webtob
- Da
- wildfly
- SA
- SWA
- API Gateway
- k8s
- aa
- 오픈스택
- 마이크로서비스
- openstack token issue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |