APACHE

Apache - mod_jk를 이용한 로드밸런싱

라구엘 2024. 3. 27. 17:34

Centos 기준

- /usr/local/apache 에 설치되어있음

 

Apache 명령어

- 재시작 명령어
    - /usr/local/apache 경로 접속
    - ./apachectl stop
    - ./apachectl start

 

 

1. mod_jk 확인

ls /usr/local/apache/modules | grep 'jk'

 

2-1. http port로 추가시

- http port 추가 시
    1. tomcat 설치된 디렉토리 접근
    2. server.xml 편집기로 접근
    3. 하단의 코드 추가 (8080 포트 사용 시)
        
        ```sql
        <Connector port="8080" protocol="HTTP/1.1"
                       connectionTimeout="20000"
                       redirectPort="8443"
                       address="0.0.0.0" />
        ```
        
    4. tomcat 재시작
    5. 추가한 포트 호출 확인

 

2-2. apache - ajp port 추가시

1. apache 설치
2. mod_jk 설치
3. httpd.conf 수정
    1. 경로 : /usr/local/apache/conf
    2. 하단의 코드 추가(수정)
    
    ```sql
    Listen 80
    
    LoadModule jk_module modules/mod_jk.so
    
    // tomcat+apache연동 모듈을 include함 
    Include conf/mod_jk.conf
    
    // 가상 호스트 설정 파일 include 함
    Include conf/extra/httpd-vhosts.conf
    
    // apache 버전마다 다름
    <Directory />
        Allow from all
        Require all denied
    </Directory>
    
    include conf/mod_jk.conf
    include conf/ports.conf
    ```
    
4. workers.properties 생성
    1. 경로 : /usr/local/apache/conf
    2. 하단의 코드 추가(수정)

```sql
ps=/

// java_home 설정
workers.java_home="/usr/local/java-se-8"
// tomcat 경로 설정 (50번은 2개의 tomcat이 설정되어있음)
workers.tomcat_home="{api A버전 톰캣 경로}","{api B버전 톰캣 경로}"

#worker.loadbalancer.type=lb
#worker.loadbalancer.balanced_workers=kepcoApi, kecoApi

# Kepco Api
// JKMount 할 변수 생성
worker.list=Aapi
worker.Aapi.retries=0
// tomcat ajp port와 맞추기
worker.Aapi.port=8009
worker.Aapi.host=localhost
worker.Aapi.type=ajp13

# Keco Api
worker.list=Bapi
worker.Bapi.retries=0
worker.Bapi.port=8019
worker.Bapi.host=localhost
worker.Bapi.type=ajp13
```

1. mod_jk.conf 수정
    1. 경로 : /usr/local/apache/conf/extra
    2. 하단의 코드 추가(수정)
    
    ```sql
    <IfModule mod_jk.c>
            JkWorkersFile "/usr/local/apache/conf/workers.properties"
            JkLogFile "/usr/local/tomcat7/logs/mod_jk.log"
            JkLogLevel debug
            JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
            JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
            JkRequestLogFormat "%w %V %T"
    </IfModule>
    ```
    
2. ports.conf 수정
    1. 경로 : /usr/local/apache/conf/extra
    2. 하단의 코드 추가(수정)
    
    ```sql
    // apache로 호출 할 포트 설정
    Listen 8081
    Listen 7071
    ```
    
3. httpd-vhost.conf 수정
    1. 경로 : /usr/local/apache/conf/extra
    2. 하단의 코드 추가(수정)
    
    ```sql
    // ports.conf로 Listen 설정한 포트 사용 (8081, 7071)
    <VirtualHost *:8081>
         DocumentRoot "{api A버전 톰캣 경로}" // tomcat 경로 설정
         JkMount /* Aapi // workers.properties에서 생성한 worker.list 변수 명 할당
    </VirtualHost>
    
    <VirtualHost *:7071>
         DocumentRoot "{api B버전 톰캣 경로}" // tomcat 경로 설정
         JkMount /* Bapi // workers.properties에서 생성한 worker.list 변수 명 할당
    </VirtualHost>
    ```
    
4. iptables 인바운드 추가 및 재시작
    1. iptables -nL (iptables 리스트 확인)
    2. iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
    3. iptables -A INPUT -p tcp --dport 7071 -j ACCEPT
    4. cd /etc/init.d
    5. ./iptables.save
    6. ./iptables restart
5. apache 재시작
    1. 경로 : /usr/local/apache
    2. ./apachectl stop
    3. ./apachectl start
6. tomcat [shutdown.sh](http://shutdown.sh) 실행
    1. 한전 일 때 : /usr/local/tomcat7
    2. 환경부 일 때 : /webstore/apache-tomcat-8.5.82
7. ports.conf로 설정한 포트 Listen 확인
    - netstat -tnlp