[HAProxy] Docker기반으로 웹서버3대 로드 밸런싱 구성 예시
1. HAProxy 소개
- HAProxy는 TCP 및 HTTP 기반 애플리케이션에 대한 고가용성 및 로드 밸런싱을 제공하는 오픈 소스 소프트웨어 솔루션
- Reverse Proxy 기반으로 동작하고, Reverse Proxy, Load Balancer 기능 제공하며, Health Check 기능 제공
- HAProxy에는 관리자가 응용 프로그램의 성능을 실시간으로 추적할 수 있는 강력한 모니터링 도구가 제공됨
2. Docker 기반으로 HAProxy 구성 예시
- 사전조건: Linux기반 OS에서 docker-compose를 실행할 수 있는 상태
- 전체파일 구성
[root@console /APP/docker_haproxy/haproxy_web]# tree
.
├── create.sh
├── delete.sh
├── docker-compose.yml
├── haproxy
│ └── haproxy.cfg
├── log.sh
├── start.sh
├── stop.sh
├── weba
│ └── index.html
├── webb
│ └── index.html
└── webc
└── index.html
1) docker-compose.yml 구성
- Load Balancer 포트는 8000번, 통계화면 조회하는 포트는 7000번으로 구성
cat docker-compose.yml # This will start a haproxy and three web services. haproxy will act as a loadbalancer. version: "3.9" services: weba: image: httpd:latest container_name: weba volumes: - ./weba:/usr/local/apache2/htdocs environment: - TZ=Asia/Seoul expose: - 80 webb: image: httpd:latest container_name: webb volumes: - ./webb:/usr/local/apache2/htdocs environment: - TZ=Asia/Seoul expose: - 80 webc: image: httpd:latest container_name: webc volumes: - ./webc:/usr/local/apache2/htdocs environment: - TZ=Asia/Seoul expose: - 80 haproxy: image: haproxy:latest container_name: haproxy volumes: - ./haproxy:/haproxy-override - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro links: - weba - webb - webc ports: - "8000:8000" #service port - "7000:7000" #statistics port
2) haproxy.cfg 설정파일 구성
cat haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
maxconn 4096
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
listen stats
bind 0.0.0.0:7000
mode http
stats enable
stats hide-version
# stats scope .
stats realm Haproxy\ Statistics
stats uri /
# stats page id/pwd, skip
# stats auth user:pass
frontend web_balancer
bind 0.0.0.0:8000
mode http
default_backend web_backends
backend web_backends
mode http
balance roundrobin # roundrobin 알고리즘으로
option forwardfor
option httpchk GET / # default health cheak
#option httpchk HEAD /healthcheck.html HTTP/1.1
server weba weba:80 check inter 1s fastinter 500ms rise 1 fall 1 weight 1
server webb webb:80 check inter 1s fastinter 500ms rise 1 fall 1 weight 1
server webc webc:80 check inter 1s fastinter 500ms rise 1 fall 1 weight 1
3) 웹페이지 샘플 스크립트
- Load Balancer 기능 체크를 위해 파일 이름은 다르게
[root@console /APP/docker_haproxy/haproxy_web]# cat weba/index.html
weba index.html
[root@console /APP/docker_haproxy/haproxy_web]# cat webb/index.html
webb index.html
[root@console /APP/docker_haproxy/haproxy_web]# cat webc/index.html
webc index.html
4) docker-compose로 구동하기
- 아래 명령어를 통해서 구동
docker-compose -f docker-compose.yml up -d
5) 웹페이지 테스트결과
- Health Check 와 웹페이지 접속이 roundrobin 방식으로 접속됨(로그로 확인)
docker-compose -f docker-compose.yml logs -f
webb | 172.19.0.5 - - [29/Mar/2023:23:56:53 +0900] "GET /index.html HTTP/1.1" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:53 +0900] "GET / HTTP/1.0" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:53 +0900] "GET / HTTP/1.0" 200 16
webb | 172.19.0.5 - - [29/Mar/2023:23:56:54 +0900] "GET / HTTP/1.0" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:54 +0900] "GET / HTTP/1.0" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:54 +0900] "GET / HTTP/1.0" 200 16
webb | 172.19.0.5 - - [29/Mar/2023:23:56:55 +0900] "GET / HTTP/1.0" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:55 +0900] "GET / HTTP/1.0" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:55 +0900] "GET / HTTP/1.0" 200 16
webb | 172.19.0.5 - - [29/Mar/2023:23:56:56 +0900] "GET / HTTP/1.0" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:56 +0900] "GET / HTTP/1.0" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:56 +0900] "GET / HTTP/1.0" 200 16
webb | 172.19.0.5 - - [29/Mar/2023:23:56:57 +0900] "GET / HTTP/1.0" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:57 +0900] "GET / HTTP/1.0" 200 16
webc | 172.19.0.5 - - [29/Mar/2023:23:56:57 +0900] "GET /index.html HTTP/1.1" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:57 +0900] "GET / HTTP/1.0" 200 16
weba | 172.19.0.5 - - [29/Mar/2023:23:56:58 +0900] "GET /index.html HTTP/1.1" 200 16
6) HAProxy 통계 화면 조회내역
- IP:7000 포트로 접속시 통계화면이 표기되어 로그를 보지 않더라도 실시간으로 통계 확인이 용이함
댓글남기기