웹사이트 검색

Ubuntu 14.04에서 HAProxy를 사용한 웹 서버 로드 밸런싱


이 페이지에서

  1. HAProxy란 무엇입니까?
  2. HAProxy 설치
  3. HAProxy 구성
  4. 로드 밸런싱 및 페일오버 테스트

HAProxy란 무엇입니까?

HAProxy 설치

Ubuntu 14.04를 사용하고 있으며 다음을 통해 설치합니다.

apt-get install haproxy

다음을 통해 버전을 확인할 수 있습니다.

haproxy -v


초기화 스크립트 /etc/default/haproxy로 시작하려면 HAProxy를 활성화해야 합니다. 다음과 같이 ENABLED 옵션을 1로 설정합니다.

ENABLED=1

이 변경이 제대로 수행되었는지 확인하려면 매개변수 없이 HAProxy의 초기화 스크립트를 실행하십시오. 다음이 표시되어야 합니다.

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

HAProxy 구성

이름을 변경하여 원본 파일을 백업합니다.

mv /etc/haproxy/haproxy.cfg{,.original}

우리 자신의 haproxy.cfg 파일을 만드십시오. 선호하는 텍스트 편집기를 사용하여 다음과 같이 /etc/haproxy/haproxy.cfg 파일을 생성합니다.

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

설명:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

로그 지시어는 로그 메시지가 전송될 syslog 서버를 언급합니다.
maxconn 지시어는 프런트 엔드의 동시 연결 수를 지정합니다. 기본값은 2000이며 시스템 구성에 따라 조정해야 합니다.
사용자 및 그룹 지시문은 HAProxy 프로세스를 지정된 사용자/그룹으로 변경합니다. 이것들은 변경되어서는 안됩니다.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

위 섹션에는 기본값이 있습니다. redispatch 옵션은 연결 실패 시 세션 재분배를 활성화합니다. 따라서 웹 서버 인스턴스가 다운되면 세션 고정이 무시됩니다.
재시도 지시문은 연결 실패 후 웹 서버 인스턴스에서 수행할 재시도 횟수를 설정합니다.
수정할 값은 다양한 시간 초과 지시문입니다. contimeout 옵션은 웹 서버 인스턴스에 대한 연결 시도가 성공할 때까지 기다리는 최대 시간을 지정합니다.
clitimeout 및 srvtimeout은 TCP 프로세스 중에 클라이언트 또는 서버가 데이터를 확인하거나 보낼 것으로 예상되는 경우에 적용됩니다. HAProxy는 클라이언트 및 서버 시간 초과를 동일한 값으로 설정할 것을 권장합니다.


listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check

위 블록에는 프런트엔드와 백엔드 모두에 대한 구성이 포함되어 있습니다. 애플리케이션을 식별하기 위한 이름인 webfarm에 대해 포트 80에서 수신 대기하도록 HAProxy를 구성하고 있습니다.
통계 지시문은 연결 통계 페이지를 활성화합니다. 이 페이지는 stats uri에 언급된 URL로 볼 수 있으므로 이 경우 http://192.168.205.15/haproxy?stats입니다. 이 페이지의 데모는 여기에서 볼 수 있습니다.
균형 지시어는 부하 분산 알고리즘을 지정합니다. 사용. 사용 가능한 알고리즘 옵션은 다음과 같습니다.

  • 라운드 로빈(round robin),
  • 정적 라운드 로빈(static-rr),
  • 최소 연결(leastconn),
  • 소스(소스),
  • URI(우리)와
  • URL 매개변수(url_param).

각 알고리즘에 대한 정보는 공식 문서에서 얻을 수 있습니다.

서버 지시문은 백엔드 서버를 선언하며 구문은 다음과 같습니다.

server <server_name> <server_address>[:port] [param*]
    

여기에서 언급한 이름은 로그와 경고에 나타납니다. 이 지시문에서 지원하는 매개변수가 몇 가지 더 있으며 이 문서의 확인 매개변수를 사용하는 것이 좋습니다. 확인 옵션은 웹 서버 인스턴스에 대한 상태 확인을 활성화합니다. 그렇지 않으면 웹 서버 인스턴스는 항상 사용 가능한 것으로 간주됩니다.

구성을 완료하면 HAProxy 서비스를 시작합니다.

sudo service haproxy start

로드 밸런싱 및 페일오버 테스트

기본적으로 /var/www/index.html에 있는 기본 index.html 파일 모두에 서버 이름을 추가합니다.

인스턴스 2 - 웹 서버 1(IP-192.168.205.16이 있는 webserver01)에서 아래 줄을 다음과 같이 추가합니다.

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

인스턴스 3 - 웹 서버 2(IP-192.168.205.17이 있는 webserver02)에서 아래 줄을 다음과 같이 추가합니다.

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

이제 로컬 컴퓨터에서 웹 브라우저를 열고 haproxy IP 즉 http://192.168.205.15를 탐색합니다.

탭을 새로 고칠 때마다 로드가 각 웹 서버에 분산되는 것을 볼 수 있습니다. 아래는 내 브라우저의 스크린샷입니다.

http://192.168.205.15 를 처음 방문하면 다음과 같은 결과가 나타납니다.

그리고 두 번째로, 즉 페이지를 새로고침하면 다음과 같은 결과가 나타납니다.

http://192.168.205.15/haproxy?stats를 방문하여 haproxy 통계를 확인할 수도 있습니다.

이 설정에 더 많은 작업을 수행할 수 있습니다. 몇 가지 아이디어는 다음과 같습니다.

  • HAProxy에 액세스할 때 어떤 일이 발생하는지 테스트하기 위해 하나 또는 두 웹 서버를 모두 오프라인으로 전환합니다.\n
  • 사용자 지정 유지 관리 페이지를 제공하도록 HAProxy 구성\n
  • HAProxy 통계를 시각적으로 모니터링할 수 있도록 웹 인터페이스 구성\n
  • 스케줄러를 라운드 로빈이 아닌 다른 것으로 변경
  • 특정 서버에 대한 우선 순위/가중치 구성\n

그게 다야!