Haproxy가 L7, L4 모두 로드밸런싱 할수있다.
저번에는 설정을 L7 http로 리슨해서 받아넘겨주는 식이었는데
이번에는 L4 tcp로 리슨해서 넘겨주는 방식으로 하려고한다.
haproxy.conf 파일인데
로깅하는 법에 대해서 설명해주고 있다.
/var/log/haproxy.log
로 로그를 받아보고 싶으면
1) 네트워크 로그이벤트를 로깅하려면
/etc/sysconfig/syslog
파일을 수정해서
SYSLOGD_OPTION에 '-r' 옵션을 추가해서
작성하면 되고
2) local2를 통해서 원하는 위치로 로깅하려면 /var/log/haproxy.log
/etc/sysconfig/syslog
local2.* /var/log/haproxy.log
이렇게 수정하면 된다고한다.
global 설정에서(전역설정)
log 옵션
127.0.0.1 인 지금 대상 장비랑
local2로 바인드 되어있다.
이중에서 2번째인 local2를 보면
/etc/rsyslog.conf
이런식으로 설정파일이 담겨있다.
여기에 /etc/rsyslog.d/
도 참조한다고 하기때문에
/etc/rsyslog.d/haproxy.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1
$template Haproxy, "%msg%\n"
#rsyslog 에는 rsyslog 가 메세지를 수신한 시각 및 데몬 이름같은 추가적인 정보가 prepend 되므로
, message만 출력하는 템플릿 지정
# 이를 haproxy-info.log에만 적용한다.
# 모든 haproxy를 남기려면 다음을 주석 해제, 단 access log가 기록되므로, 양이 많다.
#local2.* /var/log/haproxy/haproxy.log
# local2.info는 haproxy 에서 에러로 처리된 이벤트들만 기록하게 됨 (포맷 적용)
local2.info /var/log/haproxy/haproxy-info.log;Haproxy
# local0.notice는 haproxy 가 재시작되는 경우와 같은 시스템 메세지를 기록하게됨 (포맷 미적용)
local2.notice /var/log/haproxy/haproxy-notice.log
yum install logrotate
로그를 관리하는 서비스이다.
자동 수집 삭제 압축등 로그를 관리하는 역할을 한다.
/etc/logrotate.d/haproxy
이렇게 서비스에대해서 저동적으로 생겨있는 설정 파일들을 볼 수 있다.
/var/log/haproxy/*.log {
daily
rotate 30 # 10-> 30, 30일 마다 실행
create 0644 nobody nobody # 0644 권한, nobody, nobody
missingok
notifempty
compress
sharedscripts
postrotate
# rsyslog서비스를 재시작한 것에 대한 로그는 보이지 않도록 즉각 삭제처리
/bin/systemctl restart rsyslog.service > /dev/null 2>/dev/null || true
# /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
# /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
rsyslog 재시작 해보고
systemctl restart rsyslog
systemctl status rsyslog
/var/log/haproxy/
경로에서 log에 대해서 info, notice 로그가
생성된것을 볼 수 있다.
/var/log/haproxy.log
L4와 L7 차이는
HTTP 로드밸런싱과, TCP 로드밸런싱의 차이가 있다.
L4는
TCP는 전송제어 프로토콜로 데이터를 전달하는 목적이 아니라 어느곳으로 전송할지 IP, Port를 backend로 지정하여 사용하고
L7은
HTTP 와 REST API 호출 주소를 로드밸런싱할 대상으로 backend로 설정하는 방식인데 이런 로드밸런싱을 어플리케이션 로드밸런싱이라고한다.
defaults
mode tcp
# http -> tcp , L7-> L4 mode
log global
option tcplog
# httplog -> tcplog
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
L7과 다르게 L4같은 경우는 static backend가 필요하지 않다.
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
bind 192.168.203.211:80
#acl url_static path_beg -i /static /images /javascript /stylesheets
#acl url_static path_end -i .jpg .gif .png .css .js
#use_backend static if url_static
default_backend tcp
#httpd -> tcp
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend http mode require this backend : static
#backend static
# balance roundrobin
# server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#backend httpd
# balance roundrobin
# server haproxy0 192.168.203.201:85 check
# server haproxy1 192.168.203.202:85 check
backend tcp
balance roundrobin
server nginx0 192.168.203.201:85
server nginx1 192.168.203.202:85