linux haproxy 설명 및 haproxy.cfg 설정 방법
haproxy는 고가용성, 고성능 TCP/HTTP 로드 밸런서 동작을 한다.
보통의 proxy 서비스는 TCP, load balance, routing 의 역할을 수행하지만 haproxy를 사용하게 된 이유는 다음과 같다.
1. 소스코드로 배포하여 임베디드 환경 등 플랫폼에 상관없이 사용할 수 있다.
2. config file 기반 설정이 용이하고 config 메뉴얼 배포가 잘되어있다.
3. HTTP routing 이 가능하다.
가장 중요한 3. HTTP routing 이 중요한 이유는 외부에 특정 포트만 노출하고(e.g. 80) 그 포트로 http/ws/unix socket 등 다양한 프로토콜을 라우팅 하기 위함이다.
haproxy routing case
- haproxy 가 80 포트로 대기하고 외부로부터 80 포트로 서로 다른 프로토콜이 접속하면 그에 대한 처리를 한다.
1) http (일반적인 웹 접근)
2) websocket (http header websocket upgrade 타입, ws 프로토콜 사용)
3) unix socket(일반적인 tcp 소켓 접근)
- 접속이 성사되면 각 header 또는 data를 분석하여 각각에 맞는 서비스로 전달한다.
1) http 프로토콜 > http header, 웹 서비스 요청으로 판단 > apache2 전달
2) websocket 프로토콜 > http header를 분석하여 ws 요청 판단 > websocket interface, websocket 서비스로 전달
3) unix socket 프로토콜 > payload가 00000000(8bytes zero)이면 socket 요청으로 판단 > socket 프로세스 전달
- 각각의 세션은 모두 haproxy 가 관리한다.
- 위와 같은 설정들을 통해서 [웹 브라우저 - 인터페이스 - 프로세스] 같은 서로 다른 프로토콜과 계층간 통신이 가능해진다.
haproxy.cfg 파일 내용
# haproxy.cfg
global
maxconn 4096
nbproc 1
defaults
frontend all
mode tcp
bind *:80
tcp-request inspect-delay 500ms
tcp-request content accept if HTTP
# websocket
acl is_websocket hdr(upgrade) -i websocket
use_backend ws_backend if is_websocket
acl is_socket payload(0,4) -m bin 00000000
use_backend socket_backend if !HTTP is_socket
default_backend www_backend
#frontend
backend www_backend
mode http
option httpclose
option forwardfor
option http-server-close
no option httpclose
server apache2 localhost:8100 weight 1 maxconn 1024 check
# backend
backend ws_backend
mode tcp
server ws_router_out localhost:2200 weight 1 maxconn 1024 check
# backend
backend socket_backend
mode tcp
server ws_router_in localhost:2100 weight 1 maxconn 1024 check
# backend
linux netstat 명령을 통한 haproxy 세션 목록 확인
- 외부 접근은 모두 80 포트로 이루어지고 각 세션은 internal socket 에 연결되어 있는 것을 확인할 수 있다.
- lsof -p <포트번호> 를 이용하여 어떤 포트가 어떤 프로세스와 연결되어 있는지 확인할 수 있다.
muabow@muabow-WorkSpace:~# netstat -anpt | grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1753/haproxy
tcp 0 0 127.0.0.1:36318 127.0.0.1:2200 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8654 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8655 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8652 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8653 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8651 ESTABLISHED 1753/haproxy
tcp 0 0 192.168.46.11:80 192.168.47.159:8669 ESTABLISHED 1753/haproxy
muabow@muabow-WorkSpace:~#
더 자세한 내용은 해당 사이트를 참고.
끝.
'IT > linux' 카테고리의 다른 글
linux vi, vim HTML indent 명렁 (0) | 2022.01.13 |
---|---|
디렉토리별 용량 확인 방법 / linux du, find 활용 (0) | 2022.01.09 |
svn add commit 전 취소 방법 (0) | 2022.01.05 |
linux git fatal: Not a git repository (or any of the parent directories): .git 오류 해결 방법 (40) | 2022.01.05 |
linux find 를 이용해 파일 찾아 지우기 (0) | 2021.12.31 |
댓글