웹사이트 검색

CentOS 7에서 Nginx용 로드 밸런서로 HAProxy를 설정하는 방법


이 페이지에서

  1. HAProxy의 기본 개념
    1. 레이어 4 및 레이어 7
    2. 균형 알고리즘\n

    HAProxy 또는 고가용성 프록시는 오픈 소스 TCP 및 HTTP 로드 밸런서 및 프록시 서버 소프트웨어입니다. HAProxy는 Willy Tarreau가 C로 작성했으며 SSL, 압축, 연결 유지, 사용자 정의 로그 형식 및 헤더 재작성을 지원합니다. HAProxy는 메모리 사용량이 적고 CPU 사용량이 적은 빠르고 가벼운 프록시 서버 및 로드 밸런서입니다. Github, StackOverflow, Reddit, Tumblr, Twitter 등과 같은 대규모 사이트에서 사용됩니다. 지난 몇 년 동안 가장 인기 있는 소프트웨어 로드 밸런서 및 프록시 서버가 되었습니다.

    이 튜토리얼에서는 서버 3개, 로드 밸런서 1개, Nginx 웹 서버 2개에 대한 HAProxy 설치 및 구성을 안내합니다. 단일 서버에 HAProxy를 설치한 다음 다른 서버에 Nginx 웹 서버를 설치합니다. HAProxy는 Nginx 웹 서버의 로드 밸런서 역할을 합니다.

    HAProxy의 기본 개념

    레이어 4 및 레이어 7

    HAProxy는 TCP 모드 레이어 4와 HTTP 모드 레이어 7의 두 가지 모드로 실행할 수 있습니다. 레이어 4 TCP 모드에서 HAProxy는 클라이언트에서 응용 프로그램 서버로 RAW TCP 패킷을 전달합니다. 계층 7 HTTP 모드에서 HAProxy는 HTTP 헤더를 응용 프로그램 서버로 전달하기 전에 구문 분석합니다. 이 튜토리얼에서는 Layer 7 HTTP 모드만 지원하는 웹 서버로 Nginx를 사용합니다.

    균형 알고리즘

    로드 밸런싱을 수행할 때 서버를 선택하기 위해 HAProxy에서 사용하는 알고리즘입니다. 다음 모드를 사용할 수 있습니다.

    라운드 로빈

    이것은 가장 간단한 균형 알고리즘입니다. 각각의 새 연결에 대해 다음 백엔드 서버에서 처리합니다. 목록의 마지막 백엔드 서버에 도달하면 백엔드 목록의 맨 위에서 다시 시작합니다.

    라스트콘

    새 연결은 최소한의 연결로 백엔드 서버에서 처리됩니다. 이것은 요청의 시간과 부하가 많이 다를 때 유용합니다.

    원천

    고정 세션을 위한 것으로, 클라이언트 IP는 이 IP로부터 마지막 요청을 받은 백엔드 서버를 결정하기 위해 해시됩니다. 따라서 IP A는 항상 backend1에서 처리하고 IP B는 세션을 방해하지 않도록 항상 banckend2에서 처리합니다.

    기타 알고리즘이 있습니다. 자세한 내용은 공식 HAProxy 사이트를 확인하세요.

    전제 조건

    • 3 CentOS 7

    로드밸런서
    192.168.1.102

    nginx1
    192.168.1.104

    nginx2
    192.168.1.105

    • 3개 서버 모두에 대한 루트 권한.\n

    1단계 - /etc/hosts 파일 구성

    로드 밸런서 서버에 로그인하고 /etc/hosts 파일을 편집합니다.

    ssh 
    sudo su
    vi /etc/hosts

    nginx1 및 nginx2 호스트 이름을 추가합니다.

    192.168.1.104    nginx1.loadbalancer.me     nginx1
    192.168.1.105    nginx2.loadbalancer.me     nginx2

    파일을 저장하고 편집기를 종료합니다.

    다음으로 Nginx 서버(nginx1 및 nginx2)에서 호스트 파일을 편집합니다.

    ssh 

    호스트 파일에서 로드 밸런서에 대한 새 줄을 편집하고 추가합니다.

    vi /etc/host

    각 nginx 서버에 로드밸런서 호스트 이름을 추가합니다.

    192.168.1.102    loadbalancer

    nginx1 및 nginx2 서버에서 이 작업을 수행합니다.

    2단계 - HAProxy 설치 및 구성

    HAProxy는 CentOS 7 리포지토리에서 사용할 수 있으며 로드 밸런서 서버에 로그인하고 패키지 목록을 업데이트합니다.

    ssh 
    yum -y update

    이제 다음 yum 명령으로 HAProxy를 설치합니다.

    yum -y install haproxy

    설치가 완료되면 "/etc/haproxy/" 디렉토리로 이동하여 원본 구성 파일을 백업합니다.

    cd /etc/haproxy/
    mv haproxy.cfg haproxy.cfg.orig

    다음으로 vi 편집기를 사용하여 새 HAProxy 구성 파일 "haproxy.cfg" 파일을 추가합니다.

    vi haproxy.cfg

    아래 구성을 붙여넣습니다.

    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        log         127.0.0.1 local2     #Log configuration

        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000               
        user        haproxy             #Haproxy running under user and group "haproxy"
        group       haproxy
        daemon

        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats

    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000

    #---------------------------------------------------------------------
    #HAProxy Monitoring Config
    #---------------------------------------------------------------------
    listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
        mode http
        option forwardfor
        option httpclose
        stats enable
        stats show-legends
        stats refresh 5s
        stats uri /stats                             #URL for HAProxy monitoring
        stats realm Haproxy\ Statistics
        stats auth howtoforge:howtoforge            #User and Password for login to the monitoring dashboard
        stats admin if TRUE
        default_backend app-main                    #This is optionally for monitoring backend

    #---------------------------------------------------------------------
    # FrontEnd Configuration
    #---------------------------------------------------------------------
    frontend main
        bind *:80
        option http-server-close
        option forwardfor
        default_backend app-main

    #---------------------------------------------------------------------
    # BackEnd roundrobin as balance algorithm
    #---------------------------------------------------------------------
    backend app-main
        balance roundrobin                                     #Balance algorithm
        option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
        server nginx1 192.168.1.104:80 check                 #Nginx1
        server nginx2 192.168.1.105:80 check                 #Nginx2

    구성 파일을 저장하고 종료합니다.

    다음으로 HAProxy에 대한 rsyslog를 구성합니다.

    HAProxy 통계를 기록하도록 rsyslog 데몬을 구성합니다. rsyslog.conf 파일을 편집하여 rsyslog에서 사용할 UDP 포트 514를 활성화합니다.

    vi /etc/rsyslog.conf

    UDP 연결을 활성화하려면 이 줄의 주석을 제거하십시오.

    $ModLoad imudp
    $UDPServerRun 514

    특정 IP를 사용하려면 아래와 같이 새 줄을 추가하면 됩니다.

    $UDPServerAddress 127.0.0.1

    파일을 저장하고 종료합니다.

    그런 다음 rsyslog에 대한 새 haproxy 구성 파일을 만듭니다.

    cd /etc/rsyslog.d/
    vi haproxy.conf

    아래에 구성 붙여넣기:

    local2.=info     /var/log/haproxy-access.log    #For Access Log
    local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer

    저장 및 종료.

    이제 rsyslog를 다시 시작한 다음 haproxy를 시작합니다.

    systemctl restart rsyslog
    systemctl start haproxy

    부팅 시 시작하도록 haproxy를 추가합니다.

    systemctl enable haproxy

    3단계 - Nginx 설치 및 구성

    이 섹션에서는 nginx1 및 nginx2 서버의 epel 저장소에서 Nginx를 설치합니다.

    서버에 로그인:

    ssh 

    아래 yum 명령으로 epel 저장소를 설치합니다.

    yum -y install epel-release

    이제 Nginx를 설치할 수 있습니다.

    yum -y install nginx

    Nginx가 설치되었습니다. 웹 디렉토리로 이동하여 색인 파일을 변경하여 두 서버 중 어느 것이 html 파일을 전달했는지 확인할 수 있도록 합니다.

    cd /usr/share/nginx/html/
    echo "<h1>nginx1.loadbalance.me</h1>" > index.html     #For nginx1 server
    echo "<h1>nginx2.loadbalance.me</h1>" > index.html     #For nginx2 server

    다음으로 부팅 시 시작하도록 Nginx를 추가한 다음 시작합니다.

    systemctl enable nginx
    systemctl start nginx

    nginx1 및 nginx2 서버에서 이 단계를 수행하고 있는지 확인하십시오.

    4단계 - 테스트

    로드 밸런서 IP에 액세스하여 브라우저에서 테스트: 192.168.1.102

    curl 명령으로 테스트:

    curl 192.168.1.102

    사용자 이름 및 비밀번호 "howtoforge"를 사용하여 포트 8080에서 실행 중인 HAProxy 웹 모니터링에 로그인하는 테스트:

    http://192.168.1.102:8080/stats

    HAProxy는 성공적으로 작동하고 있으며 두 Nginx 웹 서버의 부하 분산기 역할을 합니다.

    결론

    HAProxy 또는 고가용성 프록시는 TCP 기반 서비스에 고가용성을 제공하는 오픈 소스 소프트웨어로 HTTP 로드 밸런서 및 프록시 서버로 작동합니다. 이 소프트웨어는 C로 작성되었으며 SSL, keep-alive 및 압축을 지원합니다. HAProxy는 작은 메모리 공간과 낮은 CPU 사용량으로 빠르고 가벼운 로드 밸런서와 프록시 서버가 필요한 모든 사람에게 적합한 선택입니다. Haproxy는 레이어 4 TCP 모드 및 레이어 7 HTTP 모드에서 실행할 수 있습니다. Nginx는 HAProxy와 함께 레이어 7 HTTP 모드만 지원합니다. Layer 4 TCP 모드를 사용하려면 Apache와 같은 다른 웹 서버를 사용할 수 있습니다. CentOS 7에서 HAProxy는 기본 리포지토리에서 사용할 수 있습니다. 설치 및 구성이 쉽습니다.