서비스가 사용량이 많아도 견디기 위해서는 여러 서버를 구성하고 이들간에 부하 분산을 해주어야 합니다

이를 처리하는 제품을 Load balancer 라고 하며 적절하게 부하를 분산하기 위해 여러가지 부하 분산 방식을 제공합니다.


부하 분산 알고리즘

Round Robin(RR)

라운드 로빈 알고리즘은 일반적으로 기본 로드 밸런싱 설정이며 클러스터내의 Server 를 순회하면서 서비스합니다. 

즉 클러스터에 A, B, C 서버가 있을 경우 A → B → C → A 식으로 순회하여 부하를 분산합니다.


처리 서버가 바뀔수 있으므로 이 방식을 사용하려면 session clustering 이 구성되어 있어야 합니다.


가장 간단하고 이해도 쉬워서 많이 사용하지만 서버간 처리 용량이 다른 경우 적합하지 않습니다.

least connection

가장 클라이언트 연결 갯수가 적은 서버로 부하를 분산하여 균등하게 전달하는 방식입니다.

RR 과 마찬가지로 이 방식을 사용하려면 session clustering 이 구성되어 있어야 합니다.


ip hash

클라이언트 IP 를 hash 해서 특정 클라이언트는 특정 서버로 연결하도록 하는 설정입니다.

Session clustering 이 구성되지 않은 경우 유용하지만 부하가 골고루 분산되지 않고 특정 서버에 몰릴 수 있는 위험이 있습니다.

Server Weights RR

서버에 가중치를 주어서 가중치가 높은 서버가 더 많은 일을 처리하게 합니다.

서버가 동시에 들어와서 같은 사양이 아니고 특정 서버의 스펙이 더 좋을 경우 스펙 좋은 서버에 가중치를 높게 주어 처리량을 늘릴수 있습니다.


nginx 웹 서버도 로드 밸런서 기능이 있으며 다음과 같이 Upstream 에 가중치를 줄 수 있습니다.

upstream phpserver {       
        server was1-ip:1234 weight=5;
        server was2-ip:1234 ;
        server 192.0.0.1 backup;
}
CODE

위 설정은 was1 서버에 5번 요청한 후에 was2 서버에 요청하며 backup 으로 지정된 서버는 메인 서버가 다 fault 일 경우에만 서비스하는 설정입니다.


Server Slow Start

별도의 부하 분산 알고리즘보다는 복구된 서버의 재장애를 방지하기 위한 기법입니다.

예로 클러스터내 특정 서버가 장애에서 복구되어서 다시 클러스터에 참여했을 경우 최근에 요청이 몰려서 다시 장애가 나지 않도록 slow_start 에 시간을 설정하면 주어진 시간만큼 기다려 줍니다.

즉 slow_start 를 설정한 서버에는 정해진 시간동안 부하를 분산하지 않습니다.

일반적인 Load Balancer 기능은 아리며 제품에 따라 기능이 존재하지 않을수 있습니다.


같이 보기


Ref