HAProxy Round Robin Load Balancing
웹 서비스의 가용성과 성능을 극대화하기 위해 로드 밸런싱을 필수적인 요소입니다. 다양한 로드 밸런싱 기법 중에서 Round-Robin 방식은 가장 간단하면서도 효과적인 방법으로 널리 사용되고 있습니다. HAProxy Round Robin load balancing은 강력한 툴로 자리 잡고 있습니다.
이 포스트에서는 Round-Robin load balancing의 원리와 장점, HAProxy Round Robin을 구성하는 방법에 대해 살펴보겠습니다.
목차
1. Round-Robin Load Balancing 개념
2. HAProxy Round-Robin 구성
2-1. HAProxy Round-Robin 구성
2-2. Backend 서버 정보
3. HAProxy Round-Robin Load Balancing 확인
4. 결론
1. Round-Robin Load Balancing 개념
Round-Robin load balancing은 로드 밸런싱 기법 중 하나로, 클라이언트의 요청을 여러 서버에 균등하게 분산시키는 방법입니다. 이 방식은 간단하면서도 효과적이어서 많은 웹 서비스에서 널리 사용됩니다.
Round-Robin Load Balancing의 기본 원리는 다음과 같습니다.
- 요청 분배 – 클라이언트가 서버에 요청을 보낼 때, 로드 밸런서는 연결된 서버 목록을 순서대로 순환하며 요청을 분배합니다. 즉, 첫 번째 요청은 첫 번째 서버로, 두 번째 요청은 두 번째 서버로 전송되며, 이렇게 계속 순환합니다.
- 균등한 부하 분산 – 모든 서버에 요청이 고르게 분배되므로, 각 서버의 부하가 비슷하게 유지됩니다. 이는 서버의 과부하를 방지하고, 전체 시스템의 성능을 향상시킵니다.
- 단순한 구현 – Round-Robin 방식은 구현이 간단하여 설정이 쉽고, 특별한 알고리즘이나 복잡한 로직이 필요하지 않습니다. 이로 인해 초기 설정 및 유지 관리가 용이합니다.
주의할 점은 각 서버의 성능이 다를 경우, 불균형이 발생할 수 있습니다.
2. HAProxy Round-Robin 구성
이 포스트에서 전제 조건은 다음과 같습니다.
- Ubuntu 22.04.3 LTS
- HAProxy OSS 3.0 LTS
해당 포스트에서는 HAProxy 설치하는 방법을 다루지 않습니다. HAProxy를 설치하는 방법은 아래 포스트를 참조하세요.
2-1. HAProxy Round-Robin 구성
HAProxy의 기본 구성 파일 경로는 /etc/haproxy/haproxy.cfg입니다.
global
log /dev/log local0 # 로깅 설정: local0 로그를 /dev/log에 기록
log /dev/log local1 notice # 로깅 설정: local1 로그를 /dev/log에 기록, notice 레벨로
chroot /var/lib/haproxy # HAProxy의 루트 디렉토리를 /var/lib/haproxy로 설정
pidfile /var/run/haproxy.pid # HAProxy 프로세스 ID를 저장할 파일 경로
maxconn 4000 # 최대 동시 연결 수를 4000으로 설정
user haproxy # HAProxy 프로세스를 실행할 사용자
group haproxy # HAProxy 프로세스를 실행할 그룹
daemon # HAProxy를 데몬 모드로 실행
# 통계 UNIX 소켓 활성화
stats socket /var/lib/haproxy/stats # HAProxy 통계 정보를 제공할 소켓 경로
defaults
mode http # 기본 모드를 HTTP로 설정
log global # 글로벌 로깅 설정 사용
option httplog # HTTP 로그 옵션 활성화
option dontlognull # NULL 요청에 대한 로그 기록하지 않음
retries 3 # 요청 실패 시 재시도 횟수
timeout http-request 10s # HTTP 요청 타임아웃 설정
timeout queue 1m # 요청 대기열 타임아웃 설정
timeout connect 10s # 서버 연결 타임아웃 설정
timeout client 1m # 클라이언트 타임아웃 설정
timeout server 1m # 서버 타임아웃 설정
timeout http-keep-alive 10s # HTTP Keep-Alive 타임아웃 설정
timeout check 10s # 건강 체크 타임아웃 설정
maxconn 3000 # 최대 동시 연결 수를 3000으로 설정
errorfile 400 /etc/haproxy/errors/400.http # 400 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 403 /etc/haproxy/errors/403.http # 403 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 408 /etc/haproxy/errors/408.http # 408 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 500 /etc/haproxy/errors/500.http # 500 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 502 /etc/haproxy/errors/502.http # 502 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 503 /etc/haproxy/errors/503.http # 503 오류에 대한 사용자 정의 에러 페이지 경로
errorfile 504 /etc/haproxy/errors/504.http # 504 오류에 대한 사용자 정의 에러 페이지 경로
frontend main
bind *:80 # 80번 포트를 바인딩하여 HTTP 요청 수신
stats enable # 통계 기능 활성화
stats uri /stats # 통계 정보에 접근할 URI 설정
default_backend app # 기본 백엔드 서버 그룹 설정
backend app
balance roundrobin # 요청을 라운드 로빈 방식으로 분산
server app1 192.168.200.10:81 check # 첫 번째 서버: 192.168.200.10의 81번 포트
server app2 192.168.200.10:82 check # 두 번째 서버: 192.168.200.10의 82번 포트
server app3 192.168.200.10:83 check # 세 번째 서버: 192.168.200.10의 83번 포트
이 설정은 HAProxy를 사용한 간단한 서버 설정과 HTTP 요청을 처리하고, 여러 백엔드 서버(app1, app2, app3)로 로드 밸런싱을 수행하는 구조입니다. 각 부분은 특정 기능과 설정을 정의하고 있습니다.
여기서의 핵심은 balance roundrobin 설정입니다. 이 설정을 통해 복잡한 구성 없이 Round-
Robin load balancing을 사용할 수 있습니다.
2-2. Backend 서버 정보
HAProxy 구성에서 Backend는 NGINX를 사용하였고 구성은 다음과 같습니다:
server {
listen 81;
location / {
default_type application/json;
return 200 '{81}\n';
}
}
server {
listen 82;
location / {
default_type application/json;
return 200 '{82}\n';
}
}
server {
listen 83;
location / {
default_type application/json;
return 200 '{83}\n';
}
}
Backend 서버의 응답은 각각 다음과 같습니다.

3. HAProxy Round-Robin Load Balancing 확인
HAProxy 서버에서 cURL 명령을 사용하여 요청을 균등하게 분산시키는지 확인합니다.
root@server:~# curl localhost
{81}
root@server:~# curl localhost
{82}
root@server:~# curl localhost
{83}
root@server:~# curl localhost
{81}
root@server:~# curl localhost
{82}
root@server:~# curl localhost
{83}
root@server:~# curl localhost
{81}
root@server:~# curl localhost
{82}
root@server:~# curl localhost
{83}
위와 같이 요청을 각 서버별로 균등하게 분산시키는 것을 확인할 수 있습니다.
4. 결론
HAProxy를 활용한 Round-Robin Load Balancing은 웹 서비스의 성능과 가용성을 높이는 효과적인 방법입니다. 이 방식은 간단하고 직관적인 요청 분배로 많은 서버에 균등한 부하를 제공하여, 시스템의 안정성을 유지하는 데 기여합니다. 특히, 트래픽 패턴이 균일한 환경에서는 Round-Robin이 매우 유용하게 작용할 수 있습니다.
그러나 Round-Robin 방식은 서버 성능의 차이나 세션 관리를 고려하지 않기 때문에, 특정 상황에서는 한계가 있을 수 있습니다. 이러한 한계를 극복하기 위해서는 서버의 상태나 성능에 따라 다른 로드 밸런싱 기법을 사용할 필요가 있습니다. 예를 들어, Least Connections나 IP Hash와 같은 대안적인 알고리즘이 이러한 문제를 해결하는 데 도움을 줄 수 있습니다.
결론적으로, HAProxy와 Round-Robin 로드 밸런싱의 조합은 많은 웹 서비스에서 효율적인 트래픽 관리 솔루션으로 자리 잡고 있으며, 다양한 환경에 맞춰 적절한 로드 밸런싱 전략을 선택하는 것이 중요합니다. 앞으로도 로드 밸런싱 기술은 계속 발전할 것이며, 이를 통해 더욱 향상된 서비스 품질과 사용자 경험을 제공할 수 있을 것입니다.
댓글을 달려면 로그인해야 합니다.