목표 apache를 이용한 로드밸런싱


Apache 최신버전 컴파일 (2.4.23 released 2016-07-05)


./configure --prefix=/usr/local/apache2-lb --enable-proxy --enable-proxy-balancer --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr


--enable-proxy 가 있으면 proxy_http로 추가된다.

--enable-proxy-balancer 있어야 loadbalancer를 사용할 수 있다.


http.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

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

## 추가

ProxyRequests Off [각주:1]

# proxy 권한 설정 - 필요한 경우 수정
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

#sticky session을 위한 cookie 설정  
Header add Set-Cookie "ROUTEID=route.%{BALANCER_WORKER_ROUTE}e; path=/;" env=BALANCER_ROUTE_CHANGED[각주:2]

#balancer 정의 이름은 mycluster
<Proxy balancer://mycluster>
# WAS1
BalancerMember http://192.168.0.2:8080 route=1
# WAS2
BalancerMember http://192.168.0.3:8080 route=2

ProxySet lbmethod=byrequests[각주:3]
ProxySet stickysession=ROUTEID

</Proxy>

ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
ProxyPreserveHost On[각주:4]

# balancer 모니터링 페이지
ProxyPass /balancer-manager !

<Location /balancer-manager>
    SetHandler balancer-manager
</Location>


1번 서버 : 192.168.0.2

2번 서버 : 192.168.0.3


요청 순서대로 각서버로 연결되며 한번 연결되어 ROUTEID 쿠키가 set 되면 해당 서버로만 요청을 하게 된다. 

session을 사용하는 어플리케이션도 처음 접속한 서버로 계속 접속하게 되어 세션을 유지 할 수 있다. 

request header를 보면 어느쪽 서버로 요청이 가는지 알 수 있다. 아래 header를 보면 2번 서버로 요청이 가는것을 볼 수 있다.


  1. GET /error.html HTTP/1.1 Host: 192.168.0.5 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: http://192.168.0.5/ Accept-Encoding: gzip, deflate, sdch Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: ROUTEID=route.2 If-Modified-Since: Fri, 11 Nov 2016 07:07:11 GMT


http://[IP]/balancer-manager 페이지로 접근하면 상태페이지를 확인할 수 있다.

실제 사용하려면 접근권한을 반드시 주어 관리자만 확인할 수 있도록 한다. - (설정을 바꿔 서비스를 중단시킬수 있음. )



  1. reverse proxy를 사용하면 Off 로 설정해야 한다. [본문으로]
  2. BALANCER_WORKER_ROUTE -> 각 멤버의 route 번호를 저장한다. env=BALANCER_ROUTE_CHANGED -> 현재 요청된 route번호와 BALANCER_WORKER_ROUTE가 다른경우 1을 넣는다. [본문으로]
  3. 로드밸런싱 방법, byrequests (요청별 분배), bytraffic (byte 트래픽 가중치 분배) bybusyness (보류중 요청 분배) [본문으로]
  4. Use incoming Host HTTP request header for proxy request 웹서버에 요청된 header를 proxy request에 사용 [본문으로]
Posted by 마법수정화살

댓글을 달아 주세요