잡다한 내 인생의 기록

HAProxy 설정(로그보기 포함) 본문

프로그램/코딩

HAProxy 설정(로그보기 포함)

알 수 없는 사용자 2014. 5. 13. 13:23
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

필자는 HAProxy의 바다에 빠져 허우적대고 있습니다. 일단은 필요한 부분이긴 한데... 다른 설명들을 보면 로드밸런서 자체가 상당히 머리속에 들어오지 않더라구요. 서버관리를 하면서도 이런 부분에 대해 모른다는게 창피하지만, 이번에 직접 헤딩하면서 겪은, 아주아주 간단한 HAProxy 설정에 대해 포스팅 해 보도록 하겠습니다.

일단 얘기를 꺼내보자면, 현재 사용하고 있는 CentOS 서버의 HAProxy는 기본구성으로 세팅되어있었습니다. 그 뒤 로그문서를 찾지 못해 허우적대면서 헤딩으로 겨우 로그파일 생성에 성공하게 된 짧은 이야기입니다.

HAProxy가 뭔가...

아주 작은 제 지식으로 말씀드리자면(여러가지로 쓰이지만), 같은 기능을 하는 여타 서버에 대한 서버과부하를 이 HAProxy가 감지하여 여러 서버에 분산하는 서버 시스템이라고 알고 있습니다. 두대를 돌리고 있다고 하면 프록시서버에 접속한 사용자를 1번서버와 2번서버에 사용자가 적거나, 사용량이 적은 쪽에 분배하게 되는 시스템인 것이죠.

기본적인 부분에 대해서는 HAProxy라고 검색하시면 많은 정보들이 검색 될 것입니다.

이제 진짜 이야기를 시작해 보겠습니다.

우선, HAProxy를 설치하는데는 많은 무리가 없습니다.

저는 yum을 이용한 인스톨을 사용합니다.(apt-get install haproxy를 이용해도 무방합니다.)


1. repository 세팅

CentOS/RHEL 5, 32 bit:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

CentOS/RHEL 5, 64 bit:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

CentOS/RHEL 6, 32 bit:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

CentOS/RHEL 6, 64 bit:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2. HAProxy 설치

# yum install haproxy

3. HAProxy 설정(이 부분은 환경에 따라 아주 많이 바뀌게 됩니다. HTTPS냐 HTTP냐에 따라도 다르기 때문에 자세한 문서를 보셔야 할 듯 합니다. 저같은 경우 HTTP통신을 사용한 서버기때문에 아래와 같이 세팅했습니다만, 자세한 정보는 http://haproxy.1wt.eu/download/1.4/doc/configuration.txt(영문) 문서를 보시는 것이 좋습니다.

# vi /etc/haproxy/haproxy.cfg

// 여기서부터 haproxy.cfg파일 내용

global

log    /dev/log local0 info

log    /dev/log local0 notice

maxconn    4096 # 최대 커넥트

user          haproxy

user          haproxy

daemon


defaults

log        global

mode     http

option    httplog

option    dontlognull

retries    3

option    redispatch

option    forwardfor

option    forceclose

maxconn        2000

contimeout     5000

clitimeout       50000

srvtimeout      50000

stats    enable


listen    프록시명 0.0.0.0:80

balance    roundrobin

mode        http

option       httplog

option       httpclose

# 저는 매번 다른서버로 들어가면 안되기때문에 사용자의 cookie를 받아 서버에 분배합니다.

# 이 부분은 서버(프록시 서버 말고 전달되는 서버)에서 처음 접속시 cookie를 설정하도록 정보를 줘야겠죠.

cookie      SERVERID rewrite

server       서버명 서버아이피(내부아이피사용):포트 cookie SERVER_1 check

server       서버명(위와 다른) 서버아이피(내부아이피사용):포트 cookie SERVER_2 check

위 설정이 완벽한 설정은 아닙니다. 어쨋든 돌아가긴 하니... 써야겠죠 ㅠㅜ

frontend나 backend 등도 있는데, 그 부분은 잘 모르겠습니다... 하하;; 개발이 끝나면 다시 봐둬야겠어요...


자 이제 HAProxy가 돌아가는데에 대한 설정은 끝났습니다. service haproxy start로 실행할 수 있죠. 그 이전에 log를 보기 위한 설정으로 넘어가도록 하겠습니다.

/etc/default/haporxy에 대해 enabled값이 혹시 1이 아닌지 확인해야 합니다.

# vi /etc/default/haporxy

// 파일 내용

ENABLED=1       <- 혹시 0으로 되어있다면 1로 수정해줍니다.

로그를 남기는 부분은 rsyslog를 사용합니다. rsyslog.d에 haproxy.conf 파일을 생성하여 내용을 수정하도록 합시다.

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

// haproxy.conf 파일 내용

if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -var/log/haproxy/haproxy-info.log

& ~

if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -var/log/haproxy/haproxy-info.log

& ~

위의 파일에서 syslogserverity-text의 info와 notice는 haproxy.cfg 파일에서 명시한 로그타입 입니다.

이제 위와 같이 haproxy.conf 파일을 만들었다면, logrotate를 사용하여 로그 순환을 설정합니다.

# vi /etc/logrotate.d/haproxy

// haproxy 파일내용

/var/log/haproxy/*.log {

copytruncate

daily

missingok

rotate 28

compress

dalaycompress

notifempty

create 644 root adm

sharedscripts

postrotate

/etc/init.d/haproxy reload > /dev/null

endscript

}

다 됐습니다. 이제 rsyslog와 HAProxy를 재시작합니다.

# service rsyslog restart

# service haproxy restart

이제 로그가 생성되겠네요.

로그파일을 열어두고 프록시서버에 접속해보면, 로그가 쌓일 것입니다.

로그파일이 2개가 있습니다. info를 보죠(notice파일은 레이어정보, 큐 정보 등이 담겨있습니다.)

# tail -f /var/log/haproxy/haproxy-info.log

이에대한 로그 형식은 formatting하는 문서를 참조하실 수 있도록 링크를 걸어두겠습니다.

로그형식 관련 문서 : http://www.haproxy.com/sites/default/files/biblio/aloha_load_balancer_memo_log.pdf


로그에 관련하여 저는 들어오는 cookie에 대한 정보도 로깅 해야 하는데 이 부분은 아직 찾지 못했습니다. 혹시 아시는분은 댓글 남겨 주시옵고 :) 찾게되면 업데이트 하겠습니다.


PS. 태클환영

http://webdevwonders.com/haproxy-load-balancer-setup-including-logging-on-debian/ 의 내용을 주로 하여 작성된 내용입니다.

'프로그램/코딩' 카테고리의 다른 글

BlueStacks 25000 Error 해결방법  (0) 2014.08.23
Eclipse Indigo에서 jar 아카이브 만들기  (0) 2014.08.23
Tomcat 설정  (0) 2014.05.08
리눅스 유저 및 그룹생성  (0) 2014.05.07
Java Web.xml Struts2 로그 숨기기  (2) 2014.04.24