HAProxy 설치하기 



Haproxy 는 소프트웨어 방식으로 TCP 기반의 HA 구성을 가능하게 해주는 오픈소스로


L4와 L7의 기능을 제공하고 설치 및 설정이 간편하기 때문에 빠른 이중화 구성이 가능하다.


게다가 버전이 올라가면서 SSL까지 정식으로 지원하게되면서 활용도가 많이 높아졌다.


기본설치부터 SSL설정까지 알아보자.



OS : CentOS 6.3 x64



1. 설치


1.5버전 부터 정식으로 ssl을 지원하므로 이후 버전을 사용하는게 좋다.


현재 최신 안정화버전은 1.6이지만 쭉 사용하던 1.5버전 기준으로 작성한다.



기본패키지 설치


yum install gcc gcc-c++ pcre-devel openssl-devel 


다운로드


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


압축풀고


tar xvfz haproxy-1.5.17.tar.gz

cd haproxy-1.5.17



컴파일설치


make USE_OPENSSL=1 TARGET=linux2628 ARCH=x86_64

make install



실행파일작업

cp -a examples/haproxy.init /etc/rc.d/init.d/haproxy

chmod 700 /etc/rc.d/init.d/haproxy 

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



설치끝. 엄청간단하다!




2. 설정파일


설정파일 경로만들고


mkdir -p /etc/haproxy



설정입력


vi /etc/haproxy/haproxy.cfg


# 서버관련된 사항들. 딱!! 보면 아는 옵션들...;


global

        log 127.0.0.1 local0 

        maxconn 4096

        user nobody

        group nobody

        daemon

        tune.ssl.default-dh-param 2048

 

# frontend 나 backend 에 지정된 설정이 없으면 defaults 설정을 따름

defaults

        log global

        mode http

        timeout connect 5000ms

        timeout client 50000ms

        timeout server 50000ms

        option dontlognull

        option http-server-close

        option tcplog

        option httplog

        option httpclose

        option forwardfor

        option accept-invalid-http-request


# 상태확인 페이지 설정. http://www.system.co.kr:8888 이런식으로 접근가능

listen admin *:8888

        stats enable

        stats uri /admin

        stats auth admin:password

        stats refresh 5s


# 각 웹서버들 앞단에 위치한 haproxy 자체에 대한 설정

frontend systemv_web_front

        bind 10.0.0.1:80

        bind 10.0.0.1:443 ssl crt /etc/haproxy/www.systemv.co.kr.pem

        reqadd X-Forwarded-Proto:\ https

        default_backend systemv_web_back


# haproxy 뒷단에 있는 real 웹서버들에 대한 설정

backend systemv_web_back

        errorfile 503 /etc/haproxy/index.html

        balance source

        cookie SERVERID insert indirect nocache

        option httpchk HEAD /index.jsp HTTP/1.0

        server web1 10.0.0.10:80 cookie s1 check inter 2000 rise 2 fall 2

        server web2 10.0.0.11:80 cookie s2 check inter 2000 rise 2 fall 2



설정중 몇가지만 정리해보자


errorfile 

모든 웹서버가 죽었을때 보여줄 페이지다. 임의로 html 형식으로 작성하면 된다. 

<img src 같은 태그는 안먹는것같다. 텍스트 위주로 쓰자.


balance

haproxy 는 여러 기준으로 로드밸런싱을 구현하는데 balance에 사용할수 있는 옵션은 아래와 같다.

roundrobin : 순차적 분배

static-rr : 각서버별로 설정한 가중치값에 따라 분배

leastconn : 접속수에 따라 분배

source : 전체 웹서버별수를 기준으로 접속자 IP를 해싱해서 분배

그외 uri, url_param, hdr,rdp-cookie 등이 더 있는데.. 일반적이지 않으므로 생략.


server

server 뒤에오는 web1, web2등의 이름은 임의로 부여가능하다. 

cookie s1 은 각 서버로 접속시에 SERVERID 라는 이름으로 s1 이라는 쿠키를 굽겠다는거고

inter 2000 은 헬스체크하는 시간 간격이다(밀리세컨).

fall 2 는 헬스체크시 2번 연속 다운이면 연결을 끊겠다는거고

rise 2 는 연결 끊긴상태에서 헬스체크시 연속 2번 살았다면 HA에 다시 포함시키겠다는 거다.



fall 과 rise 설정을 통해서 failover 와 failback 이 자동으로 실행되는데 간혹 failback은 하고 싶지 않을때가 있다.


이와 관련해서는 아래 링크에서 자세히 알수있는데 약간의 꼼수를 이용해 훨씬 간단히 구현할수 있다.

( http://blog.haproxy.com/2014/01/17/emulating-activepassing-application-clustering-with-haproxy/ ) 


rise 값을 99999999999 처럼 어이없이 늘려놓으면 된다. 예를 들어 inter 값이 1000 이라면 3000년 이후에 failback 이 될것이다.




3. SSL 


haproxy 를 사용할때는 각 웹서버에 인증서를 설치할 필요가 없다.


인증서는 haproxy 서버에만 설치하면 되며 모든 인증파일을 합쳐 하나의 파일로 만들어 


bind 의 crt 옵션을 사용해 파일명을 지정해 주면된다.



SSL인증서를 발급받으면 총 4개의 파일이 딸려온다.


- 도메인인증서 : 보통 신청한 도메인명을 포함한 파일이고 crt등의 확장자가 붙어있다.


- 상위인증서 : 상위기관 인증파일이며 CA인증서라고도 한다.


- 체인인증서 : 번들인증서, 중간인증서, intermediate 인증서라고 불린다.


- 키파일 : 내가 csr 생성시 사용한 키파일이다.



haproxy 에서 사용할 단일 인증파일을 만들기는 아주 간단하다. 


그냥 각 파일들을 텍스트 형식으로 오픈해 합치기만 하면 된다.


파일 합치기는 도메인인증서 -> 체인인증서 -> 상위인증서 -> 키파일 순이다.


cat 도메인 체인 상위 키파일 > crt.pem 이렇게 하면 pem 파일에 캐리지리턴값(^M) 이 들어갈 수 


있기때문에 하나씩 열어서 붙여주는게 좋다.


-----BEGIN MY CERTIFICATE-----

-----END MY CERTIFICATE-----

-----BEGIN INTERMEDIATE CERTIFICATE-----

-----END INTERMEDIATE CERTIFICATE-----

-----BEGIN INTERMEDIATE CERTIFICATE-----

-----END INTERMEDIATE CERTIFICATE-----

-----BEGIN ROOT CERTIFICATE-----

-----END ROOT CERTIFICATE-----

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----



4. 로그설정


로그 설정은 좀 더 살펴봐야 할것같은데 기본적으로 syslog 를 통해서 남기고 로그로테이트를 통해서 로그를 순환하는 방법까지만 남긴다.


vi /etc/rsyslog.d/haproxy.conf


$ModLoad imudp

$UDPServerRun 514 

$template Haproxy,"%msg%\n"

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

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

local0.* ~ 




vi /etc/logrotate.d/haproxy


/var/log/haproxy/*.log {

    size 1k

    missingok

    rotate 14

    compress

    ifempty

    delaycompress

    sharedscripts

    postrotate

        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

    endscript

}














'리눅스ETC' 카테고리의 다른 글

리눅스 컴파일 속도 향상시키기 make -j  (0) 2016.04.27
iscsi 구성하기  (0) 2016.04.06
php configure 에러  (0) 2016.04.06
리눅스 CentOS / netatalk 로 타임캡슐 만들기  (0) 2016.04.06
mysql 설치 에러  (0) 2016.04.05

to Top