본문 바로가기

클러스터

클러스터 란? - 리눅스 클러스터링

인터넷이 발달하면서 엄청나게 늘어난 서비스 사용량을 처리하기에는 시스템의 성능의 부족함이 느껴지고 있다. 늘어난 사용량을 처리하기 위해 높은 가용성과 확장성을 가진 서버가 필요하다. 하지만 고성능의 병렬컴퓨터나 슈퍼컴퓨터가 매우 고가이기 때문에 쉽게 이용 할 수 없다. 이로인해 클러스터링 기술이 부각되기 시작한다.

클러스터 란

컴퓨팅 파워를 증가시키기 위한 방법이다.  여러 대의 일반 워크스테이션을 네트워크로 연결하여 하나의 PC처럼 작동하게 하는 기술을 말한다. 워크스테이션의 cpu 성능이 좋아지고 네트워크 속도 또한 엄청나게 발달하여 클러스터의 실적용이 가능해졌다. 클러스터 pc들의 OS는 오픈소스로 인해 자유롭게 튜닝이 가능한 리눅스를 사용한다.


과학 계산 클러스터

대규모 연산을 하기 위한 클러스터이다. 기상 예측, 핵 관련 등의 과학 분야에서 사용한다. 최근에는 3D 작업 등과 같은 일반 pc로 시간이 오래 걸리는 작업들에서도 활용되고 있다. 

과학 계산 클러스터의 구현방식로는 각각의 시스템들의 하드디스크에 운영체제를 각자 설치하여 시스템에 필요한 파일등을 자체적으로 해결하는 방식과 메인 서버 한 대에만 하드디스크가 존재하여 다른 시스템들은 메인 서버의 파일 시스템을 사용하는 Disk-Less 클러스터 방식이 있다.


부하 분산 클러스터

부하 분산이란 Load Balancer를 통해 각 장비에 걸리는 부하(작업,처리)를 시스템 성능이 허용할 수 있게 분산시키는 것이다. 웹서버와 같이 불특정 다수를 대상으로 높은 가용성을 재공하기 위해 사용한다.

부하 분산 클러스터는 L4 Switch 장비를 이용하여 이전부터 구축을 했지만 고가의 시스템이라 일반적으로 적용하기는 힘들었다. 하지만 리눅스 커널에서 L4 switch보다 월등한 성능을 갖으면서 동일한 기능을 수행 할 수 있는 LVS(Linux Virual Server)를 지원하면서 클러스터를 사용하여 쉽고 저렴하게 고성능 서버를 이용할 수 있게 되었다. 


네트워크 구성에 따른 부하 분산 클러스터
서버 측면의 부하 분산 방식 - Load Balancer를 앞 단에 두고 real server들에게 작업을 분산하는 것이다.
client 측면의 부하 분산 방식 - client에 부하분산 모듈을 넣어서 client가 직접 서버의 상황을 확인하고 직접 분산되는 것이다.


네트워크 구성에 따른 부하 분산 클러스터 종류

1. NAT(Network Address Translation) 부하 분산 방식
사설 IP를 사용하는 내부망에서 인터넷 망으로 접근하기 위해서는 네트워크 주소 변환이 필요하다. 이러한 기능을 NAT라고 한다. NAT 부하 분산 방식은 NAT를 이용하여 공인IP로 들어오는 사용자의 요청 패킷을 LVS가 ip와 port를 확인 후 네트워크 주소 부분을 사설 IP로 변환하여 작업 서버로 전달하는 것이다. 작업 서버는 처리 내용을 다시 LVS에게 전달하고 LVS는 사설 IP로 된 패킷을 다시 공인 IP로 변환 후 요청한 사용자에게 보낸다.

2. DR(Direct Routing) 부하 분산 방식
NAT 부하 분산 방식과 마찬가지로 LVS가 사용자 요청 패킷을 확인 후 작업 서버로 전달하지만 전달 과정이 다르다. LVS와 작업 서버들이 동일한 가상 IP를 공유하여 사용자가 직접 작업 서버로 보내는 것처럼 보이는 방식이다. DR방식은 MAC 주소만을 변경하기 때문에 같은 네트워크 망에서만 동작이 가능하다. 이 방식에서 주의 해야 할 것은 arp caching이 남으면 안된다는 것이다. arp가 남으면 사용자는 처음 연결된 작업 서버와만 통신이 이뤄지게 되기 때문이다. 이렇게 되면 LVS를 지나가지 않는 것과 마찬가지기에 LVS는 작업 서버의 처리 중인 량을 모르게되어 부하 분산이 재대로 되지 않는다.


3. IP Tunneling 부하 분산 방식
IP Tunneling은 datagram(http://jw3461.tistory.com/5?category=763093 참조)안에 다른 ip 정보를 캡슐화(encapsulation)하는 기술이다. LVS의 가상 IP주소로 들어온 캡슐화된 패킷을 풀어 작업 서버로 전달하면 작업 서버는 처리 후 결과를 사용자에게 직접 전송하는 방식이다. IP Tunneling 방식은 물리적 영향을 받지 않고 어디든 작업을 분산 할 수 있다. 즉 클러스터로 구성된 서버들이 같은 네트워크  망이 아닌 다른 네트워크 망에 떨어져 있어도 가능하다. 확장성이 엄청나지만 모든 서버가 IP Tunneling protocol을 지원하지 않는 OS에서는 구성이 불가능하다.



작업 할당 방식
1. Round-Robin 방식(라운드 로빈 방식)

라운드 로빈 방식이란 작업을 순서대로 돌리는 것이다. 작업 서버 A~C 3대가 있다면 LVS는 들어온 요청 순서대로 1번째는 A, 2번째는 B, 3번째는 C, 4번째는 A .... 이런식이다. 뮤직 플레이어의 전곡 반복모드랑 같은 방식이다. 처리가 오래걸리는 요청과 간단한 요청, 각 서버의 성능 등은 전혀 고려하지 않고 무조건 순서대로 작업을 할당한다. 


2. Weighted Round-Robin 방식(가중치기반 라운드 로빈 방식)

일반 라운드 로빈방식에서 작업 서버 별로 가중치를 두어 성능이 좋은 서버에게 더 많은 처리를 시키는 것이다. A~C 3대의 작업 서버에 가중치를 각각 5,3,1로 준다면 LVS는 A-B-C-A-B-A-B-A-A 순서로 할당한다. 서버마다 할당된 가중치만큼 수행 후 다시 처음부터 시작하는 것이다. 모든 가중치를 동일하게 설정한다면 라운드 로빈 방식과 동일하게 동작한다.


3. Least-Connection 방식(최소 접속 방식)

처리 요청이 들어오면 각 작업 서버들에게 접속 되어 있는 숫자를 확인 후 접속이 적은 작업 서버로 요청을 직접 연결하는 방식이다. 이 방식은 비슷한 성능의 시스템들로 구성하는 것이 효율적이다. 


4. Weighted Least-Connection 방식(가중치기반 최소 접속 방식)

각각의 작업 서버들에 가중치를 부여하여 성능이 좋은 서버가 더 많은 요청을 받을 수 있게 한다.