본문 바로가기
haproxy

Haproxy 기본 설치 및 설정 방법




1,Haproxy 기본 설치 및 설정 방법

## 컴파일로 설치 진행 하기 때문에 의존성 관련 패키지를 설치 한다.
yum -y install make gcc gcc-c++ pcre-devel openssl-devel 

## haproxy 1.6.1 버전을 다운 로드 한다.(2016년 3월 기준 1.6.x버전 안정화 버전이며, 1.7 버전에 개발 버전으로 배포중)
[root@NODE0 ~]#wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.1.tar.gz 


## /usr/local/haproxy 경로로 haproxy 를 설치 한다
[root@NODE0 ~]# tar xvzf haproxy-1.6.1.tar.gz
[root@NODE0 ~]# cd haproxy-1.6.1 
[root@NODE0 ~]# make prefix=/usr/local/haproxy install 

## 해당 경로에 정상 적으로 설치 된것을 확인 한다.
[root@NODE0 haproxy-1.6.1]# cd /usr/local/haproxy/
[root@NODE0 haproxy]# ls
doc  sbin  share

## haproxy 데몬은 특정 cfg를 생성후 해당 파일을 참조한 데몬으로 구동 된다. 테스트를 위해 /etc/haproxy/1.cfg 파일을 생성 한다.
## 아래 config 는 가장 기본적인 config 로 자세한 설명은 우선 생략하고,  haproxy 서버의 80 포트로 들어오면 192.168.229.135:80 로 proxy 되는 설정 이다.
[root@NODE0 haproxy]# vi etc/haproxy/i.cfg

    global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

    frontend http-in
        bind *:80
        default_backend servers

    backend servers
        server server1 192.168.229.135:80

## 설치된 haproxy경로에 있는 sbin 디렉토리의 haproxy 명령어로 -f는 데몬 실행시 읽으려는 cfg 파일을 나타내며,
## 실행전 -c 옵션으로 check mode로 체크만 실행 한다. 아래와 같이 vaild 를 확인 한다.
[root@NODE0 haproxy]# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/i.cfg -c
Configuration file is valid

## -f 옵션만 추가 하여, proxy 를 실행 한다. proxy 가 정상적으로 동작 할 경우 listening 되어 있는 포트를 확인 하며,
## curl 을 통하여 정상적으로 페이지가 열리는 것을 확인 할 수 있다.

[root@NODE0 haproxy]# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/i.cfg
[root@NODE0 haproxy]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1092/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1178/master         
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      2407/haproxy       
tcp        0      0 :::22                       :::*                        LISTEN      1092/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1178/master       

[root@NODE0 haproxy]# curl 192.168.229.138
node1

2.haproxy cfg 옵션
- haproxy 의 옵션은 https://cbonte.github.io/haproxy-dconv/configuration-1.6.html 에서 좀더 자세하게 설명 되어 있다.
- 각 지시자는 크게  global,defaults,frontend,backend ,listen 등 의 섹션으로  구성 되어 있으며 각각의 섹션 하단에 자세한 파라미터를 추가 하는 방식으로 구성 되어 있다.

- global은  프로세스 전체의 섹션으로 전체적인 프로세스에 관련된 부분을 설정 한다.
- defaults는 global 에 종속 되는 섹션으로 proxy mode,time out 등 해당 cfg 프로세스를 설정 한다.
- frontend 에서는 연결에 필요할 vitual ip 에 관련된 설정을 진행 한다. 해당 frontend 에서 설정된 아이피는 backend로 forward 된다.
- backend 는 위에서 설명한 frontend 에서 forward 된 연결을 받을 실제 real sever 아이피 관련 설정 이다.


 2-1. global
        daemon   # 데몬 형식으로 fork 하면서 실행 하는 파라미터 만약 추가 하지 않을 경우 백그라운드로 돌려야 한다.
        maxconn 256 #최대 연결수를 지정 한다 ulimit -n 을 통해 해당 서버의 기본 프로세스가 오픈 할 수 있는 갯수 만큼 지정 할 수 있다.

  2-2.  defaults
        mode http # 프록시 모드로 tcp,http,health 3가지 모드가 있다. 설정 하지 않을 경우 기본 모드는 tcp 이며,
                              #tcp 는 해당 포트에대한 어플리케이션 프록시 이다,http 모드는 http 인스턴스에서 작동 하며,health 는 단순한 health check 모드 이다.
          
        timeout connect 5000ms  # 전체 외부 클라이언트에서 실제 real 서버까지의 timout 설정 
        timeout client 50000ms # 외부 클라이언트에서 vip 까지의 timeout 설정
        timeout server 50000ms  # vip 서버에서 실제 real 서버 까지의 timout 설정


    2-3. frontend http-in # frontend  섹션 설정시 frontend <name> 구성으로 뒤에  해당 frontend 의 이름으로 섹션을 설정 한다.
                                          # 한 프로세스에서 여러 섹션 설정이 가능 하다.
        bind *:80                 # bind 지시자는 apche 의 binding 설정과 유사 하며, 해당 서버에서 listening 되어야 하는 아이피와 포트를 지정 한다. 
        default_backend servers #default_backend는 frontend 에서 받은 정보를 real backend로 보낼 이름을 지정 한다 아래 servers 라는 backend 설정된 아이피로 포워딩 된다.

    2-4. backend servers
        server server1 192.168.229.135:80
               # server 지시자는 server <name> <address>[:[port]] [param*] 형태로 실제 real 서버의 정보를 나타낸다 name 에 해당 real 서버의 이름을 명시 하며 뒤에 아이피 포트 추가적인 parameter 를 추가 한다.

  2-5 listen # 해당 섹션은 frontend+ backend 으로 한번에 설정 가능한 섹션이다.



반응형