로드밸런서(Load Balancer) - Part 3 (부하 분산 알고리즘)
Today Keys : 로드밸런서, L4, L7, 부하분산, Load Balancer, Load Balancing, 라운드로빈, Least, connection, 헬스체크, health
본 포스팅은 'IT 엔지니어를 위한 네트워크 입문' [길벗] 서적에 포함된 '12. 로드밸런서'의 내용 중 소개 및 12.4장의 내용입니다
12.3. 헬스 체크
로드 밸런서가 리얼 서버로 부하를 분산할 때,로드 밸런서에서는 사전에 설정한 분산 알고리즘을 통해 부하 분산이 이루어집니다. 이번 절에서는 주요 부하 분산 알고리즘에 대해 살펴보겠습니다.
라운드 로빈 (Round Robin) |
현재 구성된 장비에 부하를 순차적으로 분산함. 총 누적 세션 수는 동일하지만 활성화된 세션 수는 달라질 수 있음 |
최소 접속 방식 (Least Connection) |
현재 구성된 장비 중 가장 활성화된 세션 수가 적은 장비로 부하를 분산함 |
가중치 기반 라운드 로빈 (Weighted Round Robin) |
라운드 로빈 방식과 동일하지만 각 장비에 가중치를 두어 가중치가 높은 장비에 부하를 더 많이 분산함. 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘 |
가중치 기반 최소 접속 방식 (Weighted Least Connection) |
최소 접속 방식과 동일하지만 각 장비에 가중치를 부여해 가중치가 높은 장비에 부하를 더 많이 분산함. 처리 용량이 다른 서버에 부하를 분산하기 위한 분산 알고리즘 |
해시(Hash) | 해시 알고리즘을 이용한 부하 |
이 밖에도 기본적인 부하 분산 알고리즘을 응용한 다양한 분산 알고리즘이 사용되지만 가장 많이 사용되는 3가지 알고리즘에 대해서만 더 자세히 살펴보겠습니다.
12.4.1 라운드로빈
라운드 로빈 방식은 특별한 규칙 없이 현재 구성된 장비에 순차적으로 돌아가면서 트래픽을 분산 합니다. 즉,서버 세 대가 있을 때,첫 번째 요청은 1번 서버,두 번째 요청은 2번 서버,세 번째 요청은 3번 서버, 네 번째 요청은 다시 1번 서버로 할당합니다. 순차적으로 모든 장비에 분산하므로 모든 장비의 총 누적 세션 수는 같아집니다.
12.4.2 최소접속방식
최소 접속 방식(Least Connection)은 서버가 가진 세션 부하를 확인해 그것에 맞게 부하를 분산하는 방식입니다. 로드 밸런서에서는 서비스 요청을 각 장비로 보내줄 때마다 세션 테이블이 생성되므 로 각 장비에 연결된 현재 세션 수를 알 수 있습니다. 최소 접속 방식은 각 장비의 세션 수를 확인 해 현재 세션이 가장 적게 연결된 장비로 서비스 요청을 보내는 방식입니다. 서비스별로 세션 수 를 관리하면서 분산해주므로 각 장비에서 처리되는 활성화 세션 수가 비슷하게 분산되면서 부하를 분산하게 됩니다.
12.4.3 해시
해시 방식은 서버의 부하를 고려하지 않고 클라이언트가 같은 서버에 지속적으로 접속하도록 하 기 위해 사용하는 부하 분산 방식입니다. 서버 상태를 고려하는 것이 아니라 해시 알고리즘을 이용해 얻은 결팟값으로 어떤 장비로 부하를 분산할지를 결정합니다. 알고리즘에 의한 계산 값에 의 해 부하를 분산하므로 같은 알고리즘을 乂!용하면 항상 동일한 결왓값을 가지고 서비스를 분산할 수 있습니다. 이때 알고리즘 계산에 사용되는 값들을 지정할 수 있는데 주로 출발지 ip 주소,목적 지 ip 주소,출발지 서비스 포트,목적지 서비스 포트를 사용합니다.
라운드 로빈이나 최소 접속 방식은 부하를 비교적 비슷한 비율로 분산시킬 수 있다는 장점이 있 지만 동일한 출발지에서 로드 밸런서를 거친 서비스 요청이 처음에 분산된 서버와 그 다음 요청이 분산된 서버가 달라질 수 있어 각 서버에서 세션을 유지해야 하는 서비스는 정상적으로 서비스되 지 않습니다.
그와 반대로 해시 방식은 알고리즘으로 계산한 값으로 서비스를 분산하므로 항상 동일한 장비로 서비스가 분산됩니다. 즉,세션을 유지해야 하는 서비스에 적합한 분산 방식입니다. 하지만 알고 리즘의 결팟값이 특정한 값으로 치우치면 부하 분산 비율이 한쪽으로 치우칠 수도 있습니다. 최근 에는 이런 경우가 별로 없지만 서버 애플리케이션 개발에 여러 대의 서버가 사용될 것을 고려하지 않고 개발한 경우,이 방식을 사용해야 합니다. 흔히 이런 문제를 장바구니 문제라고 하는 데 A 서 버에 접속해 장바구니에 상품을 넣었는데 두 번째 접속할 때 B 서버로 접속되면 장바구니에 넣은 상품이 보이지 않을 때가 있습니다.
해시를 사용해야 하는 이유와 최소 접속 방식의 장점을 묶어 부하 분산하는 방법도 있습니다. 라 운드 로빈 방식이나 최소 접속 방식을 사용하면서 스티키(Sticky) 옵션을 주어 한 번 접속한 커넥션 을 지속적으로 유지하는 기법입니다. 처음 들어온 서비스 요청을 세션 테이블에 두고 같은 요청이 들어오면 같은 장비로 분산해 세션을 유지하는 방법입니다. 하지만 이렇게 하더라도 해당 세션 테 이블에는 타임아웃이 있어 타임아웃 이후에는 분산되는 장비가 달라질 수 있다는 것을 고려해야 합니다. 스티키 옵션을 사용할 때는 애플리케이션 세션 유지 시간이나 일반 사용자들의 애플리케 이션 행동 패턴을 충분히 감안해야 합니다.
따라서 부하 분산을 위한 알고리즘을 선택할 때는 제공되는 서비스의 특성을 잘 고려해 사용할 알고리즘을 결정해야 합니다. 그리고 각 알고리즘에 필요한 속성값도 함께 잘 고려해야만 적절한 부 하 분산을 할 수 있습니다.