root@tps-haproxy:~# cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1:514 local0 ### 내용 추가
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend okestro-tps
mode http
bind *:80
bind *:443 ssl crt /etc/haproxy/ssl/dev-tps-server.pem
#acl is_test_app hdr(host) -i app.tps.okestro.cld/test/app
acl is_root path /
#http-request redirect scheme https unless { ssl_fc }
#http-request redirect code 301 location https://app.tps.okestro.cld/test/app if is_test_app is_root
option forwardfor
option httplog
option dontlognull
use_backend %[req.hdr(host),lower,map_dom(/etc/haproxy/maps/tps-hosts.map,be_default)]
default_backend k8s-backend
# Kuberenetes
backend k8s-backend
option httpclose
option forwardfor
balance roundrobin
server tps-worker1 172.10.40.157:80 check
server tps-worker2 172.10.40.215:80 check
server tps-worker3 172.10.40.58:80 check
server tps-worker4 172.10.40.53:80 check
server tps-worker5 172.10.40.203:80 check
# VM-Instance
backend harbor-backend
option httpclose
option forwardfor
balance roundrobin
server tps-harbor 172.10.40.173:80 check
backend nexus-backend
option httpclose
option forwardfor
balance roundrobin
server tps-nexus 172.10.40.20:8081 check
backend sonarqube-backend
option httpclose
option forwardfor
balance roundrobin
server tps-sonarqube 172.10.40.12:9000 check
backend minio-backend
option httpclose
option forwardfor
balance roundrobin
server tps-storage 172.10.40.13:40643 check
backend jenkins-backend
option httpclose
option forwardfor
balance roundrobin
#IF JENKINS MASTER-1 IS NOT AVAILABLE CHANGE TO MASTER-2
option httpchk GET /login HTTP/1.1\r\nHost:\ jenkins.dev.tps.okestro.cld
server tps-jenkins-master-1 172.10.40.221:8080 check
# Master-Slave 2세트 분리로 인한 주석
#server tps-jenkins-master-2 172.10.40.25:8080 check backup
backend gitlab-backend
option httpclose
option forwardfor
balance roundrobin
server tps-gitlab 172.10.40.227:80 check
backend pdns-backend
option httpclose
option forwardfor
server tps-pdns 172.10.40.187:9999 check
###### PowerDNS API SERVER ######
listen powerdns-api
bind *:8888
mode tcp
server pdnsapi 127.0.0.1:8081
Bash
복사
이 HAProxy 설정 파일은 네트워크 트래픽을 다양한 백엔드 서버로 라우팅하기 위한 다양한 구성을 포함하고 있습니다. 주요 구성 요소들을 분석하고 설명하겠습니다.
Global 설정
•
로그 설정: 로컬 syslog 서버와 로그 파일에 로깅을 설정합니다.
•
chroot: HAProxy의 루트 디렉터리를 /var/lib/haproxy로 설정하여 보안을 강화합니다.
•
stats socket: HAProxy의 상태와 통계를 /run/haproxy/admin.sock에서 확인할 수 있도록 설정합니다.
•
사용자 및 그룹: HAProxy 프로세스는 haproxy 사용자와 그룹으로 실행됩니다.
•
SSL 설정: 기본 CA 경로와 인증서 경로를 설정하고, 사용할 SSL 암호화 방식을 명시합니다.
Defaults 설정
•
기본 로깅: 모든 요청에 대한 로그를 기록합니다.
•
타임아웃: 연결, 클라이언트, 서버, 터널에 대한 타임아웃을 설정합니다.
•
오류 파일: 다양한 HTTP 오류 코드에 대해 사용자 정의 오류 페이지를 제공합니다.
Frontend 설정 (okestro-tps)
•
바인딩: HTTP (80 포트)와 HTTPS (443 포트, SSL)에 대해 수신하도록 설정합니다.
•
Access Control Lists (ACL): 특정 요청 조건을 기반으로 트래픽을 관리하기 위한 ACL을 설정합니다.
•
HTTP 옵션: 클라이언트의 실제 IP를 전달하고 HTTP 로그를 기록합니다.
Backend 설정
•
여러 백엔드(k8s-backend, harbor-backend, nexus-backend, sonarqube-backend, minio-backend, jenkins-backend, gitlab-backend, pdns-backend)가 정의되어 있으며, 각각의 서버 구성, 로드 밸런싱 방식, 체크 옵션을 포함합니다.
•
예시 (k8s-backend): Kubernetes 클러스터의 워커 노드에 대한 요청을 라운드로빈 방식으로 분산합니다.
추가 서비스 (powerdns-api)
•
PowerDNS API 서버: 특정 포트 (8888)에서 PowerDNS API 트래픽을 수신하고 처리합니다.
HAProxy에서 Keep-Alive 설정을 관리하는 방법은 HAProxy가 HTTP/1.1 및 HTTP/2 프로토콜을 지원함에 따라 중요하며, 이는 연결 지속성을 보장하고 성능을 향상시키는 데 도움이 됩니다. HAProxy의 Keep-Alive 설정을 적절히 구성하면 클라이언트와 서버 간의 연결을 유지하고, 네트워크 지연 시간을 줄이며, 리소스 사용을 최적화할 수 있습니다.
HAProxy에서 Keep-Alive 설정하기
1.
옵션 설정: HAProxy에서는 여러 가지 옵션을 통해 Keep-Alive 설정을 관리할 수 있습니다. 주로 사용되는 옵션은 다음과 같습니다:
•
option http-server-close: 이 옵션은 각 요청 후에 서버 연결을 닫지만 클라이언트 연결은 Keep-Alive 상태로 유지합니다. 이는 서버의 부하를 줄이면서 클라이언트의 연결 재사용을 가능하게 합니다.
•
option http-keep-alive: 이 옵션은 클라이언트와 서버 간의 연결을 Keep-Alive 상태로 유지합니다. 이는 연결 설정 및 해제 오버헤드를 최소화하며, 클라이언트와 서버 간의 빠른 통신을 지원합니다.
•
option forceclose: 이 옵션을 사용하면 HAProxy가 요청 처리를 완료한 후 연결을 강제로 닫습니다. 이는 특정 애플리케이션에서 연결을 닫아야 할 때 유용할 수 있습니다.
2.
timeout http-keep-alive: 이 타임아웃 설정은 HAProxy가 클라이언트 연결을 Keep-Alive 상태로 유지할 시간을 지정합니다. 예를 들어, 다음과 같이 설정할 수 있습니다:
timeout http-keep-alive 10s
Plain Text
복사
이 설정은 HAProxy가 클라이언트 연결을 최대 10초간 유지하도록 지정합니다. 이 시간 동안 추가 요청이 없으면 연결이 닫힙니다.
3.
구성 예제: 다음은 HAProxy 설정 파일에서 Keep-Alive를 활성화하는 방법을 보여주는 기본적인 예제입니다:
defaults
mode http
option http-keep-alive
timeout connect 5s
timeout client 30s
timeout server 30s
timeout http-keep-alive 10s
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
server server1 192.168.0.10:80 check
server server2 192.168.0.11:80 check
Plain Text
복사
주의사항
•
HAProxy 설정을 조정할 때는 서버의 부하와 네트워크 환경을 고려하는 것이 중요합니다. Keep-Alive를 너무 길게 설정하면 불필요하게 많은 연결이 열려 있어 시스템 자원을 소모할 수 있습니다.
•
HAProxy 설정 파일을 수정한 후에는 항상 HAProxy를 재시작하거나 리로드하여 변경 사항을 적용해야 합니다.
1.
timeout connect: 클라이언트가 HAProxy를 통해 서버에 연결을 시도할 때까지의 최대 대기 시간입니다. 연결 시도가 이 시간을 초과하면, 연결 시도는 실패로 간주됩니다.
2.
timeout client: 클라이언트가 초기 연결 후 데이터를 전송하기 시작할 때부터 HAProxy가 클라이언트로부터 데이터를 기다리는 최대 시간입니다. 이 타임아웃은 클라이언트가 데이터를 전송하는 동안 연결을 유지하는 데 사용됩니다.
3.
timeout server: HAProxy가 실제 서버로부터 응답을 기다리는 최대 시간입니다. 서버가 이 시간 내에 응답하지 않으면, 요청은 타임아웃으로 처리됩니다.
4.
timeout http-request: 클라이언트가 전체 HTTP 요청을 전송하기 위해 사용할 수 있는 최대 시간입니다. 이는 헤더와 바디가 완전히 수신되는 데 필요한 시간을 제한합니다.
5.
timeout http-keep-alive: HTTP 킵얼라이브 연결의 최대 유지 시간입니다. 이 시간이 지나면, 비활성 연결은 자동으로 종료됩니다.
6.
timeout queue: 요청이 처리를 위해 대기열에 있을 수 있는 최대 시간입니다. 이 시간을 초과하면 요청은 처리되지 않고 중단됩니다.
7.
timeout tunnel: HAProxy가 터널 연결을 유지하는 최대 시간입니다. 이는 주로 SSL/TLS 터널링이나 웹소켓 연결에 사용됩니다.
8.
timeout client-fin: 클라이언트가 FIN 패킷을 보낸 후 연결을 종료할 때까지의 시간입니다. 이는 클라이언트가 연결을 종료하려 할 때 적용됩니다.
9.
timeout server-fin: 서버가 FIN 패킷을 보낸 후 연결을 종료할 때까지의 시간입니다. 이는 서버가 연결을 종료하려 할 때 적용됩니다.