Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개발자 코딩테스트
- 신입 개발자 필수 면접 질문
- 샐러드
- 신입 개발자 면접
- 셰프의찾아가는구내식당
- 개발자 정규직
- 프로그래머스
- 신입 개발자 면접 질문
- 개발자 면접
- docker image
- 자바 암호화 알고리즘
- 신입 개발자 자바 면접 질문
- 개발자 면접 질문
- 도커
- Plating
- 코딩테스트 연습
- 개발자 채용연계형인턴
- 자바 암호화
- 식단
- 개발자 인턴
- 프로그래머스 코딩테스트
- Linux
- 신입 개발자 자바 면접
- 자바 stream
- .dockerignore
- 직장인점심구독
- 자바 암호화 복호화
- 식단일기
- 플레이팅
- docker
Archives
- Today
- Total
달리는 두딘
[Linux] haproxy 설명 및 haproxy.cfg 설정 본문
haproxy란?
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 가 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:~#
더 자세한 내용은 해당 사이트를 참고
출처
'지식노트' 카테고리의 다른 글
[JPA] JPQL 사용 방법(@Query & nativeQuery & DTO Mapping & function) (4) | 2023.04.14 |
---|---|
[JAVA] HTTP 다양한 통신 방법 (URLConnection / RestTemplate / HttpClient / WebClient) (17) | 2023.03.13 |
[Linux] tcpdump 사용법 (0) | 2023.03.09 |
[JPA] Second Lost Updates Problem (두 번의 갱신 분실 문제) (6) | 2023.02.23 |
[JAVA] ConnectionTimeout, ReadTimeout, SocketTimeout 차이점 (2) | 2023.02.15 |