[Apache] Web 서버 부하분산
본문 바로가기
IT 이야기/Apache

[Apache] Web 서버 부하분산

by 찬찬이 아빠 2020. 10. 20.
반응형

시스템을 We서버 WAS 서버 각각 2대씩 이중화하여 구성했다고 가정하겠습니다.

Web 서버로 사용자의 요청이 오게 되면 그 요청에 따라 Web 서버에서 처리할지 WAS 서버에서 처리할지 Web 서버 부하분산 설정에 따라 효율적인 서비스가 제공될지 여부가 결정이 됩니다.

 

Web 서버가 여러 대로 구성된 경우 특정 서버로 처리가 집중되지 않도록 각 Web 서버별 로드 밸런싱 설정을 교차하여 지정합니다.

 

여기서 말하는 로드 밸런싱(load balancing, 부하분산)이란 작업 부하를 여러 대의 서버에 분배하는 것으로 가용성을 높이고, 서비스 속도를 최적화 하는 효과가 있습니다.

 

그렇다면 Web 서버에서 부하분산 설정은 어떻게 하는 것일까요?

 

Web서버에서 WAS 서버로 요청을 전송하기 위해서는 웹 서버 커넥터가 필요합니다.

대표적으로 많이 사용하는 것이 mod-jk 웹 커넥터 입니다.

mod-jk 웹 커넥터는 클라이언트의 요청을 Web(Apache) 서버에서 받아 WAS(JBoss EAP) 서버로 전달하고 처리한 후 다시 웹서버로 응답을 보내는 역할을 합니다.

 

Web 서버에서 mod-jk 웹 커넥터를 통해 클라이언트에 대한 부하분산을 처리하기 위해서는 WAS(JBoss EAP) 서버의 mod-jk를 사용하기 위한 UseJK=true 설정이 env.properties 파일에 설정되어 있어야합니다.

해당 파일은 $JBOSS_HOME/bin/env.properties 경로에서 확인할 수 있습니다.

 

그러면 Web 서버에서 부하분산 설정을 하려면 어떻게 설정해야 할까요?

 

그 설정은 workers.properties 파일에 설정합니다.

파일의 위치는 $APACHE_HOME/conf.d/workers.properties에서 확인할 수 있습니다.

 

Web 서버 2대가 구성되어 있기 때문에 workers.properties 파일에 WAS 서버로 전달되는 노드에 대한 설정을 교차하여 설정해야 한 서버로 요청이 전달되는 현상을 막을 수 있습니다.

 

다음은 workers.properties 파일에 워커 노드의 기본 설정을 정의하고, 워커 정의하며 부하분산 설정을 하는 예시입니다.

 

1. 워커 노드 기본 설정 정의

worker.list=wllb,jkstatus

worker.template.type=ajp13

worker.template.lbfactor=1

worker.template.socket_timeout=60

worker.template.socket_keepalive=true

worker.template.recovery_options=7

worker.template.ping_mode=A

worker.template.ping_timeout=10000

worker.template.connection_pool_timeout=60

 

 

2. 워커 노드 정의

worker.노드명1.reference=worker.template

worker.노드명1.host=IP 또는 hostname

worker.노드명1.port=8009

 

worker.노드명1.reference=worker.template

worker.노드명1.host=IP 또는 hostname

worker.노드명1.port=8009

 

 

3. 부하분산 설정(Web서버#1과 Web서버 #2 설정이 교차되야함)

<Web 서버#1>

worker.wlb.balance_workers=노드명1,노드명2

 

<Web 서버#2>

worker.wlb.balance_workers=노드명2,노드명1

 

Web 서버 #1, 2 서버의 부하분산 설정이 같다면 클라이언트 요청이 하나의WAS 서버로 집중되기 때문에 반드시 교차 설정해야 합니다.

반응형

댓글