일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring boot
- 리팩토링
- Spring
- 클린코드
- oauth2
- Refactoring
- JPA
- 페이스북
- load balancing
- RabbitMQ
- clean code
- 스프링 부트
- g1
- Security
- tomcat
- assertj
- 시큐리티
- 비동기
- jvm
- Producer
- java
- JWT
- gdg
- 권한
- 스프링부트
- 페이징
- 스프링
- apache
- OAuth
- GC
- Today
- Total
허원철의 개발 블로그
Spring Boot - Apache proxy를 이용한 로드밸런싱 본문
이번 글은 Apache 설치와 로드밸런싱을 하여 Spring Boot를 올려 보도록 하겠습니다.
Apache 를 선택한 이유
- 요즘은 apache가 지는 태양이라고 한다면 nginx라는게 뜨는 태양이라고 할 수 있습니다. 서버 동작 차이라고하는데.. 아직은 nginx를 알지도 못하고 Apache가 친숙하지 않기 때문에 Apache를 선택했습니다. (추후에 nginx도 공부하는 걸로...)
로드밸런싱을 하게된 이유
- WAS를 KT 클라우드에 올리게 되어 8 core X 8 G 사양을 선택하게 되었습니다. 과부하를 줄이기 위해 튜닝쪽 구글링을 하다가 로드밸런싱을 하는 것이 좋을 것 같다고 판단되어 Apache에서 모듈을 이용해 로드밸런싱을 해보려고 합니다.
- 톰캣 인스턴스당 2~3GB 정도의 Heap Szie만을 갖길 권장합니다. 왜냐하면 JAVA에서는 메모리가 자동적으로 내려가는 GC가 발생하는데, GC가 발생하는 동안 응답이 지연되는 현상이 일어납니다. Heap Size가 클수록 GC를 해야할 범위가 늘어나 Heap Size를 작게 하는 것이 좋다고 합니다. 또한 Heap Size를 높게 잡아도 실질적으로는 2~3G 정도 밖에 사용하지 못한다고 합니다.
Apache 설치
OS : Centos 6.5
Apache Version : v2.2.15
- v2.4.+ 버전이 나와있는 시점인데도 불구하고 v2.2 버전을 설치하는 이유는.. OpenSSL Update와 v2.4에서는 별도의 유틸이 필요하다보니 구성이 너무 어렵다고 판단하여(몇일 삽질... 했습니다.) yum으로 빠르게 설치할 수 있는 v2.2 를 선택했습니다.
1) httpd 설치 확인
- 최소 설치를 한 경우에는 httpd가 설치 안되어 있으므로, 일단 확인해 봅니다. (Available Packages 라고 나와있으면 미설치)
1 2 | rpm -qa httpd yum list httpd | cs |
2) Apache 설치
1 | yum install httpd | cs |
3) 방화벽 해제
① iptables 편집
1 | vi /etc/sysconfig/iptables | cs |
② 80포트를 Open
[ iptables ]
1 | -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT | cs |
③ iptables 재실행
1 | service iptables restart | cs |
4) Apache 실행
1 | service httpd start | cs |
<기본 테스트 페이지>
※ OpenSSL version is too old 에러가 나는 경우에는 Version Update 를 해달라는 메시지입니다.
- ftp://ftp.openssl.org/source/ 에서 새로운 버전 설치 (1.1.0 이후 버전은 다른 작업이 필요한 듯 합니다. 일단은 1.0.2+ 설치 합니다.)
1) 압축 풀기
1 2 | cd /usr/local/src tar -xzvf openssl-1.0.2j.tar.gz | cs |
2) 실행
1 2 3 4 | cd ./openssl-1.0.2j ./config make mak install | cs |
3) 버전 및 기존 위치 확인
- 대부분 /usr/bin/openssl 에 위치
1 2 | openssl version which openssl | cs |
4) openssl 백업
1 | mv /usr/bin/openssl /root/ | cs |
5) 설치한 openssl 적용
1 | ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl | cs |
※ C / C++ Compiler 필요할 경우
1 | yum groupinstall 'Development Tools' | cs |
mod_jk를 이용한 tomcat 연동
1) tomcat-connectors 설치
1 2 | cd /usr/local/src wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz | cs |
2) native 디렉토리로 이동
1 | cd tomcat-connectors-1.2.42-src/native | cs |
3) 실행
1 2 3 | ./configure --with-apxs={apxs path} make make install | cs |
※ apxs path 확인
① 경로를 모르는 경우
1 | find / -name apxs | cs |
② 없는 경우
1 | yum install httpd-devel | cs |
4) httpd.conf 수정
1 2 | cd /etc/httpd/conf vi httpd.conf | cs |
[ httpd.conf ]
- 맨 아래 추가
1 2 3 4 | ... LoadModule jk_module modules/mod_jk.so include conf/mod_jk.conf include conf/http_vhost.conf | cs |
5) mod_jk.conf 추가
1 | vi mod_jk.conf | cs |
[ mod_jk.conf ]
1 2 3 4 5 | <IfModule mod_jk.c> JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info </IfModule> | cs |
6) workers.properties 추가
1 | vi workers.properties | cs |
[ workers.properties ]
1 2 3 4 5 6 | worker.list=worker1 worker.worker1.port=18009 worker.worker1.host=127.0.0.1 worker.worker1.type=ajp13 worker.worker1.lbfactor=1 | cs |
6) http_vhost.conf 추가
1 | vi http_vhost.conf | cs |
[ http_vhost.conf ]
1 2 3 4 5 6 7 | <VirtualHost *:80> SerberAdmin webmaster@localhost ServerName localhost ServerAlias localhost JkMount /* worker1 </VirtualHost> | cs |
mod_jk를 이용한 로드 밸런싱
1) worker.properties 수정
1 | vi workers.properties | cs |
[ worker.properties ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | worker.list=worker1,worker2,load_balance worker.worker1.port=18009 worker.worker1.host=127.0.0.1 worker.worker1.type=ajp13 worker.worker1.lbfactor=1 worker.worker2.port=28009 worker.worker2.host=127.0.0.1 worker.worker2.type=ajp13 worker.worker2.lbfactor=1 worker.load_balance.type=lb worker.load_balance.balanced_workers=worker1,worker2 | cs |
1 | vi http_vhost.conf | cs |
[ http_vhost.conf ]
1 2 3 4 5 6 7 | <VirtualHost *:80> SerberAdmin webmaster@localhost ServerName localhost ServerAlias localhost JkMount /* load_balance </VirtualHost> | cs |
mod_proxy를 이용한 톰캣 연동
1) httpd.conf 수정
1 2 | cd /etc/httpd/conf vi httpd.conf | cs |
[ httpd.conf ]
1 2 3 4 5 6 | ... LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_http_module modules/mod_proxy_http.so ... include conf/mod_proxy.conf | cs |
5) mod_proxy.conf 추가
1 | vi mod_proxy.conf | cs |
1 2 3 4 5 6 7 8 9 | ProxyPass / http://127.0.0.1:8080/ ProxyPassPassReverse / http://127.0.0.1:8080/ ProxyRequests On <Proxy *> Order deny, allow Allow from all </Proxy> | cs |
※ ProxyPass, ProxyPassReverse 에 / ...../ 꼭 넣어줘야 합니다. (삽질의 원인...)
mod_proxy를 이용한 로드 밸런싱
1) mod_proxy.conf 수정
1 | vi mod_proxy.conf |
[ mod_proxy.conf ]
1 2 3 4 5 6 7 8 9 10 | ProxyRequests On ProxyPreserveHost On <Proxy balancer://mycluster> BalancerMember http://127.0.0.1:8080 BalancerMember http://127.0.0.1:8081 </Proxy> ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ | cs |
※ ProxyPass, ProxyPassReverse 에 / ...../ 꼭 넣어줘야 합니다. (삽질의 원인...)
Spring Boot 실행
1 2 | java -server -Dserver.port=8080 -jar test.jar java -server -Dserver.port=8081 -jar test2.jar | cs |
'web' 카테고리의 다른 글
Spring Boot - QueryDSL (410) | 2017.01.25 |
---|---|
Spring Boot - jar로 Deploy(배포)하기 (405) | 2017.01.19 |
Spring Boot - RabbitMQ (395) | 2017.01.10 |
메시지 큐(Message Queue) 훑어보기 (441) | 2017.01.08 |
Spring Boot - Exception Handler (405) | 2017.01.03 |