Search
Duplicate

HAProxy

수업
Docker Container
주제
5 more properties
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 패킷을 보낸 후 연결을 종료할 때까지의 시간입니다. 이는 서버가 연결을 종료하려 할 때 적용됩니다.