본문 바로가기

기술자료/기술운영자료

HAProxy 소개와 설정 (1/2)

1. HAProxy에 대하여

기존 하드웨어 방식의 로드 밸런서를 어느정도 대체 가능한 오픈소스 솔루션으로 알려져 있습니다.

네트워크 스위치에서 제공하는 L4, L7의 기능 및 로드 밸런싱 기능을 일부 제공하고 있습니다.



2. 구성 정보

OS : CentOS 6.6 64bit

Apache 2.2.15

MySQL 5.6.25

HAProxy 192.168.2.4

WEB1 192.168.2.201

WEB2 192.168.2.202



3. 설치


#yum -y update

 

 


#yum -y openssl-devel gcc gcc-c++ // 설치 전 필요한 라이브러리

 

 


#wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.14.tar.gz

 

 


#tar zxvf haproxy-1.5.14.tar.gz

 

 


#cd haproxy-1.5.14

 

 


#make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz

 

 


#make install

 

 


#cp ./examples/haproxy.init /etc/rc.d/init.d/haproxy // 실행 스크립트 복사

 

 


#chmod 755 /etc/rc.d/init.d/haproxy

 

 


#mkdir -p /etc/haproxy

 

 


#cp ./examples/haproxy.cfg /etc/haproxy/  // 샘플 설정 파일 복사

 

 


#mkdir -p /etc/haproxy/errors

 

 


#cp ./examples/errorfiles/* /etc/haproxy/errors/

 

 


#cd /usr/sbin

 

 


#ln -s /usr/local/sbin/haproxy haproxy

 

 


#useradd haproxy  // 계정 생성

 

 



4. 설정


 - 설정파일 구성

  크게 global, defaults, listen, frontend, backend의 영역으로 구분되며

  global은 전체 영역에 걸쳐 적용되는 기본 설정을 담당합니다.

  defaults는 이후 오는 영역(frontend, backend, listen)에 적용되는 설정이고

  frontend는 클라이언트 연결을 받아들이는 소켓에 대한 설정,

  backend는 앞에서 들어온 연결에 할당될 프록시 서버들에 대한 설정

  listen : frontend와 backend로 사용되는 포트를 한번에 설정하는 영역. TCP 프록시에 주로 이용 됩니다.




 - 간단한 웹서버 2대 로드밸런싱 하는 예제


#vi /etc/haproxy/haproxy.cfg


global

 

 

        log 127.0.0.1   local0

 

 

        log 127.0.0.1   local1 notice

 

 

        maxconn 4096

 

 

        chroot /usr/share/haproxy

 

 

        user haproxy

 

 

        group haproxy

 

 

        daemon

 

 

 

defaults

 

 

        log     global

 

 

        option  dontlognull

 

 

        retries 3

 

 

        redispatch

 

 

        maxconn 2048

 

 

        contimeout      5000

 

 

        clitimeout      50000

 

 

        srvtimeout      50000

 

 

        stats   enable

 

 

        stats uri /haproxy_stats

 

 

        stats refresh 10s

 

 

 

 

listen  test-web  192.168.2.4:80

 

 

        mode http

 

 

        option log-health-checks

 

 

        cookie  SERVERID rewrite

 

 

        cookie  JSESSIONID prefix

 

 

        balance roundrobin

 

 

        server  web1 192.168.2.201:80 cookie testweb1 check inter 2000 rise 2 fall 5

 

 

        server  web2 192.168.2.202:80 cookie testweb2 check inter 2000 rise 2 fall 5


 - 옵션 설명


global 전역 옵션 섹션

daemon : 백그라운드 모드(background mode)로 실행

log : syslog 설정

log-send-hostname : hostname 설정

uid : 프로세스의 userid를 number로 변경

user : 프로세스의 userid를 name으로 변경

node : 두 개 이상의 프로세스나 서버가 같은 IP 주소를 공유할 때 name 설정(HA 설정)

maxconn : 프로세스당 최대 연결 개수


Defaults 기본 옵션 섹션

log : syslog 설정

maxconn : 프로세스당 최대 연결 개수

listen webfarm 10.101.22.76:80 : haproxy name ip:port

mode http : 연결 프로토콜

option httpchk : health check

option log-health-checks : health 로그 남김 여부

option forwardfor : 클라이언트 정보 전달

option httpclose : keep-alive 문제 발생 시 off 옵션

cookie SERVERID rewrite : 쿠키로 서버 구별 시 사용 여부

cookie JSESSIONID prefix : HA 구성 시 prefix 이후에 서버 정보 주입 여부

balance roundrobin : 순환 분배 방식

stats enable : 서버 상태 보기 가능 여부

stats uri /admin : 서버 상태 보기 uri

server aaa.aaa 192.168.2.201:80 cookie testweb1 check inter 2000 rise 2 fall 5

real server 정보(server [host명] [ip]:[port] cookie [서버쿠키명] check inter [주기(m/s)] rise [서버구동여부점검횟수], fall [서비스중단여부점검횟수])




 - 로그 설정

haproxy의 경우 로그를 UDP를 통해 남기기 때문에

rsyslog에서 UDP 관련 로그 수집이 가능토록 설정이 필요함


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


$ModLoad imudp

 

 


$UDPServerAddress 127.0.0.1


$UDPServerRun 514


$template Haproxy,"%msg%\n"
 

local0.=info -/var/log/haproxy.log;Haproxy
 

local0.notice -/var/log/haproxy-status.log;Haproxy
 

local0.info -/var/log/haproxy-info.log;Haproxy
 

### keep logs in localhost ##
 

local0.* ~

 

 




5. 프로세스 시작 및 테스트


#/etc/init.d/haproxy start



- 상기 예제 처럼 stats enable 옵션을 부여하여 웹콘솔상에서 현황 확인이 가능 합니다.



그림입니다.
원본 그림의 이름: mem000022740037.tmp
원본 그림의 크기: 가로 740pixel, 세로 178pixel





6. 테스트 진행


apache ab를 통한 간단한 부하 테스트 진행을 해 보았습니다.


ServerLimit 256

MaxClients 256


#ab  -n 2000 -c 1000 http://192.168.2.4/


그림입니다.
원본 그림의 이름: mem000022740038.tmp
원본 그림의 크기: 가로 740pixel, 세로 583pixel






ServerLimit 2048

MaxClients 2048


#ab  -n 5000 -c 1000 http://192.168.2.4/


그림입니다.
원본 그림의 이름: mem000022740039.tmp
원본 그림의 크기: 가로 740pixel, 세로 581pixel





* 비록 간단한 index page 호출로 테스트를 진행 하였지만 로드밸런서의 성능 문제로 지연값이 발생하진 않음을 확인하였지만

  절대적인 기준의 잣대는 아니니 참고만 하시기 바랍니다.



그림입니다.
원본 그림의 이름: mem00002274003a.tmp
원본 그림의 크기: 가로 740pixel, 세로 183pixel

 

[출처] HAProxy 소개와 설정 (1/2)|작성자 에이원네트웍스