Apache 2.4 - proxy_balancer 를 이용한 PHP-FPM Load balance 구성

Last Updated on 11월 17, 2020 by 태랑(정현호)

load balance module을 활용


현재 블로그와 별도로 운영중인 페도라 한국 사용자 모임의 구성은 아래와 같이 3개의 서버를 이용한 3-Tier 로 구성되어 있습니다.



이런 구성환경에서 4번 서버에도 PHP-FPM을 구성하여 1대(apache) - N구조(2대- PHP-FPM) 로 구성 하려고 합니다

아래의 그림이 구성 후 모습입니다.



PHP-FPM 구성에 관련 되서는 아래글을 참조해주세요



기존 포스팅 글에서 PHP-FPM 구성에 대해서 설명해 두었기에 이번글에서는 Apache 에서의 설정부분만 변경 하면 됩니다.

*  참고로 reverse proxy 로 사용하기 위해서 아래 내용도 추가해 줍니다
ProxyRequests Off


# virtualhost 내에 기존 설정 내역

ProxyRequests Off
ProxyPreserveHost On
ProxyErrorOverride on
Timeout 600
ProxyTimeout 600

<FilesMatch \.php$>
SetHandler "proxy:fcgi://instance-3:9002"
</FilesMatch>




# virtualhost 내에 변경한 설정 내역
   변경1안)

<Proxy balancer://mycluster>
BalancerMember "fcgi://instance-4:9001" route=1
BalancerMember "fcgi://instance-3:9002" route=2
ProxySet lbmethod=bytraffic
ProxySet stickysession=ROUTEID
</Proxy>

<FilesMatch \.php$>
SetHandler proxy:balancer://mycluster
</FilesMatch>


*   ProxySet lbmethod=bytraffic
Load Balance 방법은 3가지이며 byrequests (요청별 분배), bytraffic (byte 트래픽 가중치 분배) bybusyness (보류중 요청 분배) 입니다.



위와 같이 FilesMatch 를 이용해도 되고 아래와 같이 proxypass , ProxyPassReverse, 그리고 ProxyPassMatch 또한 가능 합니다.


<Proxy balancer://mycluster>
BalancerMember "fcgi://instance-4:9001" route=1
BalancerMember "fcgi://instance-3:9002" route=2
ProxySet lbmethod=bytraffic
ProxySet stickysession=ROUTEID
</Proxy>

ProxyPass /Websource/path/ balancer://mycluster/
ProxyPassReverse /Websource/path/ balancer://mycluster/




enablereuse 옵션을 통해서WAS 와 DB간의 Connection Pool 과 유사하게  Apache 와 PHP-FPM 간의 미리 연결을 확보하여 Connection 을 재사용 할수 있습니다.


# 설정 예시
<Proxy balancer://mycluster>
BalancerMember "fcgi://instance-4:9001" route=1 enablereuse=On max=5
BalancerMember "fcgi://instance-3:9002" route=2 enablereuse=On max=5
ProxySet lbmethod=bytraffic
ProxySet stickysession=ROUTEID
</Proxy>

<FilesMatch \.php$>
SetHandler proxy:balancer://mycluster
</FilesMatch>



event 및 worker 방식일 경우 스레드의 수와 연관되어 Connection 이 맺어진다고 하여 enablereuse 옵션 사용시 사전에 검토나 고려가 필요한 부분은 있습니다.

enablereuse 미사용 때보다 php-fpm 에서의 프로세스 확보가 더 필요해 오히려 늦어지거나 저하 현상이 발생할 수도 있습니다. enablereuse 사용전 검토가 필요 합니다.


* 지금 현재로는 처음 안내해드린 변경1안)  으로 사용 중에 있습니다.



연관된 글

답글 남기기