16.1 클러스터링 이해
클러스터(Cluster)란 네트워크를 이용하여 마치 하나의 컴퓨터처럼 동작하도록 여러 대의 컴퓨터를 연결하여 구성하는 것을 말한다. 즉 여러 대의 서버들 전체를 한 대의 서버 시스템과 같이 동작하게 하는 기술이나 기능을 말한다. 클라이언트 입장에서는 특정 서버의 상태에 의존하지 않고 클러스터로 묶인 서버 그룹을 마치 하나의 서버에서 서비스를 제공하는 것으로 인식한다. 클러스터 내의 어떤 서버로 접속하든지 동일하게 처리되기 때문에 클라이언트의 요청을 클러스터 멤버에 분산하여 처리하는 것이다. 이렇게 처리함으로써 클라이언트는 여러 개의 서버를 묶은 클러스터가 마치 하나의 서버인 것처럼 보이게 된다.
확장성과 고가용성이 요구되는 웹 시스템에서는 각각의 레이어 마다 고유의 클러스터링 기술을 사용하고 있다. JBoss EAP6를 사용한 웹 시스템 구축에서도 로드밸런싱과 페일오버(failover)를 위해서 클러스터링 기능을 사용한다. JBoss 는 자바 프로세스 단위로 클러스터링을 구성하며, 서버의 물리적인 위치에 관계없이 구성이 가능하다.
특히 고가용성이 요구되는 미션 크리티컬 업무에서 클러스터링은 매우 중요하다. 예를 들어 금융권에서의 인터넷 뱅킹 시스템, 제조업에서 생산공정관리 시스템, 온라인 쇼핑몰 시스템 등의 서비스에서 클러스터를 이용하여 마치 하나의 서버에서 제공하는 것처럼 구성한다. 클러스터링을 통해 특정 서버 장애가 전체 서비스에 영항을 미치지 않도록 구성하는 것이 매우 중요하다.
클러스터를 구성하는 목적은 크게 두 가지로 부하 분산(Load Balancing)과 고가용성(High Availability)이다.
-
부하 분산(Load Balancing)
부하 분산은 클러스터 앞 단에서 모든 클러스터 멤버로 부하를 균등하게 분산하는 것이다. 이론적으로 클러스터를 사용하면 처리량은 클러스터를 구성하는 서버들의 성능을 합친 것이 된다. 처리량을 늘리고 싶다면, 클러스터에 새로운 서버를 추가하여 전체 클러스터의 처리량을 늘릴 수 있다.

그림 1. 로드 밸런서의 역할
-
고가용성(HA ; High Availability)
고가용성은 클러스터 멤버에 장애가 발생할 경우 다른 멤버가 그 역할을 대신할 수 있도록 하는 것이다. HA 클러스터링은 서비스의 다운 타임을 줄여 준다.
클러스터의 한 서버가 중지될 경우에 다른 서버가 그 역할을 대신(Failover) 처리하여 고가용성을 제공한다. 클러스터링을 구성하여 서비스를 중단 없이 항상 사용 가능한 상태를 유지할 수 있다.

그림 2. 웹 애플리케이션 서버의 HA기능
-
JBoss EAP 6 클러스터
JBoss EAP 6에서는 웹 애플리케이션, EJB 애플리케이션, JMS 기능에 각각 클러스터링을 적용할 수 있다. JBoss EAP 6에는 설정을 편하게 할 수 있도록 프로파일 단위로 클러스터링이 가능한 구성 설정 파일을 제공하고 있다. 파일명의 뒷부분에 ha, full-ha 프로파일이 클러스터링을 제공하는 프로파일이다. 클러스터링을 구현하는 핵심기술은 요청에 대한 로드 밸런싱과 상태를 복제하는 기술이다.
먼저 클러스터링을 구현하기 위한 핵심 기술에 대해서 살펴보고, 웹 애플리케이션, EJB 애플리케이션, JMS에 대한 클러스터링 설정 방법을 설명한다.