[3]. WEB/WAS Server 구성 - 3. Apache와 Jboss의 부하분산(Load Balancing) 및 세션공유(Session Clustering)
- 고가용성(HA : High Availability)
- 부하분산된 서버중에 장애가 발생할 경우 다른 서버가 그 역할을 대신(Failover)할 수 있도록 하는 것입니다.
- 서비스의 다운타임을 줄이거나(없게)해줌으로서 서비스를 중단 없이 항상 사용 가능한 상태를 유지해서 가용성을 높여줍니다.
- 또는 서버 업그레이드나 어플리케이션 배포시 다른서버에서 작업을 대신 처리하게 하므로서 무중단 서비스를 가능게 합니다.
- 서버들간에 부하를 균등하게 분산해서 서비스 하는것입니다. 서비스 총 처리량은 각 클러스터를 구성하는 서버들의 성능을 합한 것과 같습니다.
- 만약에 동시접속자 1만명을 수용할 수 있는 서버라면, 3대의 서버로 클러스터링 하게 되면 동시접속자 3만명을 수용하게 되고, 처리량을 늘리려면 서버를 추가 증설하면 됩니다.
- 서버 1대의 성능 증가는 한게가 있기때문에 무한대로 성능을 높일수가 없습니다. 이럴때 여러대의 서버를 클러스터링으로 묶어(병렬) 부하를 분산하면 손쉽게 성능 증가가 가능합니다.
- 부하분산된 클러서터링 서버들간에 세션을 공유하게 해서, Client 관점에서는 마치 한대의 서버에서 처리되는 듯한 효과를 볼 수 있도록 구축하는 방식 입니다.
- 무중단 서비스를 가능게 할 수 있습니다.
- 클러스터된 서버가 동시에 모두 중단되지 않는한 동일한 세션을 유지 할 수 있습니다.
1. Apache/Jboss 디랙토리 구조
2. jboss의 3가지 운영 방식
- standalone mode(각각 설정해줘야함)
- 단일 인스턴스로 실행된다.
- 인스턴스 별 개별관리가 필요하며 각 인스턴스별 프로파일 설정을 해줘야 한다.
- 설정이 간단하고 직관적이라서 관리가 쉽다
- 프로파일 설정은 도메인 컨트롤러에 포함된다.
- 다수의 인스턴스가 그룹으로 구성되어 있다.
- 인스턴스 별 그룹 지정이 가능하며 그룹별 설정이 가능하다.
- Node 분할 mode (standalone를 복사해서 2개 이상의 Node 생성)
- 단일 인스턴스로 실행된다.
- 인스턴스 별 개별관리가 필요하며 각 인스턴스별 프로파일 설정을 해줘야 한다.
- 설정이 간단하고 직관적이라서 관리가 쉽다
3. Apache와 Jboss의 부하분산 및 세션공유 설정하기
- Apache와 Jboss의 부하분산 및 세센공유 구성 전체 플로우
- Apache의 부하분산 및 세센공유 구성 설정1(mod_jk, mod_cluster)
[세부 설정 참고]
(2). Apache의 부하분산 및 세션공유 설정 상세(mod_jk + mod_cluster)
- Jboss의 부하분산 및 세센공유 구성 설정2(env.sh, standalone-full-ha.xml)
[세부 설정 참고]
(3). Jboss의 부하분산 및 세션공유 설정 상세(mod_jk + mod_cluster)
4. Apache와 Jboss의 부하분산 및 세션공유 - 소캣바인딩
이름 | 포트+Offset | 포트 | 멀티케스트 포트 | full-ha | full | ha | standard | 설명 |
ajp | 8009 + Offset | 8009 |
| Yes | Yes | Yes | Yes | Apache JServ 프로토콜, HTTP클러스터링 및 부하분산에 사용 |
http | 8080 + Offset | 8080 |
| Yes | Yes | Yes | Yes | 배표된 웹 어플리케이션 기본 포트 |
https |
| 8443 |
| Yes | Yes | Yes | Yes | 배포된 웹 어플리케이션과 클라이언트 사이의 SSL 암호화 연결 |
jacorb |
| 3528 |
| Yes | Yes | No | No | JTS 트랜잭션 및 다른 ORB 서비스의 CORBA 서비스 |
jacorb-ssl |
| 3529 |
| Yes | Yes | No | No | SSL 암호화 CORBA 서비스 |
jgroups-diagnostics |
|
| 7500 | Yes | No | Yes | No | 멀티 캐스트 HA클러스터의 멤버를 검색하는데 사용 |
jgroups-mping |
|
| 45700 | Yes | No | Yes | No | 멀티캐스트 HA 클러스터의 멤버를 검색하는데 사용 |
jgroups-tcp |
| 7600 |
| Yes | No | Yes | No | TCP를 사용하여 HA 클러스터에서 유니 캐스트 피어 검색 |
jgroups-tcp-fd |
| 57600 |
| Yes | No | Yes | No | TCP를 통한 HA 오류 감지에 사용 |
jgroups-udp |
| 55200 | 45688 | Yes | No | Yes | No | UDP를 사용하여 HA 클러스터에서 유니 캐스트 피어 검색 |
jgroups-udp-fd |
| 54200 |
| Yes | No | Yes | No | UDP를 통한 HA 오류 감지에 사용 |
messaging |
| 5445 |
| Yes | Yes | No | No | JMS 서비스 |
messaging-group |
|
|
| Yes | Yes | No | No | HornetQ JMS 브로드 캐스트 감지 그룹에 의해 참조 |
messaging-throughput |
| 5455 |
| Yes | Yes | No | No | JMS Remoting에 의해 사용 |
mod_cluster |
|
| 23364 | Yes | No | Yes | No | Jboss EAP와 HTTP 로드 밸런서 사이의 통신에 대한 멀티 케스트 포트 |
osgi-http |
| 8090 |
| Yes | Yes | Yes | Yes | OSGI 서브시스템을 사용한느 내부 컴포넌트에 의해 사용 |
remoting |
| 4447 |
| Yes | Yes | Yes | Yes | 원격 EJB 호출에 사용 |
txn-recovery-environment |
| 4712 |
| Yes | Yes | Yes | Yes | JTA 트랜잭션 리커버리 메니저 |
txn-status-manager |
| 4713 |
| Yes | Yes | Yes | Yes | JTA/JTS 트랜잭션 매니저 |
Management Web Console | 9990 + Offset | 9990 |
|
|
|
|
| http://jboss-ip:9990/console |
CLI management | 9999 + Offset | 9999 |
|
|
|
|
| [root@localhost SERVER11] ./jboss-cli.sh |
- 방화벽 구성(열기)
[root@localhost sysconfig]# cd /etc/sysconfig/
[root@localhost sysconfig]# vi iptables
- 방화벽 구성(편집)
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -d 224.0.1.0/24 -p udp -m comment --comment "mod_cluster traffic" -j ACCEPT
-A INPUT -d 224.0.0.0/4 -p udp -m comment --comment "JBoss Cluster traffic" -j ACCEPT
-A INPUT -s 192.168.10.0/24 -p udp -m comment --comment "cluster subnet for inter-node communication" -j ACCEPT
-A INPUT -s 192.168.10.0/24 -p tcp -m comment --comment "cluster subnet for inter-node communication" -j ACCEPT
-A INPUT -s 230.0.0.4/32 -p udp -m udp --dport 45688 -m comment --comment "jgroups-udp (multicast-port:4-j ACCEPT 5688)" -j ACCEPT
-A INPUT -s 230.0.0.4/32 -p udp -m udp --dport 45700 -m comment --comment "jgroups-mping(multicast-port:4-j ACCEPT 5700)" -j ACCEPT
-A INPUT -s 231.7.7.7/32 -p udp -m udp --dport 9876 -m comment --comment "hornetq (multicast-port:9-j ACCEPT 876)" -j ACCEPT
-A INPUT -s 224.0.1.105/32 -p udp -m udp --dport 23364 -m comment --comment "224.0.1.105 (multicast-port(2-j ACCEPT 3364)" -j ACCEPT
-A INPUT -m iprange --src-range 192.168.20.1-192.168.20.2 -p tcp -m tcp --dport 3528 -j ACCEPT
-A INPUT -m iprange --src-range 192.168.20.1-192.168.20.2 -p tcp -m tcp --dport 3529 -j ACCEPT
-A INPUT -m iprange --src-range 192.168.20.1-192.168.20.2 -p tcp -m tcp --dport 7600 -j ACCEPT
-A INPUT -m iprange --src-range 192.168.20.1-192.168.20.2 -p tcp -m tcp --dport 54200 -j ACCEPT
-A INPUT -m iprange --src-range 192.168.20.1-192.168.20.2 -p tcp -m tcp --dport 57600 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
- 방화벽 구성(네트웍크 재시작)
[root@localhost sysconfig]# /etc/rc.d/init.d/iptables restart
5. Apache와 Jboss의 부하분산 및 세션공유 예시(mod_jk)
6. Apache와 Jboss의 부하분산 및 세션공유 예시(L4스위치 + mod_jk + mod_cluster) - 노드 분리
- 같은 Web Server와 연결된 WAS의 Node ID는 중복이 없어야 한다.(Session Clustering)
7. Apache와 Jboss의 부하분산 및 세션공유 예시(L4스위치 + mod_jk + mod_cluster) - standalone
8. Apache와 Jboss의 부하분산 및 세션공유 예시(mod_jk + mod_cluster) - 싱글서버
- 싱글 서버일때도 WAS를 Node1, Node2로 분리하게 되면 무중단 서비스가 가능해지기 때문에 불필요한 다운타임을 줄일수가 있다(소스 배포시/설정 변경시)
- 2개의 노드구성으로 노드가 동시에 중단 되지 않는다면 서비스 다운타임을 줄일수 있음(소스 배포시 WAS가 리로드 되기때문에 세션이 끊겨버림 -> 소스를 순차적 배포를 해서 세션 유지)
9. Apache와 Jboss의 부하분산 및 세션공유 예시(mod_jk + mod_cluster) - 부하분산(Load Balancing)/세션공유(Session Clustering)
- 부하분산(Load Balancing) : WAS1, WAS2로 부하를 분산해서 두배의 성능을 기대
- 서버들간에 부하를 균등하게 분산해서 서비스 하는것입니다. 서비스 총 처리량은 각 클러스터를 구성하는 서버들의 성능을 합한 것과 같습니다.
- 만약에 동시접속자 1만명을 수용할 수 있는 서버라면, 3대의 서버로 클러스터링 하게 되면 동시접속자 3만명을 수용하게 되고, 처리량을 늘리려면 서버를 추가 증설하면 됩니다.
- 서버 1대의 성능 증가는 한게가 있기때문에 무한대로 성능을 높일수가 없습니다. 이럴때 여러대의 서버를 크러스터링으로 묶어(병렬) 부하를 분산하면 손쉽게 성능 증가가 가능합니다.
※ 서버 2대로 부하 분산해서 약 2배의 성능 향상
- 세션공유(Session Clustering) : 4개의 노드(S01-Node01, S01-Node02, S02-Node01, S02-Node02) 구성으로 다운타임을 줄일수 있음
- 부하분산된 클러서터링 서버들간에 세션을 공유하게 해서, Client 관점에서는 마치 한대의 서버에서 처리되는 듯한 효과를 볼 수 있도록 구축하는 방식 입니다.
- 무중단 서비스를 가능게 할 수 있습니다.
- 클러스터된 서버가 동시에 모두 중단되지 않는한 동일한 세션을 유지 할 수 있습니다.
※ 4개의 노드구성으로 노드가 동시에 중단 되지 않는다면 서비스 다운타임을 줄일수 있음(소스 배포시 WAS가 리로드 되기때문에 세션이 끊겨버림 -> 소스를 순차적 배포를 해서 세션 유지)
[세부 설정 참고]
(1). mod_jk + mod_cluster 설치
(2). Apache의 부하분산 및 세션공유 설정 상세(mod_jk + mod_cluster)
(3). Jboss의 부하분산 및 세션공유 설정 상세(mod_jk + mod_cluster)
(4). 부하분산(Load Balancing)및 세션공유(Session Clustering)에서 배포하기(Deployments)