
HAProxy 및 로드 밸런싱 개념 소개
2022-05-31 last update
8 minutes reading Scaling Server Optimization HAProxy Conceptual소개
HAProxy는 고가용성 에이전트를 대표하며 리눅스, macOS, FreeBSD에서 실행할 수 있는 유행하는 소스 소프트웨어 TCP/HTTP 부하 평형기와 에이전트 솔루션입니다.가장 흔히 볼 수 있는 용도는 작업 부하를 여러 서버 (예를 들어 웹, 응용 프로그램, 데이터베이스) 에 분포하여 서버 환경의 성능과 신뢰성을 향상시키는 것이다.GitHub, Imgur, Instagram, Twitter 등 많은 눈길을 끄는 환경에 사용됩니다.
이 안내서에서 HAProxy가 무엇인지, 부하 균형 용어, 그리고 이를 어떻게 사용해서 서버 환경의 성능과 신뢰성을 향상시키는지 대략적으로 알 수 있습니다.
HAProxy 용어
부하 균형과 에이전트를 토론할 때, 많은 중요한 용어와 개념이 있다.다음 소절에서 자주 사용하는 용어를 상세하게 소개할 것입니다.
로드 밸런싱의 기본 유형을 배우기 전에 ACL, 백엔드 및 프런트엔드를 살펴봐야 합니다.
ACL(액세스 제어 목록)
로드 밸런싱의 경우 ACL은 특정 조건을 테스트하고 테스트 결과에 따라 작업을 수행합니다(예: 서버 선택 또는 요청 차단).ACL 사용은 패턴 일치 및 백엔드 연결 수와 같은 다양한 요소를 바탕으로 유연하게 네트워크 트래픽을 전달할 수 있습니다.
ACL 예:
acl url_blog path_beg /blog
사용자가 요청한 경로가 /blog
로 시작하는 경우 이 ACL과 일치합니다.예를 들어, 이것은 http://yourdomain.com/blog/blog-entry-1
의 요청과 일치합니다.ACL 사용에 대한 자세한 설명서는 HAProxy Configuration Manual 를 참조하십시오.
백엔드
백엔드는 전송 요청을 받는 서버입니다.백엔드는 HAProxy 구성의 백엔드 섹션에 정의됩니다.백엔드는 기본적으로 다음과 같이 정의할 수 있습니다.
다음은 두 개의 백엔드 구성
web-backend
과 blog-backend
의 예입니다. 각 구성에는 두 개의 웹 서버, 스캔 포트 80이 있습니다.backend web-backend
balance roundrobin
server web1 web1.yourdomain.com:80 check
server web2 web2.yourdomain.com:80 check
backend blog-backend
balance roundrobin
mode http
server blog1 blog1.yourdomain.com:80 check
server blog1 blog1.yourdomain.com:80 check
balance roundrobin
행에서 부하 균형 알고리즘을 지정합니다. 상세한 부분은 Load Balancing Algorithms 부분을 보십시오.mode http
7층 에이전트를 사용하도록 지정합니다. 이것은 Types of Load Balancing 부분에서 설명합니다.check
명령 끝에 있는 server
옵션은 백엔드 서버에서 상태 검사를 수행해야 한다고 지정합니다.프런트 엔드
프런트엔드에서 요청을 백엔드로 전달하는 방법을 정의합니다.프런트엔드는 HAProxy 구성
frontend
섹션에서 정의됩니다.정의는 다음과 같습니다.use_backend
규칙, 일치하는 ACL 조건에 따라 사용할 백엔드 정의, 및/또는default_backend
기타 상황을 처리하는 다음 절에서 기술한 바와 같이 앞부분은 각종 유형의 네트워크 데이터로 설정할 수 있다.
로드 밸런싱 유형
현재 부하 균형에 사용되는 기본 구성 요소를 알고 있습니다. 부하 균형의 기본 유형에 들어갈 수 있습니다.
로드 밸런싱 없음
로드 밸런싱이 없는 간단한 웹 응용 프로그램 환경은 다음과 같습니다.

이 예에서 사용자는 웹 서버
yourdomain.com
에 직접 연결되어 부하 균형이 없다.단일 웹 서버가 다운되면 사용자는 웹 서버에 더 이상 접근할 수 없습니다.또한 많은 사용자들이 서버에 동시에 접근하려고 하는데 이 서버가 부하를 처리할 수 없다면 체험이 느리거나 연결이 불가능할 수도 있습니다.Tier 4 로드 밸런싱
여러 서버의 네트워크 흐름에 대해 부하 균형을 맞추는 가장 간단한 방법은 4층(전송층)의 부하 균형을 사용하는 것이다.이러한 로드 밸런싱 방식은 IP 범위와 포트에 따라 사용자 트래픽을 전송합니다(즉, 요청이 있을 경우 트래픽은 백엔드, 백엔드 처리
http://yourdomain.com/anything
상의 모든 요청으로 전송됩니다).Tier 4에 대한 자세한 내용은 TCP 섹션Introduction to Networking을 참조하십시오.다음은 Tier 4 로드 밸런싱의 간단한 예제 그림입니다.

사용자가 부하 평형기에 접근하고, 부하 평형기는 사용자의 요청을 백엔드 서버의 웹 백엔드 그룹으로 전송합니다.백엔드 서버를 선택하든 사용자의 요청에 직접 응답합니다.일반적으로 웹 백엔드의 모든 서버는 같은 내용을 제공해야 한다. 그렇지 않으면 사용자가 일치하지 않는 내용을 받을 수 있다.두 웹 서버가 모두 같은 데이터베이스 서버에 연결되어 있음을 주의하십시오.
Tier 7 로드 밸런싱
또 다른 복잡한 부하 균형 네트워크 데이터의 방법은 7층(응용층)의 부하 균형을 사용하는 것이다.7층을 사용하면 부하 평형기는 사용자가 요청한 내용에 따라 요청을 다른 백엔드 서버로 전달할 수 있다.이 부하 균형 모드는 같은 도메인과 포트 아래에서 여러 개의 웹 응용 프로그램 서버를 실행할 수 있도록 합니다.Tier 7에 대한 자세한 내용은 DellIntroduction to Networking의 HTTP 소절을 참조하십시오.
다음은 Tier 7 로드 밸런싱의 간단한 예제 그림입니다.

이 예에서 사용자가 요청
yourdomain.com
을 하면 블로그 백엔드로 전송됩니다. 이것은 블로그 응용 프로그램을 실행하는 서버입니다.다른 요청은 웹 백엔드로 전송되며, 백엔드에서 다른 프로그램을 실행하고 있을 수도 있습니다.이 예에서 두 백엔드는 같은 데이터베이스 서버를 사용한다.예제 프런트엔드 구성의 코드는 다음과 같습니다.
frontend http
bind *:80
mode http
acl url_blog path_beg /blog
use_backend blog-backend if url_blog
default_backend web-backend
포트 80의 모든 전송 트래픽을 처리하기 위해 port 80
라는 프런트엔드가 구성됩니다.yourdomain.com/blog
사용자가 요청한 경로가 http
로 시작하면 요청과 일치합니다.acl url_blog path_beg /blog
ACL을 사용하여 트래픽을 에이전트합니다/blog
.use_backend blog-backend if url_blog
다른 모든 트래픽이 blog-backend
로 전달되도록 지정합니다.부하 균형 알고리즘
사용된 부하 균형 알고리즘은 부하 균형을 진행할 때 백엔드에서 어떤 서버를 선택할지 결정합니다.HAProxy는 다양한 알고리즘 옵션을 제공합니다.부하 균형 알고리즘을 제외하고 서버에 권중 파라미터를 분배하여 다른 서버에 비해 서버의 주파수를 선택할 수 있다.
다음은 몇 가지 일반적인 알고리즘입니다.
순환 경기
순환 선택 순서대로 서버를 선택합니다.기본 알고리즘입니다.
임대 회사
접속이 가장 적은 서버를 선택합니다.비교적 긴 회화에 대해 이렇게 하는 것을 건의합니다.같은 백엔드의 서버도 순환 방식으로 바뀐다.
출처
이것은 사용자가 요청한 원본 IP 주소의 해시 값에 따라 사용할 서버를 선택합니다.이 방법은 같은 사용자가 같은 서버에 연결될 수 있도록 합니다.
점성 회화
일부 애플리케이션에서는 동일한 백엔드 서버에 계속 접속해야 합니다.이것은 점성 세션을 통해 백엔드에 필요한
default_backend web-backend
파라미터를 사용할 수 있다.상태 점검
HAProxy는 백엔드 서버가 요청을 처리하는 데 사용할 수 있는지 확인하기 위해 상태 검사를 사용합니다.이것은 서버를 사용할 수 없을 때 백엔드에서 수동으로 서버를 삭제해야 하는 것을 피한다.기본 상태 확인은 서버에 TCP 연결을 시도하는 것입니다.
서버가 상태 검사를 통과하지 않아 요청에 서비스를 제공할 수 없는 경우 백엔드에서 서버가 자동으로 비활성화되고 서버가 정상적으로 복구되기 전까지는 데이터를 전송하지 않습니다.백엔드의 모든 서버에 장애가 발생하면 백엔드 서버가 하나 이상 정상적으로 복구될 때까지 서비스를 사용할 수 없습니다.
데이터베이스 서버와 같은 일부 유형의 백엔드의 기본 운행 상황 검사는 서버가 여전히 정상인지 확인하기 위한 것이 아니다.
Nginx 웹 서버는 독립된 프록시 서버나 부하 평형기로도 사용할 수 있으며, 캐시와 압축 기능 때문에 HAProxy와 자주 결합하여 사용된다.
고가용성
이 강좌에서 기술한 4층과 7층의 부하 균형 설정은 부하 균형기를 사용하여 많은 백엔드 서버 중 하나로 데이터를 정합니다.그러나 이러한 설정에서 부하 평형기는 단일 고장이다.만약 그것이 다운되거나 요청에 잠기면 서비스에 높은 지연이나 정지 시간이 발생할 수 있습니다.
HA(고가용성) 설정은 단일 장애 지점이 없는 인프라로 광범위하게 정의됩니다.또한 아키텍처의 각 계층에 이중화를 추가하여 단일 서버 장애가 다운타임 이벤트가 되지 않도록 합니다.부하 평형기는 백엔드 층 (웹/응용 서버) 의 군더더기에 도움이 되지만, 진정한 고가용성 설정을 실현하려면 군더더기 부하 평형기가 필요하다.
다음은 고가용성 설정의 다이어그램입니다.

이 예에서는 정적 IP 주소 뒤에 여러 개의 부하 평형기(주동적이고 하나 이상의 수동)가 있어 한 서버에서 다른 서버로 다시 매핑할 수 있습니다.사용자가 웹 사이트를 방문할 때 외부 IP 주소를 통해 주동적인 부하 평형기에 전송할 것을 요청합니다.로드 밸런서에 장애가 발생하면 페일오버 메커니즘이 감지되고 수동 서버 중 하나에 IP 주소가 자동으로 재할당됩니다.액티브/패시브 HA 설정을 위한 여러 가지 방법이 있습니다.자세한 내용은 를 참조하십시오How To Use Floating IPs.
결론
이제 부하 균형을 이해하고 HAProxy를 어떻게 사용하는지 알게 되면 서버 환경의 성능과 신뢰성을 향상시킬 수 있는 튼튼한 기반을 갖게 됩니다.
나중에 볼 수 있도록 HAProxy 출력을 저장하는 데 관심이 있으시다면How To Configure HAProxy Logging with Rsyslog on CentOS 8 [Quickstart]
문제를 해결하려면 Common HAProxy Errors 를 참조하십시오.추가 문제 해결이 필요한 경우 How To Troubleshoot Common HAProxy Errors 를 참조하십시오.