관리 메뉴

Jacob Baek's home

HAProxy 본문

Server/EtcServer

HAProxy

jacobbaek Jacob_baek 2015. 11. 17. 10:07

HAProxy (High Availability Proxy)

opensource 기반의 TCP/HTTP load balancer 및 linux, solaris, FreeBSD에서 동작할수 있는 proxying 솔루션이다. 멀티 서버환경의 workload를 분산시켜 성능과 신뢰성을 향상시킨다.


구성

실제로 haproxy.conf 내용이다.

1. global

  - 공통으로 사용되는 파라메터를 지정하는 섹션

  - 성능 튜닝 혹은 process 관리 및 보안을 지정할수 있다.

2. defaults

  - defaults 섹션에 지정된 파라메터를 모두 참조하게 된다.

3. Backend

  - 전달된 request들을 받는 서버의 집합

  - load balance 알고리즘을 설정

  - 서버와 포트의 리스트

4. Frontend

  - backend쪽으로 어떻게 request들을 전달할지 설정

  - IP 주소들과 Port 의 집합

  - ACL들


개념들

1. Load Balancing 분류

  - L4 Load balancing

    일반적으로 알고 있는 Load balancing mode로 ip:port mapping으로 load balancing을 수행한다.

  - L7 Load balancing 

    간단한 예로 sub-directory까지 load balancing 하는 거라 생각하면 된다.

    /와 /subdir 과 같은 directory가 존재할 때 각 request의 full uri를 분석하여 request에 맞는

    loadbalancing backend server쪽으로 전달한다.


L4 LB는 모든 request 를 load balancing 하여 forwarding하는 것이고 L7 LB는 request 에 합당한 content에 맞게 load balancing하는 것을 의미한다.


2. 알고리즘

- roundrobin

- leastconn

- source : 동일한 서버에 접속하게 된다.


3. Options

   - Sticky 

     사용자들이 지속적으로 동일한 Backend Server에 연결해야 하는 요구사항을 허용하기 위한 옵션


4. HealthCheck

   - 기본 healthcheck 방법은 TCP connection의 성립이 이루어지는지에 대한 check 이라 볼수 있다.

   - 가능한 healthcheck 방법은 다음과 같다.

     - TCP port / SSL port / HTTP service / LDAP Service / MySql Service / PgSQL service / 

        redis service / SMTP service 등 설정 가능

     - interval / buffer size / timeout / logging 등 설정 가능\

   - example

listen horizon

  bind 10.1.22.53:80 transparent

  bind 10.1.23.14:80 transparent

  mode http

  cookie SERVERID insert indirect nocache

  option forwardfor

  server overcloud-controller-0.internalapi.localdomain 10.1.23.21:80 check cookie overcloud-controller-0 fall 5 inter 2000 rise 2

  server overcloud-controller-1.internalapi.localdomain 10.1.23.13:80 check cookie overcloud-controller-0 fall 5 inter 2000 rise 2

  server overcloud-controller-2.internalapi.localdomain 10.1.23.19:80 check cookie overcloud-controller-0 fall 5 inter 2000 rise 2

     2초 간격(inter)로 5번 실패시 실패, 2번 정상 결과로 판단될 경우 정상

   - https://www.haproxy.com/doc/aloha/7.0/haproxy/healthchecks.html#response-validation


만약 SSL을 사용할 경우 아래링크를 참조하여 haproxy 서버에 ssl 인증서를 설치하고 

https://www.securesign.kr/guides/HAProxy-SSL-Certificates-Install

options ssl-hello-chk를 추가하여 ssl 인증서로 hello check이 되도록 하거나 


이외에도 비스한 기능을 제공하는 다음과 같은 솔루션이 있다.

- LVS

- Nginx


HAProxy 에 대한 대략적인 설명이 아래에 상세히 정리되어 있다.

https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts


HAProxy는 다음과 같은 역할을 수행할수 없다.
- request의 body 혹은 response를 수정할 수 없다.
- caching / web server 역할을 수행할 수 없다.
- 패킷 기반 load balancer 역할을 수행할 수 없다. (예. IP Packet, UDP Datagrams)
  - 즉 NAT 혹은 DSR(Direct Server Return) 같은 서비스를 수행할 수 없다.

참고

HAProxy HA

HAProxy는 Load Balancing 기능을 제공하지만 한개만 존재할 경우 이 또한 SPOF이 되고 만다.

이를 방지하기 위해 HAProxy에 대한 HA 구성을 해주어야 한다.

일반적으로 keepalived를 이용해 두개 이상의 HAProxy간의 healthcheck을 수행하고 VIP을 생성한다.


HAProxy 설정

1. 설정

   - 참고용으로 jenkins의 haproxy 설정 예시를 링크한다.

   - https://gist.github.com/xelwarto/ac4f8b43e4194355082c

2. stats

데이터 전송 및 연결 갯수, 서버 상태 정보등을 web을 통해 확인할 수 있다.

Down 혹은 Up 상태를 확인하고 Down일 경우 LastChk를 확인하면 연결실패의 원인을 유추해볼수 있다.

https://tecadmin.net/how-to-configure-haproxy-statics/#


HAProxy 활용

1. Lua 이용

아래의 두가지 모드에서 lua script를 동작시킬수 있다.

1. runtime mode : dns 해석이 가능하고 socket I/O가 불가능한 상황

2. initialize mode : dns 해석이 불가능하고 socket을 사용할 수 있는 상황


실제 Lua script를 통해 response를 만들어내거나 특정 action을 수행하게 할 수 있다.

(기존 haproxy의 제약사항을 조금이나마 개선할수 있다.)

- http://www.arpalert.org/src/haproxy-lua-api/1.7dev/


2. SSL offloading

SSL mode는 passthrough 모드와 termination 모드 중 사용이 가능하다.

일반적으로 https 통신이 frontend까지만 사용되는게 termination 모드이며 모든 pass를 https 로 통신하게 하는 것이 passthrough 이다.

offloading의 termination을 haproxy에서 수행하여 실제 서비스를 제공하는 서버에서의 복호화 과정의 burden을 줄이는 역할을 할 수 있다.


## 아래 comment는 확인 필요 (내가 오래전에 적어놨는데 이유를 모르겠음...)

## Cookie가 아닌 client 의 IP 식별이 가능한 X-Forwarded-For에 대한 정보를 추가한다.

- https://www.haproxy.com/blog/how-to-protect-application-cookies-while-offloading-ssl/

- https://serversforhackers.com/using-ssl-certificates-with-haproxy


3. grafana 

TBD

- https://grafana.com/dashboards/367


HAProxy community와 Enterprise version의 차이

간단히 비교해보면 Enterprise Edition의 경우 WAF와 같은 Security 기능 및 전달 support, 그리고 고성능 모듈등이 추가되어 있다고 볼수 있다.

https://www.haproxy.com/products/haproxy-community-vs-enterprise-edition.html


참고사이트

- http://d2.naver.com/helloworld/284659

- http://cbonte.github.io/haproxy-dconv/intro-1.6.html#3.1

'Server > EtcServer' 카테고리의 다른 글

memory doesn't recognize if memory is added at the slot  (0) 2020.07.01
Graylog  (0) 2017.10.12
HAProxy  (0) 2015.11.17
jenkins with scp plugin  (0) 2013.01.30
wiki engine  (0) 2013.01.04
install vmplayer in ubuntu  (0) 2012.08.06
0 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 Next