- HAProxy2024년 11월 29일
- yeongki0944
- 작성자
- 2024.11.29.:09
Claude 3.5 Sonnet를 통해 개념을 정리한 문서입니다.
할루시네이션으로 인해 부정확한 정보가 있을 수 있습니다.1. 학습 개요
1단계: HAProxy 기초 이해
- HAProxy란 무엇인가?
- 주요 특징과 사용 목적
- 기본 아키텍처 이해
- 설치 및 기본 설정
2단계: 기본 구성과 설정
- Configuration 파일 구조
- Frontend/Backend 개념
- ACL 기초
- 기본적인 로드밸런싱 설정
3단계: 로드밸런싱 심화
- 다양한 로드밸런싱 알고리즘
- Health Check 설정
- Sticky Sessions
- SSL/TLS 설정
4단계: 모니터링과 로깅
- HAProxy Stats
- 로그 설정과 분석
- 성능 모니터링
- 문제 해결 방법
5단계: 고급 기능
- HTTP/TCP 모드
- 동적 구성
- 고가용성 설정
- 마이크로서비스 아키텍처에서의 활용
6단계: 엔터프라이즈 수준 운영
- 대규모 환경에서의 설정
- 보안 강화
- 성능 최적화
- 자동화와 CI/CD 통합
1단계: HAProxy 기초 이해
- HAProxy - High Availability Proxy
- TCP/HTTP 로드밸런서, 프록시 서버
- 2000년대 초반에 Willy Tarreau가 개발
주요 특징
- 고성능
- 단일 프로세스 이벤트 기반 모델
- 매우 낮은 메모리 사용량
- 초당 수만 개의 연결 처리 가능
- 높은 가용성
- 서버 헬스체크
- 장애 서버 자동 제거
- 세션 유지 기능
- 보안
- DDoS 방어
- SSL/TLS 종단점
- 접근 제어 목록(ACL)
기본 아키텍처
설치 방법
Ubuntu/Debian
sudo apt-get update sudo apt-get install haproxy
CentOS/RHEL
sudo yum install haproxy
기본 설정 파일 위치
- Ubuntu/Debian: /etc/haproxy/haproxy.cfg
- CentOS/RHEL: /etc/haproxy/haproxy.cfg
상태 확인 및 제어
# 서비스 시작 sudo systemctl start haproxy # 상태 확인 sudo systemctl status haproxy # 설정 테스트 haproxy -c -f /etc/haproxy/haproxy.cfg
사용 시나리오
- 웹 서버 로드밸런싱
- 여러 웹 서버에 트래픽 분산
- 장애 서버 자동 감지 및 제외
- 애플리케이션 프록시
- SSL 종단
- 요청/응답 수정
- 접근 제어
- 데이터베이스 로드밸런싱
- 읽기/쓰기 분리
- 연결 풀링
2단계: 기본 구성과 설정
HAProxy 설정 파일의 구조
global # 전역 설정 maxconn 50000 log /dev/log local0 user haproxy group haproxy defaults # 기본 설정 mode http timeout connect 10s timeout client 30s timeout server 30s log global frontend # 클라이언트 연결을 받는 부분 bind *:80 default_backend web_servers backend # 실제 서버들의 그룹 balance roundrobin server web1 10.0.0.1:80 check server web2 10.0.0.2:80 check
주요 섹션 상세 설명
1. global 섹션
- 프로세스 전체에 적용되는 보안 및 성능 튜닝 매개변수
global maxconn 50000 # 최대 동시 연결 수 user haproxy # 실행 사용자 group haproxy # 실행 그룹 daemon # 데몬 모드로 실행 log 127.0.0.1 local0 # 로그 설정
2. defaults 섹션
- 이후의 frontend/backend 섹션에 적용될 기본값
defaults mode http # 프로토콜 모드 (http/tcp) timeout connect 5s # 서버 연결 타임아웃 timeout client 50s # 클라이언트 타임아웃 timeout server 50s # 서버 타임아웃 option httplog # HTTP 로깅 활성화
3. frontend 섹션
- 클라이언트 연결을 받는 리스너 설정
frontend http_front bind *:80 # 80포트에서 리스닝 bind *:443 ssl crt /etc/ssl/certs/cert.pem # SSL 설정 mode http option httplog default_backend web_servers # 기본 백엔드 지정
4. backend 섹션
- 실제 서비스를 제공하는 서버들의 그룹
backend web_servers balance roundrobin # 로드밸런싱 알고리즘 option httpchk GET /health # 헬스체크 설정 server web1 10.0.0.1:80 check # 서버1 server web2 10.0.0.2:80 check # 서버2
5. 고정 섹션 (이름 변경 불가)
global # 전역 설정 maxconn 50000 log /dev/log local0 defaults # 기본 설정 mode http timeout connect 10s
6. 커스텀 섹션 (이름 변경 가능) - Frontend 커스텀 예시
# 웹 서비스용 프론트엔드 frontend web_front bind *:80 default_backend web_back # API 서비스용 프론트엔드 frontend api_front bind *:8080 default_backend api_back # 관리자 페이지용 프론트엔드 frontend admin_front bind *:9090 default_backend admin_back
7. 커스텀 섹션 (이름 변경 가능) - Backend 커스텀 예시
# 웹 서버 그룹 backend web_back balance roundrobin server web1 10.0.0.1:80 check server web2 10.0.0.2:80 check # API 서버 그룹 backend api_back balance roundrobin server api1 10.0.0.3:8080 check server api2 10.0.0.4:8080 check # 관리자 서버 그룹 backend admin_back balance roundrobin server admin1 10.0.0.5:9090 check
8. 이름 지정 규칙
- 사용 가능한 문자:
- 알파벳 (a-z, A-Z)
- 숫자 (0-9)
- 하이픈 (-)
- 언더스코어 (_)
- 이름은 중복 불가
- 공백 사용 불가
- 특수문자 사용 제한
ACL(Access Control List) 기초
ACL을 사용하여 트래픽을 조건부로 제어할 수 있습니다
frontend http_front bind *:80 acl is_api path_beg /api acl is_static path_end .jpg .gif .png .css .js use_backend api_servers if is_api use_backend static_servers if is_static default_backend web_servers
기본적인 로드밸런싱 예제
웹 애플리케이션 로드밸런싱
frontend web_frontend bind *:80 default_backend web_backend backend web_backend balance roundrobin option httpchk GET /health server web1 10.0.0.1:80 check server web2 10.0.0.2:80 check server web3 10.0.0.3:80 check backup # 백업 서버
SSL 터미네이션 설정
frontend https_frontend bind *:443 ssl crt /etc/ssl/private/combined.pem mode http default_backend secure_backend backend secure_backend balance roundrobin server web1 10.0.0.1:80 check server web2 10.0.0.2:80 check
다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)